【发布时间】:2010-12-10 16:13:19
【问题描述】:
我正在寻找一个可用于处理音频文件的库。基本上我想做的是:
加载 MP3/WAV 文件
获取文件的 15 秒剪辑
在其上覆盖另一个 MP3/WAV 文件
渲染为新的 MP3/WAV 文件
【问题讨论】:
标签: c++ signal-processing audio
我正在寻找一个可用于处理音频文件的库。基本上我想做的是:
加载 MP3/WAV 文件
获取文件的 15 秒剪辑
在其上覆盖另一个 MP3/WAV 文件
渲染为新的 MP3/WAV 文件
【问题讨论】:
标签: c++ signal-processing audio
由于专利原因,它不支持 MP3,但 libsndfile 是一个非常好的开源 (LGPL) 库,用于加载和保存各种其他音频格式的音频,包括 WAV。
至于覆盖部分,一旦您将样本加载到内存中,这很容易......您只需将文件 A 中的每个样本与文件 B 中的相应样本相加(并可能将生成的样本值缩小一点如果您担心剪裁,请乘以一个常数)。
【讨论】:
来自 sox 的库 libsox(而不是完全不同的 http://libsox.sourceforge.net/)似乎有一个可以使用的简单 API。该文档提供了以下立体声到单声道混合的示例:
将样本表示为整数可以 处理时引起问题 声音的。例如,如果一个效果 将左右声道混合成 一个单声道通道使用 线
*obuf++ = (*ibuf++ + *ibuf++)/2;
失真可能会发生,因为 中间加法会溢出 32 位。线
*obuf++ = *ibuf++/2 + *ibuf++/2;
将解决溢出问题 (以最少的代价 重要位)。
【讨论】:
您可以使用任何常见的 MP3 编解码器 API 对流进行解码、处理并再次保存。例如,您可以在这部分使用libLAME。
至于混音,您可以自己做(例如,天真地,添加两个样本并除以 2 - 这听起来可能不太好),或者为它找到一个合适的库。
您可能还对best c audio library linux 上的相关 Stack Overflow 问题感兴趣
【讨论】:
你可以试试看这个 http://terminatorx.org/ 我正在看它做类似的事情。
【讨论】: