路由音频输入以从iPhone上的TOP麦克风接收

时间:2012-04-23 00:26:52

标签: iphone ios xcode4 avfoundation

我正在编写一个小应用程序来录制多个曲目并将它们重新播放。 我正在使用PlaybackAndRecord模式,我将输出路由到主扬声器。 问题是底部麦克风仍然用于输入,所以现在当我录制时,我在其他轨道上的输出在新轨道上非常响亮。 以下是我到目前为止的情况:

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];

1 个答案:

答案 0 :(得分:3)

使用AVAudioSession获取可用输入。在我的iPhone 5上它看起来像这样。

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];
    }
}