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

我有一个应用程序记录,然后播放音频文件.目前,通过耳机扬声器播放音频.有人能告诉我 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)
        }
    }
}

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...