如何选择外接麦克风

时间:2017-05-26 06:21:41

标签: ios ipad swift3 core-audio audio-recording

我已成功为iOS编写了一个使用AVAudioRecorder的简单录制应用程序。到目前为止,它可以与内置麦克风或外接麦克风配合使用,如果它插入耳机插孔。如何选择通过USB"闪电端口"?连接的音频源?我是否需要深入了解Core Audio?

特别是我试图连接Apogee Electronics ONE USB音频接口。

2 个答案:

答案 0 :(得分:6)

使用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)
    }
}

的Objective-C:

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

答案 1 :(得分:1)

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

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