AVAudioSinkNode 没有信号

AVAudioSinkNode Giving No Signal

上下文:我正在尝试进行实时语音聊天。

我整个星期都在玩 AVAudioSinkNode,所以我可以录制音频,但是出于某种原因,每当我尝试它时,audioBufferList 总是充满零。现在我正在 Swift 游乐场测试它。这是我的代码:

let engine = AVAudioEngine()

let sinkNode = AVAudioSinkNode { (timestep, frames, audioBufferList) -> OSStatus in
    let ptr = audioBufferList.pointee.mBuffers.mData?.assumingMemoryBound(to: Float.self)
    var monoSamples = [Float]()
    monoSamples.append(contentsOf: UnsafeBufferPointer(start: ptr, count: Int(frames)))
    for frame in 0..<frames {
      print("sink: " + String(monoSamples[Int(frame)]))
    }
    return noErr
}

engine.attach(sinkNode)

engine.connect(engine.inputNode, to: sinkNode, format: nil)

do {
    try engine.start()
    CFRunLoopRunInMode(.defaultMode, CFTimeInterval(duration), false)
    engine.stop()
} catch {
    print("Could not start engine: \(error)")
}

那么这是结果输出:

...
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
sink: 0.0
Program ended with exit code: 0

我查看了一些类似的问题,但似乎很少有人遇到我的问题。我研究过使用水龙头,但据我所知,这些水龙头不适合像我这样的实时应用程序。

谁能指出我正确的方向?

玩过你的例子后,我可以确认它按预期工作。然而,最初情况并非如此,因为我将我的 Dante Virtual Soundcard 选择为系统范围的音频输入。

将音频输入设置为麦克风后,数字开始反映实际音频信号。

因此,请尝试将您的音频输入设置为您确定可以产生音频的内容。

编辑

正如我们发现的另一种可能失败的方式是未为 XCode 设置使用麦克风的权限。 这些可以使用 System Preferences -> Security & Privacy -> Microphone -> XCode

设置