【问题标题】:AudioKit v5: How does one choose the microphone?AudioKit v5:如何选择麦克风?
【发布时间】:2020-10-03 20:58:14
【问题描述】:

我正在尝试使用 SPM 将我的项目更新到 AudioKit v5。据我在当前文档中看到的,您通过将麦克风附加到音频引擎输入来实例化麦克风。

但是,我错过了以前的 AudioKit.inputDevices(然后是 AKManager.inputDevices)。我以前可以选择我喜欢的麦克风。

如何在 iOS 上使用 AudioKit v5 选择特定的麦克风?

【问题讨论】:

    标签: audiokit


    【解决方案1】:

    截至 2020 年 11 月 6 日,您需要确保您使用的是 v5-develop 分支,因为 v5-main 仍然不支持 48K 采样率的硬件。

    这是允许您根据调试描述选择麦克风的代码:

    // AudioKit engine and node definitions
    let engine = AudioEngine()
    var mic : AudioEngine.InputNode!
    var boost : Fader!
    var mixer : Mixer!
    
    // Choose device for microphone
    if let inputs = AudioEngine.inputDevices {
        // print (inputs) // Uncomment to see the possible inputs
        let micSelection : String = "Front" // On a 2020 iPad pro you can also choose "Back" or "Top"
        var chosenMic : Int = 0
        var micTypeCounter : Int = 0
        for microphones in inputs {
            let micType : String = "\(microphones)"
            if micType.range(of: micSelection) != nil {
                chosenMic = micTypeCounter
            }
            // If we find a wired mic, prefer it
            if micType.range(of: "Wired") != nil {
                chosenMic = micTypeCounter
                break
            }
            // If we find a USB mic (newer devices), prefer it
            if micType.range(of: "USB") != nil {
                chosenMic = micTypeCounter
                break
            }
            micTypeCounter += 1
        }
            
        do {
            try AudioEngine.setInputDevice(inputs[chosenMic])
        } catch {
            print ("Could not set audio inputs: \(error)")
        }
        mic = engine.input
    }
    
    Settings.sampleRate = mic.avAudioNode.inputFormat(forBus: 0).sampleRate // This is essential for 48Kbps
    
    // Start AudioKit
    if !engine.avEngine.isRunning {
        do {
            boost = Fader(mic)
            // Set boost values here, or leave it for silence
            // Connect mic or boost to any other audio nodes you need
          
            // Set AudioKit's output
            mixer = Mixer(boost) // You can add any other nodes to the mixer
            engine.output = mixer
    
            // Additional settings
            Settings.audioInputEnabled = true
    
            // Start engine
            try engine.avEngine.start()
            try Settings.setSession(category: .playAndRecord)
        } catch {
            print ("Could not start AudioKit: \(error)")
        }
    }
    

    建议在 viewDidLoad 中添加音频路由更改通知:

    // Notification for monitoring audio route changes
    NotificationCenter.default.addObserver(
        self,
        selector: #selector(audioRouteChanged(notification:)),
        name: AVAudioSession.routeChangeNotification,
        object: nil)
    

    这会调用

    @objc func audioRouteChanged(notification:Notification) {
        // Replicate the code for choosing the microphone here (the first `if let` block)
    }
    

    【讨论】:

    • AudioKit 4 和 macOS 是否有 mic.avAudioNode.inputFormat(forBus: 0).sampleRate 的等价物?
    • 关于我上面的评论,我仍然会很好奇,但我通过迁移到 AudioKit 5 开发者分支解决了我的采样率不匹配错误。看来我根本不需要设置输入采样率(我硬编码为 48.0),这太棒了。我什至可以毫无故障地将我的活动输入从 44.1 切换到 48.0,反之亦然(通过 Audio Midi 设置)。感谢 AudioKit 的人!
    • @daxmacrog - 我的 AK4 实现中的等效代码是:AKSettings.sampleRate = AKManager.engine.inputNode.inputFormat(forBus: 0).sampleRate
    【解决方案2】:

    音频套件 4 也是如此。

    API 已更改。

    看来你应该写:

    guard let inputs = AKManager.inputDevices else{
        print("NO AK INPUT devices")
        return false
    }
    

    【讨论】:

    • 对不起 - 这对我不起作用。通过 SPM(v5-main)安装 AudioKit,当尝试使用 AKManager 时,我得到“无法在范围内找到 'AKManager'”。我刚刚将 Swift 包更新到最新的 v5-main 版本。
    • 编辑:当我第一次发布这个问题时,这不起作用,但现在 AudioEngine(而不是 AKManager)确实包含了 inputDevices。现在试图弄清楚如何做以前的 mic.setDevice。
    • 很奇怪,我确实用“AKManager”替换了“AUDIIKit”,而我的旧应用现在可以正常工作了。
    • 这适用于 v4.11(在 Xcode 12 上编译良好),但不适用于 v5。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多