C ++声音处理

时间:2009-10-27 22:08:15

标签: c++ signal-processing audio

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

  1. 加载MP3 / WAV文件

  2. 获取文件的15秒剪辑

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

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

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

  

将样本表示为整数即可   处理时会导致问题   音频。例如,如果有效果   混合左右声道进入   一个单声道通道是使用的   线

    *obuf++ = (*ibuf++ + *ibuf++)/2;
  从那以后可能会发生失真   中间添加可以溢出32   位。这条线

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

会解决溢出问题   (以牺牲最少为代价   重要的一点)。

答案 2 :(得分:0)

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

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

您可能也对best c audio library linux

上的相关Stack Overflow问题感兴趣

答案 3 :(得分:0)

您可以尝试一下这个 http://terminatorx.org/ 我正在考虑做类似的事情。

答案 4 :(得分:0)

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