NAudio 流读取方法延迟

NAudio stream Read method latency

我制作了自己的哔哔代码作为练习。然而它是滞后的。

2-3 次蜂鸣声滞后,然后第 3 次或第 4 次蜂鸣声更快。

谁能解释一下为什么?我该如何消除延迟?

我使用了 Mark Heath 博客和 NAudio github 代码中的位..

这是主控制台代码:

var waveSine = new BeepStream(waveWhite.WaveFormat);
var sineChannel = new WaveChannel32(waveSine) { PadWithZeroes = false };

List<WaveChannel32> inputs = new List<WaveChannel32>();
inputs.Add(sineChannel);

var mixer = new MixingWaveProvider32(inputs);

var output = new WaveOut();
output.Init(mixer);
output.Play();
output.Volume = 0.5f;

while (true)
{
    Thread.Sleep(1000);
    waveSine.Beep(1000, 150);
}

这是哔声代码(它基本上输出 0,但是当调用 Beep 时它会推送缓存的正弦样本): (注1:不是生产代码所以请忽略明显的不一致) (注意 1:实际上至少有 2 个频道 - 一个总是在播放,这就是为什么我必须制作第二个 - 哔哔声频道 - 也总是在播放。我很乐意写 SamplesProviders 但找不到好的例子)

public class BeepStream : WaveStream
...
public override int Read(byte[] buffer, int offset, int count)
{
    int totalBytesRead = 0;
    int beepBytesRead = 0;

    while (totalBytesRead < count)
    {
        if(playingNow == null)
        {
            // silence
            buffer[totalBytesRead] = 0;
            totalBytesRead += 1;// bytesRead;
        }
        else
        {
            // beep
            buffer[totalBytesRead] = playingNow[beepBytesRead++];
            totalBytesRead += 1;// bytesRead;

            if (beepBytesRead >= playingNow.Length)
                playingNow = null;
        }
    }

    return totalBytesRead;
}

观察 - 读取次数始终为 52920。这个神奇的数字是多少?我可以减少它吗?如果有帮助,波形格式是 float 44100..

通过简单地尝试一切找到解决方案。

独有的 WASAPI 输出的使用:

var output = new WasapiOut(NAudio.CoreAudioApi.AudioClientShareMode.Exclusive, 3);
output.Init(mixer);
output.Play();