【问题标题】:C++ Sound Processing [closed]C ++声音处理[关闭]
【发布时间】:2010-12-10 16:13:19
【问题描述】:

我正在寻找一个可用于处理音频文件的库。基本上我想做的是:

  1. 加载 MP3/WAV 文件

  2. 获取文件的 15 秒剪辑

  3. 在其上覆盖另一个 MP3/WAV 文件

  4. 渲染为新的 MP3/WAV 文件

【问题讨论】:

    标签: c++ signal-processing audio


    【解决方案1】:

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

    至于覆盖部分,一旦您将样本加载到内存中,这很容易......您只需将文件 A 中的每个样本与文件 B 中的相应样本相加(并可能将生成的样本值缩小一点如果您担心剪裁,请乘以一个常数)。

    【讨论】:

      【解决方案2】:

      来自 sox 的库 libsox(而不是完全不同的 http://libsox.sourceforge.net/)似乎有一个可以使用的简单 API。该文档提供了以下立体声到单声道混合的示例:

      将样本表示为整数可以 处理时引起问题 声音的。例如,如果一个效果 将左右声道混合成 一个单声道通道使用 线

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

      失真可能会发生,因为 中间加法会溢出 32 位。线

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

      将解决溢出问题 (以最少的代价 重要位)。

      【讨论】:

        【解决方案3】:

        您可以使用任何常见的 MP3 编解码器 API 对流进行解码、处理并再次保存。例如,您可以在这部分使用libLAME

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

        您可能还对best c audio library linux 上的相关 Stack Overflow 问题感兴趣

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            一个非常好的 C++ 音频/合成库是STK。它做了很多东西,并且在 BSD/MIT 类型许可下,即你可以用它来开发商业产品。支持 Wav,但不支持 MP3。例如,对于 MP3,您可以使用 irrklang,它可以免费用于非商业用途(也可以通过 underbit 获得 MAD,被很多人使用)。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2010-11-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-09-19
              • 2012-12-25
              相关资源
              最近更新 更多