在播放开始时弹出

pop at the beginning of playback

播放包含 wav 编码音频的内存流时,播放以尖锐的音调开始 pop/crackle:

ms = new MemoryStream(File.ReadAllBytes(audio_filename));
[...]
dispose_audio();
sound_output = new DirectSoundOut();
IWaveProvider provider = new RawSourceWaveStream(ms, new WaveFormat());
sound_output.Init(provider);
sound_output.Play();

直接播放wav文件不会出现pop/crackle:

dispose_audio();
NAudio.Wave.WaveStream pcm = new WaveChannel32(new NAudio.Wave.WaveFileReader(audio_filename));
audio_stream = new BlockAlignReductionStream(pcm);
sound_output = new DirectSoundOut();
sound_output.Init(audio_stream);
sound_output.Play();

同样的文件正在播放,但是当wav数据先存储到内存流中时,播放开始时有一个比较大的pop。

我是 NAudio 和一般音频的新手,所以这可能有些愚蠢,但我似乎无法弄清楚。

您正在像播放音频一样播放 WAV 文件头。而不是RawSourceWaveStream,你仍然需要使用WaveFileReader,只需传入你的内存流即可。