2009-10-27 141 views
5

我正在寻找可能被用来操纵音频文件库。基本上就是我想要做的是:C++声音处理

  1. 加载的MP3/WAV文件

  2. 获取文件

  3. 覆盖另一个MP3/WAV文件ontop的它

    的15秒剪辑
  4. 呈现为一个新的MP3/WAV文件

回答

0

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

至于混合,你既可以自己做的(例如,天真,由两个增加两个样品和鸿沟 - 这可能不是听起来好得),或者为它找到一个合适的库。

您可能也有兴趣在一个相关的堆栈溢出问题在best c audio library linux

1

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

为整数可以在处理 音频时 造成问题代表样本。例如,如果到 效果缩混左和右声道成 一个单声道信道分别使用 线可能发生

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

失真由于 中间除了可以溢出32 位。该生产线

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

将得到全面的溢出问题 (至少 显著位的代价)。

3

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

至于覆盖部分,这很简单,一旦你得到加载到内存中的样本......你刚才总结每个样品在文件中的与其对应的样本文件B(以及可能的规模所产生的采样值向下如果你担心剪辑的话,通过乘以一个常数来实现)。

+0

+1为libsndfile。 – 2009-10-27 23:15:11

0

一个很好的C++音频/合成器库STK。它负载很多东西,并且是BSD/MIT类型的许可证,也就是说你可以用它来开发商业产品。 Wav支持,但不支持MP3。对于MP3,您可以使用irrklang,例如,这是免费的非商业用途(也是由underbit,由许多人使用的MAD)。