播放系统录制的声音

时间:2019-03-24 11:41:25

标签: naudio

我正在尝试记录系统声音并将其通过tcp进行流传输,然后在另一台PC上播放,但是我的问题是我随后播放了我收到的声音,播放速度非常慢。我正在使用WasapiLoopbackCapture录制系统声音,但是当我尝试播放字节时,我录制的声音正在缓慢播放。 我该如何解决?如果我写入文件然后播放,听起来不错,但是我不能直接播放字节。
这是我用来播放声音的代码。

bufferedWaveProvider = new BufferedWaveProvider(CaptureInstance.WaveFormat);
savingWaveProvider = new SavingWaveProvider(bufferedWaveProvider, outputFilePath);
soundPlayer = new WasapiOut();
soundPlayer.Init(bufferedWaveProvider);
soundPlayer.Play();

稍后在代码中,当我通过TCP接收到缓冲区时,我将添加示例。

bufferedWaveProvider.AddSamples(bytes, 0, bytes.Length);

1 个答案:

答案 0 :(得分:0)

您需要确保波形格式完全匹配。通常,WASAPI回送捕获将捕获44.1kHz或48kHz的立体声IEEE浮点采样。因此,on(launchEvent, (data) => { const myComponent = new ReactComponent(); data.root = myComponent.native; }); 中的WaveFormat应该设置为与捕获音频时完全相同的格式。

要注意的另一个问题是,您应该使用BufferedWaveProvider事件的BytesRecorded属性,而不是缓冲区的长度。捕获缓冲区可能并不总是完全满。

最后,原始立体声IEEE浮点采样频率为44.kHz或更高不是通过网络传输音频的非常有效的方法。可能只是您的网络无法跟上。通常,通过网络传输音频的程序将使用某种编解码器来降低带宽要求。