播放系统录制的声音

Posted

技术标签:

【中文标题】播放系统录制的声音【英文标题】:Playing system recorded sound 【发布时间】:2019-03-24 11:41:24 【问题描述】:

我正在尝试录制我的系统声音并通过 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);

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

它确实使用相同的波形进行录制和播放,并且我使用 BytesRecorded 属性,但是当我播放音频时它仍然听起来不流畅。对于编解码器部分,我正在研究它,但只想获得基本记录,蒸汽和播放首先工作。还有什么可能是错误的,缓冲区很快就会填满并崩溃。

以上是关于播放系统录制的声音的主要内容,如果未能解决你的问题,请参考以下文章

完成的 iPhone 应用程序:添加一个新功能。录制系统声音,然后能够播放

为啥录屏没声音

Linux如何在RAM缓冲区中录制声音并以自定义延迟播放音频

如何录制电脑内部声音 视频中的音频怎么录制

影视剧中的歌曲怎么录制 怎么录背景音乐

Android音频的录制与播放