xcode - 使用 Swift 通过 iPhone 扬声器强制播放音频文件

标签 xcode swift ios8 avaudioplayer

我有一个应用程序可以录制然后播放音频文件。目前正在通过耳机扬声器播放音频播放。有人能告诉我 Swift 将如何处理编码以强制从扬声器中输出音频吗?

下面是我用来播放音频文件的实例之一:

@IBAction func playAudioVader(sender: UIButton) {
    playAudioWithVariablePitch(-1000)
    }

    func playAudioWithVariablePitch(pitch: Float){
    audioPlayer.stop()
    audioEngine.stop()
    audioEngine.reset()

        var audioPlayerNode = AVAudioPlayerNode()
        audioEngine.attachNode(audioPlayerNode)

        var changePitchEffect = AVAudioUnitTimePitch()
        changePitchEffect.pitch = pitch
        audioEngine.attachNode(changePitchEffect)

        audioEngine.connect(audioPlayerNode, to: changePitchEffect, format: nil)
        audioEngine.connect(changePitchEffect, to: audioEngine.outputNode, format: nil)

        audioPlayerNode.scheduleFile(audioFile, atTime: nil, completionHandler: nil)
        audioEngine.startAndReturnError(nil)

        audioPlayerNode.play()

}

   override func viewDidLoad() {

    super.viewDidLoad()

    audioPlayer = AVAudioPlayer(contentsOfURL:receivedAudio.filePathURL, error: nil)
    audioPlayer.enableRate = true
    audioEngine = AVAudioEngine()
    audioFile = AVAudioFile(forReading:receivedAudio.filePathURL, error: nil)


}

最佳答案

2017 年 7 月编辑:请参阅 Husam 对 Swift 2.0 解决方案的回答。

从 Swift 1.2 开始,您可以使用 overrideOutputAudioPort 和 AVAudioSessionPortOverride。它可以通过做这样的事情来实现:

if !session.overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker, error:&error) {
   println("could not set output to speaker")
   if let e = error {
      println(e.localizedDescription)
   }
}

我现在正在开发一个使用它的应用程序,我有一个名为 setSessionPlayandRecord 的函数,它看起来像:

func setSessionPlayAndRecord() {
    let session:AVAudioSession = AVAudioSession.sharedInstance()
    var error: NSError?
    if !session.setCategory(AVAudioSessionCategoryPlayAndRecord, error:&error) {
        println("could not set session category")
        if let e = error {
            println(e.localizedDescription)
        }
    }
    if !session.overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker, error:&error) {
        println("could not set output to speaker")
        if let e = error {
            println(e.localizedDescription)
        }
    }
    if !session.setActive(true, error: &error) {
        println("could not make session active")
        if let e = error {
            println(e.localizedDescription)
        }
    }
}

关于xcode - 使用 Swift 通过 iPhone 扬声器强制播放音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29526435/

相关文章:

nsstring - NSURLConnection,Swift 中远程服务器的授权

iphone - Swift - 应用程序在 IOS 8.4 中启动时崩溃,错误为 _NSURLSessionTaskPriorityDefault

c++ - Xcode 错误编译 C++ 预期成员名称或声明说明符后的 ';'

objective-c - 使用 Objective-c 替代 Ctags/Cscope?

ios - 如何使用预先编写的建议方法创建一个快速文件?

html - 从 HTML key-value 获取数据

Xcode 将构建/运行但存档失败并显示 "No such module Google"- Swift iOS

ios - 使用 Swift 5 在 UIView 中绘制签名

ios - Web 请求后调用时 UIButton 不更新

ios - 如何访问 UITableViewRowAction iOS 8 的 View