上下文:我正在尝试进行实时音频聊天。
我整周都在与AVAudioSinkNode一起玩,所以我可以录制音频,但是由于某种原因,每当尝试它时,audioBufferList始终填充零。现在,我正在Swift Playground中对其进行测试。这是我的代码:
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虚拟声卡作为系统范围的音频输入。
将音频输入设置为麦克风后,数字开始反映实际的音频信号。
因此,请尝试将音频输入设置为您确定会产生音频的东西。