ios - 在 iOS 中使用 AVAudioEngine 的默认音频输出

标签 ios swift

我正在尝试创建一个基本的 iOS 应用程序,让我可以录制音频,然后以不同的速度和音高播放它。

我正在使用 AVAudioPlayer 以较慢或较快的速度播放录制的音频,它按预期工作。声音在我的耳机中播放。

我正在使用 AVAudioEngine 以不同的音高播放录制的音频,除了音频是在我的 Thunderbolt 显示扬声器而不是我的耳机上播放外,它可以正常工作。

我一直在阅读文档以了解此行为,但结果很短。在我的 View Controller 方法 viewDidLoad 中,我按如下方式设置了 Audio Session :

 let session = AVAudioSession.sharedInstance()
 session.setCategory(AVAudioSessionCategoryPlayback, error: &error)
 session.setActive(true, error: &error)

再往下,我定义了一个函数来触发使用音频引擎的声音,如下所示:

let playerNode = AVAudioPlayerNode()
audioEngine.attachNode(playerNode)

let changePitchNode = AVAudioUnitTimePitch()
changePitchNode.pitch = 1000
audioEngine.attachNode(changePitchNode)

audioEngine.connect(playerNode, to: changePitchNode, format: audioFile.processingFormat)
audioEngine.connect(changePitchNode, to: audioEngine.outputNode, format: audioFile.processingFormat)

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

audioEngineaudioFile 在类中全局声明。整个项目可以在 https://github.com/KevinSjoberg/pitch-perfect 找到。 .

谁能解释为什么它一直在我的监听扬声器而不是我的耳机上播放声音?

最佳答案

我想通了。发生这种情况的原因是我正在使用 Thunderbolt Display 麦克风录制我的声音。由于某些未知原因,这使得 AVAudioEngine 使用监听扬声器。通过将输入源切换到我的 MBP 的麦克风,一切都按预期进行。

我只是在猜测,但这听起来确实像是一个错误,所以我已经向 Apple 提交了一份报告。

关于ios - 在 iOS 中使用 AVAudioEngine 的默认音频输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31994693/

相关文章:

ios - CDYelpFusionKit 初始化错误

ios - 如何将进度条添加到 UIAlertController?

ios - 在 Swift 中与两个 Collection View 同步滚动?

ios - 将对象保存到核心数据中

ios - Swift 中枚举的默认值

swift - 由于 Realm [iOS] 中缺少 GroupBy 和 Sum,操作非常缓慢

swift 4 : Printing out Bool optionals as either unwrapped true or false or as wrapped nil?

ios - 重命名 Xcode 应用程序时向 Sigabrt 发出信号

ios - 如何在 swift 中定义 CGPatternDrawPatternCallback

ios - Swift 通过 appdelegate 将 View 添加到前面