2013-01-15 31 views
2

據我所知,iPhone上有2個麥克風。 1靠近音頻插孔旁邊的頂部,另一個是您講話的麥克風。 默認的麥克風似乎是你說的那個。僅使用iPhone中的頂級麥克風

如何以編程方式選擇使用哪個麥克風?我正在爲我的應用程序使用Core Audio。

基本上我想用頂級麥克風進行錄音。目前當我錄製底部麥克風時正在使用。有沒有辦法覆蓋默認的麥克風設置?

我知道可以通過以下方式覆蓋默認揚聲器設置。

UInt32 yes = YES; 

AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,  sizeof(UInt32), &yes); 

iPhone上的麥克風類似嗎?

謝謝。

+0

有人嗎?像減少底部麥克風的增益也會很好...... – lppier

回答

0

使用AVAudioSession獲取可用輸入。

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

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

然後使用其中一個輸入來獲得availableDataSources,就像這樣。

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

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

我們可以看到,其實有三個麥克風,在這個iPhone:頂前,頂了回去,和底部。現在您可以設置您的首選數據源。

AVAudioSessionPortDescription *port = [AVAudioSession sharedInstance].availableInputs[0]; 
for (AVAudioSessionDataSourceDescription *source in port.dataSources) { 
    if ([source.dataSourceName isEqualToString:@"Back"]) { 
     [port setPreferredDataSource:source error:nil]; 
    } 
}  

希望這有助於你 編碼愉快!

0

我的2美分,迅速4:

class func test3Mics(){ 

     guard let inputs = AVAudioSession.sharedInstance().availableInputs else{ 
      return 
     } 
     print(inputs.debugDescription) 

     for input in inputs{ 
      print(input.dataSources ?? "??") 
     } 

     // set preferred: 
     let preferredPort = inputs[0] 
     if let dataSources = preferredPort.dataSources{ 
     for source in dataSources { 
       if source.dataSourceName=="Back" { 
        do { 
         try preferredPort.setPreferredDataSource(source) 
        }catch _ { 
          print("cannot set frontDataSource") 
        } 
       } 
      } 
     } 
    }