2015-08-13 37 views
0

我试图创建一个基本的iOS应用程序,让我录制音频,然后以不同的速度和音调播放它。在iOS中使用AVAudioEngine的默认音频输出

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

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

我一直在阅读文档,以了解这种行为,但总结出来。在该方法中,viewDidLoad我的视图控制器,我设置音频对话如下:

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找到。

任何人都可以阐明为什么它坚持在我的显示器扬声器而不是我的耳机上播放声音吗?

回答

1

我已经想通了。造成这种情况的原因是我使用了Thunderbolt Display麦克风来录制我的声音。由于某些未知原因,这使得AVAudioEngine改为使用监听扬声器。通过将输入源切换到MBP的麦克风,使所有内容都按预期工作。

我只是猜测,但它听起来像一个错误,所以我已经提交了一份报告给苹果。