首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AudioKit v5:如何选择麦克风?

AudioKit v5:如何选择麦克风?
EN

Stack Overflow用户
提问于 2020-10-04 04:58:15
回答 2查看 579关注 0票数 0

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

然而,我错过了过去的AudioKit.inputDevices (然后是AKManager.inputDevices)。我曾经能够选择我选择的麦克风。

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

EN

回答 2

Stack Overflow用户

发布于 2020-11-06 17:16:36

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

以下代码允许您根据麦克风的调试说明选择麦克风:

代码语言:javascript
复制
// 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中添加音频路由更改通知:

代码语言:javascript
复制
// Notification for monitoring audio route changes
NotificationCenter.default.addObserver(
    self,
    selector: #selector(audioRouteChanged(notification:)),
    name: AVAudioSession.routeChangeNotification,
    object: nil)

这将调用

代码语言:javascript
复制
@objc func audioRouteChanged(notification:Notification) {
    // Replicate the code for choosing the microphone here (the first `if let` block)
}
票数 2
EN

Stack Overflow用户

发布于 2020-11-05 16:22:43

音频套件4也是如此..

接口发生了变化。

看起来你应该这样写:

代码语言:javascript
复制
guard let inputs = AKManager.inputDevices else{
    print("NO AK INPUT devices")
    return false
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64188924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档