路由audioinput从iPhone上的TOP麦克风接收

我正在写一个小应用程序来logging多个轨道,并将其重新播放。 我正在使用PlaybackAndRecord模式,并将我的输出路由到主扬声器。 问题是底部的麦克风还在使用input,所以现在当我录音的时候,新轨道上的其他音轨输出真的很响。 这是我到目前为止:

audioSession = [AVAudioSession sharedInstance]; [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; OSStatus propertySetError = 0; UInt32 allowMixing = true; propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing); UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); [audioSession setActive:YES error:nil]; 

使用AVAudioSession获得可用的input。 在我的iPhone 5上看起来像这样。

 NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs); "<AVAudioSessionPortDescription: 0x14554400, type = MicrophoneBuiltIn; name = iPhone Microphone; UID = Built-In Microphone; selectedDataSource = Back>" 

然后使用这些input之一来获取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]; } }