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

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

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

【问题讨论】:

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


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2017-08-25
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    相关资源
    最近更新 更多