首页 > 解决方案 > macOS 上的 AVAudioInputNode 仅输出静音

问题描述

我在 macOS 10.14.5、Xcode 10.2.1、Swift 5 上,在 MacBook Pro 2018 上进行测试。我正在编写一个简单的 Cocoa 应用程序(即仅限 macOS),它需要监听麦克风输入并用它做一些事情. 但是,输入节点似乎只输出静音。

我尝试了以下方法:

在这两种情况下,我都尝试将格式专门设置为inputNode.inputFormat(forBus: 0),inputNode.outputFormat(forBus: 0)nil,但没有任何变化。

我已经在以下条件下进行了测试:

我从头开始创建了一个新的简化项目来说明这个问题。这是唯一的逻辑:

import Cocoa
import AVFoundation
import Accelerate

class ViewController: NSViewController {
    private let engine = AVAudioEngine()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func startWithTap(_ sender: Any) {
        engine.inputNode.installTap(onBus: 0, bufferSize: 1024, format: engine.inputNode.inputFormat(forBus: 0)) {
            (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in
            var m : Float = 0.0
            vDSP_maxv((buffer.floatChannelData?[0])!, 1, &m, 1024)
            print(m) // Always prints 0.0
        }

        do {
            try engine.start()
        } catch {
            print(error)
        }
    }

    @IBAction func startLoop(_ sender: Any) {
        engine.connect(engine.inputNode, to: engine.mainMixerNode, format: engine.inputNode.inputFormat(forBus: 0))

        do {
            try engine.start() // Only silence is sent to output
        } catch {
            print(error)
        }
    }
}

我希望:

有什么线索吗?谢谢!

标签: swiftmacoscocoaaudiounitavaudioengine

解决方案


我发现了问题:Apple 官方文档指出现在有必要主动请求麦克风访问权限。我很确定以前不是这种情况(应用程序会在尝试这样做时自动请求访问)。所有细节都在这里解释:https ://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/requesting_authorization_for_media_capture_on_macos


推荐阅读