Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对音频信号进行编码有任何限制吗?_C++_Audio_Encoding_Codec_Opus - Fatal编程技术网

C++ 对音频信号进行编码有任何限制吗?

C++ 对音频信号进行编码有任何限制吗?,c++,audio,encoding,codec,opus,C++,Audio,Encoding,Codec,Opus,我以一定的采样率(例如24 kHz)捕获pcm声音。我需要使用一些编解码器(我使用Opus)对其进行编码,以便通过网络发送。我注意到,在我使用Opus编码时使用的某些采样率下,我经常在接收端听到一些额外的“破裂”噪音。在其他情况下,听起来还行。这可能是一个实现错误,但我认为可能还有一些限制,我不知道 我还注意到,如果我在解码Opus编码的音频流时使用另一个采样率,我会得到更低或更高的音高,这对我来说似乎是合乎逻辑的。所以我读到,如果接收端不支持原始PCM采样率,我需要在另一端重新采样 关于这一切

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

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

关于这一切,我有两个问题:

  • 音频编码的采样率(或其他参数)是否有任何限制?(就像我有一个24kHz的pcm声音-可能有一定的采样率使用它?)
  • 当通过网络发送音频流时,是否有任何共同的技术在两侧提供相同的音质

  • 噼啪作响的噪音很可能是一个错误,因为对采样器没有会导致这种噪音的限制(采样率转换会带来其他类型的信号变化,特别是当向下采样到较低的采样器时;但绝对不会噼啪作响)

    一个粗略的猜测是,输入缓冲区有问题。如果忽略或复制样品,通常会发生裂纹,这通常是由于后续缓冲区的边界不正确造成的


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

    通过在接收端缓冲数据包并在达到一定数量后立即将其写入声卡缓冲区来解决问题。“噼啪”声很可能是由于发送到声卡缓冲区的后续帧之间的间隙造成的

    数据到达的速率是否一定要完全回放?间隙通常会发出破裂/爆裂声。@MatsPeterson,我该如何检查它?完全回放所需的速率是多少?我使用本地网络,当我不使用任何编码的声音是好的。我想你是对的,速度足够快。此外,在较低的opus采样率下,没有听到破裂声。当我对opus I使用更高的速率时,这里这些裂缝
    所需的数据速率太高了
    -你是说24kHz太高了吗?但我可以用opus以更低的采样率对它进行编码,对吗?这样做有什么缺点吗?降低采样率会降低所需的数据速率,但也会显著降低音频的带宽。例如,在24kHz采样频率下,您可以对高达12kHz的频率进行采样。这对于语音来说已经足够了,但是对于音乐来说已经有了一个可听见的高频下降(钹和其他嘶嘶声)。您可以计算传输未压缩音频所需的数据速率,单位为字节/秒=采样器*每个采样的字节数*通道数(单声道/立体声/5.1)因此,您可以调整这些数字中的任何一个来降低未压缩的数据速率,但总是以音频质量损失为代价。