如何选择外接麦克风

Posted

技术标签:

【中文标题】如何选择外接麦克风【英文标题】:How to select external microphone 【发布时间】:2017-05-26 06:21:40 【问题描述】:

我已经成功地为 ios 编写了一个使用 AVAudioRecorder 的简单录音应用程序。到目前为止,如果它插入耳机插孔,它可以与内部麦克风或外部麦克风一起使用。如何选择通过 USB“闪电端口”连接的音频源?我必须深入了解 Core Audio 吗?

具体来说,我正在尝试连接 Apogee Electronics ONE USB 音频接口。

【问题讨论】:

【参考方案1】:

使用 AVAudioSession,获取 availableInputs。返回值是一个 AVAudioSessionPortDescriptions 数组。遍历数组检查 portType 属性以匹配您的首选端口类型,然后使用端口描述设置 preferredInput。

斯威夫特:

let audioSession = AVAudioSession.sharedInstance()
if let desc = audioSession.availableInputs?.first(where:  (desc) -> Bool in
    return desc.portType == AVAudioSessionPortUSBAudio
)
    do
        try audioSession.setPreferredInput(desc)
     catch let error
        print(error)
    

目标-C:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSString *preferredPortType = AVAudioSessionPortUSBAudio;
for (AVAudioSessionPortDescription *desc in audioSession.availableInputs) 
    if ([desc.portType isEqualToString: preferredPortType]) 
        [audioSession setPreferredInput:desc error:nil];            
    

【讨论】:

甜蜜!我会把 Core Audio 留到另一个不眠之夜。我仍在等待硬件对其进行测试,但这正是我所寻找的。谢谢!【参考方案2】:

您需要为此导入 AVFoundation。使用 AVAudioSession 的共享实例,您可以识别当前路由,即 AVAudioSessionPortDescription 将帮助您识别端口类型。我相信您不能选择特定的麦克风,但您可以识别和检查会话的 currentRoute

AVAudioSession *session = [AVAudioSession sharedInstance];
AVAudioSessionPortDescription *input = [[session.currentRoute.inputs count] ? session.currentRoute.inputs:nil objectAtIndex:0];

if ([input.portType isEqualToString:AVAudioSessionPortLineIn]) 
    NSLog(@"Audio Route: Input Port: LineIn");

else if ([input.portType isEqualToString:AVAudioSessionPortBuiltInMic]) 
    NSLog(@"Audio Route: Input Port: BuiltInMic");

else if ([input.portType isEqualToString:AVAudioSessionPortHeadsetMic]) 
    NSLog(@"Audio Route: Input Port: HeadsetMic");

else if ([input.portType isEqualToString:AVAudioSessionPortBluetoothHFP]) 
    NSLog(@"Audio Route: Input Port: BluetoothHFP");

else if ([input.portType isEqualToString:AVAudioSessionPortUSBAudio]) 
    NSLog(@"Audio Route: Input Port: USBAudio");

else if ([input.portType isEqualToString:AVAudioSessionPortCarAudio]) 
    NSLog(@"Audio Route: Input Port: CarAudio");

else 
    NSLog(@"Audio Input Port: Unknown: %@",input.portType);

【讨论】:

问题被标记为 Swift 3

以上是关于如何选择外接麦克风的主要内容,如果未能解决你的问题,请参考以下文章

Android:强制外部麦克风(插孔输入 3.5mm)保持打开状态

iOS:如何选择使用哪个麦克风(内置/外置)?

笔记本外接显示器分辨率如何调整为最佳状态

如何使用 PyAudio 选择特定的输入设备

JavaScript - 如何选择音频播放?

如何在 webapp 中选择相机?