【问题标题】:Select Back Microphone on iPhone 5在 iPhone 5 上选择后置麦克风
【发布时间】:2024-01-08 16:30:02
【问题描述】:

RemoteIO 单元有没有办法在 iPhone 5 上拾取麦克风?我可以将AVAudioSession 配置为在前置麦克风或底部麦克风之间进行选择,但我找不到选择后置麦克风的方法。

AVFoundation framework 在使用后置摄像头时肯定会使用后置麦克风进行视频录制,但我想要一种使用 CoreAudio 来选择相同的方法。这可能吗?

【问题讨论】:

  • 嗨,Deepak Sharma,你能给我一些想法或代码来选择前置麦克风或底部麦克风吗?提前致谢
  • 嘿,Deepak,您找到解决方案了吗?如果有,你介意分享一下吗?

标签: iphone avfoundation core-audio audiounit remoteio


【解决方案1】:

kAudioSessionProperty_Mode 设置为kAudioSessionMode_VideoRecordingAudioSessionSetProperty 使用离摄像头最近的麦克风,应该是后置麦克风。那是如果您使用音频会话服务。 AVAudioSessionModeVideoRecording如果您使用 AVFoundation 进行录制。文档说“使用此模式可能会导致系统提供适当的音频信号处理。”我将其解释为“我们也可以使用其他麦克风来消除噪音”。

【讨论】:

    【解决方案2】:

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

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

    然后使用这些输入之一来获取可用数据源,就像这样。

    NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs[0].dataSources);
    
      "<AVAudioSessionDataSourceDescription: 0x145afb00, ID = 1835216945; name = Bottom>",
      "<AVAudioSessionDataSourceDescription: 0x145b1870, ID = 1835216946; name = Front>",
      "<AVAudioSessionDataSourceDescription: 0x145b3650, ID = 1835216947; name = Back>"
    

    现在您可以设置首选数据源了。

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

    【讨论】:

    • 谢谢。但这应该只适用于我相信的 iOS 7。我认为这也可以。
    • 使用此代码的类别应该是什么,用于设置首选数据源?