2013-10-19 236 views
6

iPhone 5有三個麥克風 - 正面,背面和背面。我想同時記錄下所有的信號處理。我試了幾天失敗了。iPhone上的立體聲錄音

使用AVAudioSession,我可以看到麥克風:

NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs); 

    "<AVAudioSessionPortDescription: 0x14554400, type = MicrophoneBuiltIn; name = iPhone Microphone; UID = Built-In Microphone; selectedDataSource = Back>" 

NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs[0].inputDataSources); 

    "<AVAudioSessionDataSourceDescription: 0x145afb00, ID = 1835216945; name = Bottom>", 
    "<AVAudioSessionDataSourceDescription: 0x145b1870, ID = 1835216946; name = Front>", 
    "<AVAudioSessionDataSourceDescription: 0x145b3650, ID = 1835216947; name = Back>" 

我可以用AVAudioSessionPortDescription -setPreferredDataSource:error:從三個一個記錄。但我不能同時錄製多首歌曲。如果我將輸入通道的數量設置爲2,則可以從同一個麥克風獲得兩個相同的音軌。

AVAudioRecorder有一個屬性channelAssignments這似乎像它應該工作,但AVAudioSession inputNumberOfChannelsmaximumInputNumberOfChannels都是1屬性channelAssignments是專爲具有多通道的輔助麥克風。

我試過使用低級別AudioUnit,但我得到了相同的結果。我無法在AudioUnit上找到任何屬性來更改輸入源。

任何幫助,將不勝感激。

回答

4

我的理解,畢竟我的研究試圖做同樣的事情,正是你所描述的 - 你不能更喜歡多個數據源的一個設備,因此你不能記錄多個內置麥克一次。如果有人能證明我錯了,我會非常喜歡聽到它!

旁註:我似乎無法運行您的代碼。由於寫的,我得到

Property availableInputs not found on object of type 'id' 

即使按摩你有什麼成不需要任何顯式轉換格式後:

NSLog(@"%@", [[[AVAudioSession sharedInstance] availableInputs][0] inputDataSources]); 

我得到SIGABRT:

-[AVAudioSessionPortDescription inputDataSources]: unrecognized selector sent to instance 0xd59dbe0' 

你使用的是你的代碼實際編譯的SDK,少得多的運行?

+0

我認爲您需要≥iOS 7.0(請參閱https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/Reference/Reference.html#//apple_ref/doc/uid/TP40008240 -CH1-SW112)。 –

+2

我所有的經驗都與使用iOS 7 SDK有關,因此單靠這一點不足以回答我的問題,但也許我錯過了更具體的東西。 –

+0

已經在iOS8或iOS9 beta版上試過了嗎?我有興趣同時記錄兩個來源。 – nacho4d