繁体   English   中英

将多个MP3曲目合并为一个曲目

[英]Merging several MP3 tracks in to one track

坦率地说,我不知道从哪开始。 我必须有一个程序,可以将几个mp3曲目合并到一个曲目中(不是串联,而是实际上合并它们,有点像一次播放一些音轨)。 是否有可用的库或其他自动执行此操作的基本程序? 我还需要更改每个曲目的音量,我也不知道从哪里开始。

速度和效率是其中的一个主要因素,所以我不能只是做一些懒惰的事情,然后播放并捕获它。

我将尝试绘制一些您可以遵循的一般步骤:

  1. 您将需要将mp3文件解压缩为原始音频。 例如,根据开发的应用程序类型,可以使用madlib (GPL)或ffmpeg (LGPL)。

  2. 您将需要将所有轨道归一化为相同的频率 (重新采样),并确定输出位深度

  3. 现在,您可以混合所有曲目。 假设您有2个通道,基本思想是计算轨道右通道的所有样本的平均值,然后对左通道进行相同的操作。 有很多方法可以解决这个问题,在这里您将不得不权衡结果的性能/质量。 例如,一些开发人员可能更喜欢在浮点上执行混合操作,以处理裁剪(d)效果 ,但其他开发人员可能建议不要这样做,因为它会影响性能。 关于基于整数的混合, 这里有一篇很好的文章(在SO中已经多次引用)。 同样,在此步骤之前(或之中),您可以通过在要标准化的通道样本上使用乘法器来执行一些音频标准化过程。

  4. 最后,您可以再次压缩混合音频。 例如,您可以在此任务上使用la脚,或者再次使用ffmpeg。

那里有许多适用于Linux的DSP软件包,它们可能为您完成了几个(或全部)这些步骤。 我想到的一个GPL项目是VLC (VideoLan客户端)。 您可以尝试将其称为外部进程,也可以使用VLM (VideoLan Manager)对其进行计划。 文档中

预定广播:

new my_media broadcast enabled
setup my_media input my_video.mpeg input my_other_movie.mpeg 
setup my_media output #rtp{mux=ts,dst=239.255.1.1,sdp=sap://,name="My Media"}

当然,VLC中的输出流也可以是本地文件。

编辑:我还在SO上发现了一个问题,在该问题上可以接受的答案对您有用,它建议使用Sox 从首页:

SoX是跨平台(Windows,Linux,MacOS X等)命令行实用程序,可以将各种格式的计算机音频文件转换为其他格式。 它还可以对这些声音文件应用各种效果(...)

您可以将它们混合成大胆的单独曲目。 您需要自己编写代码吗?

当您具有原始格式的数据流时,可以将可能的样本值的中点视为零。(8位样本。可能的256个值。127为零。0或255的样本为最大音量)。

调整音量,移位,乘以增加音量,除以减少音量(请注意裁剪)

进行混合,只需将每个流的值相加一次即可(注意剪辑)。

这也是一个很好的链接: http : //www.4front-tech.com/pguide/audio.html

只要有足够的处理器性能,就可以实时完成此操作。 您需要能够读取mp3文件,一些实时软件mp3解码器块(类似于用来制作自己的mp3播放器/可视化器的软件),其速度足以实时运行N个副本/线程,可能还有一些DSP采样率转换模块和一个DSP混频器模块。 所有软件。 将所有处理线程与队列和数据FIFO绑定在一起。

我的库代码可用于其中一些模块(解码器,重采样器),但要注意潜在的许可限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM