播放系统录制的声音



我正在尝试录制我的系统声音并通过 tcp 流式传输,然后在另一台电脑上播放,但我的问题是然后我播放我收到的声音播放速度超慢。我正在使用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);

您需要确保波形格式完全匹配。通常,WASAPI 环回捕获将捕获 44.1kHz 或 48kHz 的立体声 IEEE 浮点采样。因此,BufferedWaveProviderWaveFormat应设置为与捕获音频完全相同的格式。

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

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

最新更新