代码之家  ›  专栏  ›  技术社区  ›  xian

C++声音处理[关闭]

  •  5
  • xian  · 技术社区  · 16 年前

    我在找一个可以用来操作音频文件的库。基本上我想做的是:

    1. 加载MP3/wav文件

    2. 获取文件的15秒片段

    3. 将另一个MP3/wav文件覆盖到该文件上

    4. 呈现为新的MP3/wav文件

    5 回复  |  直到 14 年前
        1
  •  0
  •   Community Mohan Dere    9 年前

    您可以使用任何常见的MP3编解码器API来解码流、使用流并再次保存它。例如,您可以使用 libLAME 对于这一部分。

    至于混合,你可以自己做(例如,幼稚地添加两个样本并除以两个——这听起来可能不太好),或者为它找到一个合适的库。

    您可能还对位于的相关堆栈溢出问题感兴趣 best c audio library linux

        2
  •  3
  •   Jeremy Friesner    16 年前

    由于专利原因,它不支持MP3,但是 libsndfile 是一个非常好的开源(LGPL)库,用于加载和保存各种其他音频格式的音频,包括wav。

    至于覆盖部分,一旦您将示例加载到内存中,这就很容易了…您只需将文件A中的每个样本与其对应的文件B中的样本相加(如果您担心剪切,还可以将生成的样本值乘以一个常量,从而稍微缩小一点)。

        3
  •  1
  •   hlovdal    16 年前

    图书馆 libsox 来自SOX(而不是 http://libsox.sourceforge.net/ 这是完全不同的东西)似乎有一个简单的API可以使用。文档给出了立体声到单声道混音的以下示例:

    将样本表示为整数可以 在处理时导致问题 音频。例如,如果影响到 混合左右声道 一个单声道使用 线

        *obuf++ = (*ibuf++ + *ibuf++)/2;
    

    变形可能发生在 中间添加可能溢出32 位。线

        *obuf++ = *ibuf++/2 + *ibuf++/2;
    

    会绕过溢出问题 (至少由 有效位)。

        4
  •  0
  •   willz    16 年前

    你可以试试看这个 http://terminatorx.org/ 我看着它做类似的事情。

        5
  •  0
  •   jbat100    14 年前

    一个非常好的C++音频/合成器库 STK .它可以做很多东西,并且是在BSD/MIT类型的许可证下,即你可以使用它来开发商业产品。支持wav,但不支持MP3。MP3你可以用 irrklang 例如,这是免费的非商业用途(也疯狂的下层,是由很多人使用)。