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();
我制作了自己的哔哔代码作为练习。然而它是滞后的。
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();