2014-07-07 447 views
4

對於應用程序,我們需要從兩個不同的音頻源進行錄製。一個麥克風是一個特殊的(喉嚨)麥克風,它帶有與麥克風使用的iPhone耳機相同的連接器。iPhone/iPad上的雙通道錄音:耳機+內置麥克風

在第二個頻道上,我們希望記錄環境聲音,如果我們可以在從喉音麥克風耳機錄製的同時從iPhone/iPad內置麥克風錄音,那麼最好的方法就是錄音。

這有可能嗎?任何其他提示?

回答

2

操作系統當前只允許應用程序一次連接到一個音頻源路由。在iOS設備上錄製雙聲道的唯一方法是使用標準USB立體聲ADC或具有多個麥克風輸入的音頻混合面板,使用Aple USB to Lightning接口(較舊型號上的相機連接套件)。

2

我發現蘋果庫有關如何選擇不同的麥克風端口數據源的一些常見問題,也許這將是有益的:

https://developer.apple.com/library/ios/qa/qa1799/_index.html

的iOS 7爲開發者提供更多的靈活性,在選擇方面特定的內置麥克風。

使用iOS 7中引入的API,開發人員可以執行諸如定位代表內置麥克風的端口描述,定位特定麥克風(如「前」,「後」或「底部」),設置您的選擇麥克風作爲首選數據源,將內置麥克風端口設置爲首選輸入,如果硬件支持,則甚至選擇首選麥克風極性模式。見AVAudioSession.h。

清單1說明應用程序如何可以發現,表示內置麥克風,找到(在iPhone 5或具有面向前的麥克風另一設備)前麥克風,設置前麥克風作爲優選數據AVAudioSessionPortDescription源並將內置麥克風端口設置爲首選輸入。

清單1演示輸入選擇。

There are 3 data sources for port :"<AVAudioSessionPortDescription: 0x14d935a0, type = MicrophoneBuiltIn; name = iPhone Microphone; UID = Built-In Microphone; selectedDataSource = Bottom>" 
(
    "<AVAudioSessionDataSourceDescription: 0x14d93800, ID = 1835216945; name = Bottom>", 
    "<AVAudioSessionDataSourceDescription: 0x14d938d0, ID = 1835216946; name = Front>", 
    "<AVAudioSessionDataSourceDescription: 0x14d93a10, ID = 1835216947; name = Back>" 
) 
Currently selected source is "Bottom" for port "iPhone Microphone" 
Attempting to select source "<AVAudioSessionDataSourceDescription: 0x14d938d0, ID = 1835216946; name = Front>" on port "iPhone Microphone」 

UPDATE 14 Nov

用在前面,我可以設置內置麥克風的特定代碼:當在iPhone 5上運行

#import <AVFoundation/AVAudioSession.h> 
- (void) demonstrateInputSelection 
{ 
    NSError* theError = nil; 
    BOOL result = YES; 
    AVAudioSession* myAudioSession = [AVAudioSession sharedInstance]; 
    result = [myAudioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&theError]; 
    if (!result) 
    { 
     NSLog(@"setCategory failed"); 
    } 
    result = [myAudioSession setActive:YES error:&theError]; 
    if (!result) 
    { 
     NSLog(@"setActive failed"); 
    } 
    // Get the set of available inputs. If there are no audio accessories attached, there will be 
    // only one available input -- the built in microphone. 
    NSArray* inputs = [myAudioSession availableInputs]; 
    // Locate the Port corresponding to the built-in microphone. 
    AVAudioSessionPortDescription* builtInMicPort = nil; 
    for (AVAudioSessionPortDescription* port in inputs) 
    { 
     if ([port.portType isEqualToString:AVAudioSessionPortBuiltInMic]) 
     { 
      builtInMicPort = port; 
      break; 
     } 
    } 
    // Print out a description of the data sources for the built-in microphone 
    NSLog(@"There are %u data sources for port :\"%@\"", (unsigned)[builtInMicPort.dataSources count], builtInMicPort); 
    NSLog(@"%@", builtInMicPort.dataSources); 
    // loop over the built-in mic's data sources and attempt to locate the front microphone 
    AVAudioSessionDataSourceDescription* frontDataSource = nil; 
    for (AVAudioSessionDataSourceDescription* source in builtInMicPort.dataSources) 
    { 
     if ([source.orientation isEqual:AVAudioSessionOrientationFront]) 
     { 
      frontDataSource = source; 
      break; 
     } 
    } // end data source iteration 
    if (frontDataSource) 
    { 
     NSLog(@"Currently selected source is \"%@\" for port \"%@\"", builtInMicPort.selectedDataSource.dataSourceName, builtInMicPort.portName); 
     NSLog(@"Attempting to select source \"%@\" on port \"%@\"", frontDataSource, builtInMicPort.portName); 
     // Set a preference for the front data source. 
     theError = nil; 
     result = [builtInMicPort setPreferredDataSource:frontDataSource error:&theError]; 
     if (!result) 
     { 
      // an error occurred. Handle it! 
      NSLog(@"setPreferredDataSource failed"); 
     } 
    } 
    // Make sure the built-in mic is selected for input. This will be a no-op if the built-in mic is 
    // already the current input Port. 
    theError = nil; 
    result = [myAudioSession setPreferredInput:builtInMicPort error:&theError]; 
    if (!result) 
    { 
     // an error occurred. Handle it! 
     NSLog(@"setPreferredInput failed"); 
    } 
} 

清單1將產生以下控制檯輸出iPhone錄製聲音,現在我試圖更換iPhone上的特定麥克風以模擬立體聲錄音。

+0

如果您可以在答案中引用常見問題解答的相關部分,以防止鏈接消失,這將有所幫助。 – womble

+0

我會試一試。 – Artisan

+0

謝謝!我將你的示例代碼用於一個不相關的項目 - 並且它在第一次嘗試中就起作用了! –