播放系统录制的声音

Playing system recorded sound

我正在尝试录制我的系统声音并通过 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 浮点样本不是通过网络传输音频的非常有效的方式。可能只是您的网络跟不上。通常,通过网络传输音频的程序会应用某种编解码器来降低带宽要求。