将多个 MP3 曲目合并为一个曲目
Posted
技术标签:
【中文标题】将多个 MP3 曲目合并为一个曲目【英文标题】:Merging several MP3 tracks in to one track 【发布时间】:2011-11-19 02:08:07 【问题描述】:坦率地说,我不知道从哪里开始。我必须有一个程序将一些 mp3 曲目合并到一个曲目中(不是连接,而是实际上合并它们,有点像一次播放几个音轨)。是否有可用的库或其他基本程序可以自动执行此操作?我还需要更改每首曲目的音量,我也不知道从哪里开始。
速度和效率是其中的一个主要因素,所以我不能只做懒惰的事情,玩它们并捕捉它。
【问题讨论】:
【参考方案1】:我将尝试绘制一些您可以遵循的一般步骤:
您需要将 mp3 文件解压缩为原始音频。取决于 你正在开发什么样的应用程序,你可以使用 例如madlib (GPL) 或 ffmpeg (LGPL)。
您需要将所有曲目标准化为same frequency (重新采样),并决定输出bit-depth。
现在您可以混合所有曲目。假设您有 2 个频道, 基本思想是计算右边所有样本的平均值 您的曲目的通道,然后对左通道执行相同的操作。 有很多方法可以做到这一点,在这里你必须决定 为您的结果权衡性能/质量。为了 例如,一些开发人员更喜欢在 float 上进行混合操作 点,为了处理clipping (d)effects,还有其他的 可能会反对它,因为它会影响性能。有一个 关于基于整数的混合的好帖子here(它已经 在 SO 中多次引用)。同样在此步骤之前(或期间),您可以通过在要规范化的通道样本上使用乘数来实现一些audio normalization 过程。
最后,您可以再次压缩您的混合音频。你可以使用 lame 例如在这个任务上,或者 ffmpeg 一次。
有许多DSP packages for linux 可能会为您完成其中几个(或全部)这些步骤。我想到的一个 GPL 项目是VLC(VideoLan 客户端)。您可以尝试将其称为外部进程或使用VLM(VideoLan Manager)安排它。来自documentation:
预定广播:
new my_media broadcast enabled
setup my_media input my_video.mpeg input my_other_movie.mpeg
setup my_media output #rtpmux=ts,dst=239.255.1.1,sdp=sap://,name="My Media"
当然,VLC 中的输出流也可以是本地文件。
编辑: 我还在 SO 上发现了一个问题,accepted answer 对您有用,它建议使用Sox。从主页:
SoX 是一个跨平台(Windows、Linux、MacOS X 等)命令行 可以将各种格式的计算机音频文件转换为的实用程序 其他格式。它还可以对这些声音应用各种效果 文件(...)
【讨论】:
【参考方案2】:如果处理器性能足够,这可以实时完成。您需要能够读取 mp3 文件、一些实时软件 mp3 解码器块(类似于用于制作您自己的 mp3 播放器/可视化器的软件),它们的速度足以实时运行 N 个副本/线程,可能是一些 DSP 采样率转换块和一个 DSP 混频器块。所有软件。将所有处理线程与队列和数据FIFO绑定在一起。
我可以为其中一些模块(解码器、重采样器)提供库代码,但请注意潜在的许可限制。
【讨论】:
【参考方案3】:您可以大胆地将它们混合为单独的曲目。是否要求您自己编写代码?
当您拥有原始形式的数据流时,您可以将可能的样本值的中点视为零。(8 位样本。256 个可能的值。127 为零。0 或 255 的样本处于最大音量)。
调整音量,移位,乘以增加音量,除以减少(注意剪辑)
要混合,只需添加每个流的值,一次一个样本(注意剪辑)。
这里也有一个很好的链接:http://www.4front-tech.com/pguide/audio.html
【讨论】:
看看跛脚,ogg。您想要一个原始音频流(实际上是一系列数字,表示每个样本的扬声器线圈获得多少功率)。我正在更新我的答案以获得进一步的解释。以上是关于将多个 MP3 曲目合并为一个曲目的主要内容,如果未能解决你的问题,请参考以下文章
使用 Applescript 在 iTunes 中搜索和删除特定曲目