当我设置延迟20但在某些带有Windows 10的系统中wav文件缓慢播放时,它的工作正常。
private static void waveSourceAgent_DataAvailable(object sender, WaveInEventArgs e)
{
int delay = 10;
recordedMsgBuffer = RECORDING_BUFFER[0].recordedMsgBuffer;
int iterations = recordedMsgBuffer.Length / 320;
int remainingBytes = recordedMsgBuffer.Length % 320;
byte[] buffer = new byte[320];
for (int i = 0; i < iterations; i++)
{
byte[] tempbuff = new byte[320];
for (int j = 0; j < 320; j++)
{
tempbuff[j] = recordedMsgBuffer[(i * 320) + j];
}
if (waveProviderReciever != null)
waveProviderReciever.AddSamples(tempbuff, 0, tempbuff.Length);
Thread.Sleep(delay);
}
答案 0 :(得分:0)
看起来您正试图通过将其放入DataAvailable
来播放正在接收的数据(但不确定如何 - 您未使用BufferedWaveProvider
args)
这项工作的秘诀在于音频放入缓冲区的速度应与读出的速度相匹配。如果记录和回放的WaveFormat
匹配(它们需要它们才能工作),那么缓冲区永远不应该填满,除非回放意外停止。
如果您接收数据的速度比播放速度快得多(例如,您正在下载预先录制的音频文件),那么您需要增加缓冲区大小,或者不要将任何新数据放入缓冲区,直到那里可用空间更大。