2015-08-13 98 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的麥克風,使所有內容都按預期工作。

我只是猜測,但它聽起來像一個錯誤,所以我已經提交了一份報告給蘋果。