播放系统录制的声音
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 浮点样本。因此,BufferedWaveProvider
的 WaveFormat
应设置为与捕获音频完全相同的格式。
另一个需要注意的问题是您应该使用DataAvailable
事件的BytesRecorded
属性而不是缓冲区的长度。捕获缓冲区可能并不总是完全满的。
最后,44.kHz 或更高的原始立体声 IEEE 浮点采样并不是通过网络传输音频的一种非常有效的方式。可能只是您的网络跟不上。通常,通过网络传输音频的程序会应用某种编解码器来降低带宽要求。
【讨论】:
它确实使用相同的波形进行录制和播放,并且我使用 BytesRecorded 属性,但是当我播放音频时它仍然听起来不流畅。对于编解码器部分,我正在研究它,但只想获得基本记录,蒸汽和播放首先工作。还有什么可能是错误的,缓冲区很快就会填满并崩溃。以上是关于播放系统录制的声音的主要内容,如果未能解决你的问题,请参考以下文章
完成的 iPhone 应用程序:添加一个新功能。录制系统声音,然后能够播放