【问题标题】: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);

【问题讨论】:

    标签: naudio


    【解决方案1】:

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

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

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

    【讨论】:

    • 它确实使用相同的波形进行录制和播放,并且我使用 BytesRecorded 属性,但是当我播放音频时它仍然听起来不流畅。对于编解码器部分,我正在研究它,但只想获得基本记录,蒸汽和播放首先工作。还有什么可能是错误的,缓冲区很快就会填满并崩溃。
    猜你喜欢
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2012-09-07
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多