Swift macOS上的AVAudioInputNode仅输出静音

Swift macOS上的AVAudioInputNode仅输出静音,swift,macos,cocoa,audiounit,avaudioengine,Swift,Macos,Cocoa,Audiounit,Avaudioengine,我在macOS 10.14.5、Xcode 10.2.1、Swift 5上,在MacBook Pro 2018上进行测试。我正在编写一个简单的Cocoa应用程序(仅适用于macOS),它需要监听麦克风输入并对其进行处理。但是,输入节点似乎只输出静默 我尝试了以下方法: 在inputNode上安装一个抽头以分析输入信号,然后启动发动机:信号始终为静音(仅0.0) 将inputNode连接到mainMixerNode,然后启动引擎:只向输出发送静音 在这两种情况下,我都试图将格式具体设置为inp

我在macOS 10.14.5、Xcode 10.2.1、Swift 5上,在MacBook Pro 2018上进行测试。我正在编写一个简单的Cocoa应用程序(仅适用于macOS),它需要监听麦克风输入并对其进行处理。但是,输入节点似乎只输出静默

我尝试了以下方法:

  • 在inputNode上安装一个抽头以分析输入信号,然后启动发动机:信号始终为静音(仅0.0)
  • 将inputNode连接到mainMixerNode,然后启动引擎:只向输出发送静音
在这两种情况下,我都试图将格式具体设置为
inputNode.inputFormat(forBus:0)
inputNode.outputFormat(forBus:0)
nil
,但没有任何变化

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

  • 如果应用程序没有沙盒
  • 如果应用程序已沙盒,但具有所有权限(包括麦克风)
  • 如果MacBook没有插入任何东西(使用内部麦克风和扬声器)
  • 如果MacBook已插入苹果耳机
我从头开始创建了一个新的简化项目来说明这个问题。这是唯一的逻辑:

导入可可粉
进口AVF基金会
进口加速
类ViewController:NSViewController{
私有let引擎=AVAudioEngine()
重写func viewDidLoad(){
super.viewDidLoad()
}
@iAction func startWithTap(\发送方:任何){
engine.inputNode.installTap(onBus:0,bufferSize:1024,格式:engine.inputNode.inputFormat(forBus:0)){
(缓冲区:avaudiopcbuffer!,时间:AVAudioTime!)->在
变量m:浮动=0.0
vDSP_maxv((缓冲区.floatChannelData?[0])!,1,&m,1024)
打印(m)//始终打印0.0
}
做{
试试引擎启动()
}抓住{
打印(错误)
}
}
@iAction func StartOOP(\发送方:任意){
engine.connect(engine.inputNode,to:engine.mainMixerNode,格式:engine.inputNode.inputFormat(forBus:0))
做{
尝试engine.start()//仅向输出发送静默
}抓住{
打印(错误)
}
}
}
我希望:

  • 在点击的情况下,应用程序将打印到不同于0.0的控制台值,但只打印0.0
  • 在直接循环输出的情况下,应用程序输出声音,但只有静音被发送到输出

有线索吗?谢谢

我发现了一个问题:苹果的官方文档表明,现在有必要主动请求麦克风访问。我很确定这不是以前的情况(应用程序在尝试访问时会自动请求访问)。所有细节都在这里解释:

我有完全相同的问题,但iOS模拟器和iPhone设备都有。即使收到了授权,输入节点也只输出静默。您可以将代码与您的解决方案共享吗?我的代码有点难以共享,但最终它与您在上面看到的内容以及我在回答中编写的文档链接中描述的授权请求过程基本相同