【问题标题】:Are there any constraints to encode a audio signal?对音频信号进行编码是否有任何限制?
【发布时间】:2016-03-05 03:36:31
【问题描述】:

我以某种采样率捕获 pcm 声音,例如24 千赫。我需要使用一些编解码器(我为此使用 Opus)对其进行编码以通过网络发送。我注意到,在我使用 Opus 编码的某个采样率下,我经常在接收端听到一些额外的“破裂”噪音。在其他费率下,这听起来不错。这可能是一个实现错误,但我可能也有一些我不知道的限制。

我还注意到,如果我在解码 Opus 编码的音频流时使用另一个采样率,我会得到更低或更高的音调,这在我看来是合乎逻辑的。所以我读到,如果接收端不支持原始 PCM 采样率,我需要在另一端重新采样。

所以我有两个关于这一切的问题:

  1. 音频编码的采样率(或其他参数)是否有任何限制? (就像我有一个 24kHz pcm 的声音 - 也许有一定的采样率可以使用它?)
  2. 在通过网络发送音频流时,是否有任何通用技术可以在双方提供相同的音质?

【问题讨论】:

  • 数据到达率是否一定要完全回放?间隙通常会发出爆裂声/爆裂声。
  • @MatsPetersson,我该如何检查?完全播放所需的速率是多少?我使用本地网络,当我不使用任何编码时,声音很好。所以我让你正确,速度足够快。此外,在某些较低的作品采样率下,没有听到破裂的声音。当我对作品使用更高的速率时,我在这里出现了这些裂缝

标签: c++ audio encoding codec opus


【解决方案1】:

通过在接收端缓冲数据包并在达到一定数量时将它们写入声卡缓冲区来解决问题。 '噼啪'噪音很可能是由于发送到声卡缓冲区的后续帧之间的间隙

【讨论】:

    【解决方案2】:

    噼啪声很可能是一个错误,因为没有限制会导致这种噪声的采样率(采样率转换会带来其他类型的信号变化,尤其是在下采样到较低采样率时; 但绝对不会爆裂)。

    一个疯狂的猜测是,输入缓冲区有问题。如果样本被遗漏或重复,通常会出现裂纹,这通常是后续缓冲区边界不正确的结果。

    无论如何,通过网络实时发送音频数据都需要压缩。所需的数据速率太高了。有提供无损音频压缩的编解码器(例如 FLAC),但与例如 FLAC 相比,它们的压缩率相对较低。作品。

    【讨论】:

    • The required data rate is simply too high - 你的意思是 24kHz 太高了吗?但是我可以使用 opus 以较低的采样率对其进行编码,对吗?这样做有什么缺点吗?
    • 降低采样率会降低所需的数据速率,但也会显着降低音频的带宽。例如。在 24kHz 采样频率下,您可以采样高达 12kHz 的频率。这对于语音来说已经足够了,但对于音乐来说,高频(铙钹和其他嘶嘶声)已经可以听见了。
    • 您可以将传输未压缩音频所需的数据速率计算为 字节/秒 = 采样率 * 每个样本的字节数 * 通道数(单声道/立体声/5.1)可以调整这些数字中的任何一个以降低未压缩的数据速率,但始终以音频质量损失为代价。
    猜你喜欢
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2013-07-14
    • 2013-11-18
    • 2023-03-05
    • 1970-01-01
    • 2015-08-07
    相关资源
    最近更新 更多