AVAudioSinkNode没有信号

问题描述 投票:2回答:1

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

我整周都在与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

我环顾了一些相似的问题,但似乎没有什么问题。我已经研究过使用水龙头,但从我的发现来看,这些水龙头不适用于像我这样的实时应用。

有人能指出我正确的方向吗?

swift avfoundation core-audio avaudioengine
1个回答
0
投票

在玩完您的示例后,我可以确认它可以正常工作。但是,最初不是这样,因为我选择了Dante虚拟声卡作为系统范围的音频输入。

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

因此,请尝试将音频输入设置为您确定会产生音频的东西。

© www.soinside.com 2019 - 2024. All rights reserved.