速度和效率是这方面的一个主要因素,所以我不能只是做懒惰的事情并播放它们并捕获它。
答案 0 :(得分:2)
我将尝试绘制一些您可以遵循的一般步骤:
您需要将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 Client)。您可以尝试将其称为外部流程,或使用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 #rtp{mux=ts,dst=239.255.1.1,sdp=sap://,name="My Media"}
当然,VLC中的输出流也可以是本地文件。
编辑: 我还在SO上找到了accepted answer对您有用的问题,建议使用Sox。从主页:
SoX是一个跨平台(Windows,Linux,MacOS X等)命令行 可以将各种格式的计算机音频文件转换为的实用程序 其他格式。它还可以对这些声音应用各种效果 文件(...)
答案 1 :(得分:1)
您可以将它们混合为大胆的单独曲目。您是否要求自己编写代码?
当您拥有原始形式的数据流时,您可以将可能的样本值的中点视为零..(8位样本..可能的值为256 .. 127为零.. 0或255处的样本处于最大音量)。
调整音量,移位,乘以增加音量,除以减少(注意剪辑)
混合,只需添加每个流的值,一次添加一个样本(注意剪切)。
这也是一个很好的链接:http://www.4front-tech.com/pguide/audio.html
答案 2 :(得分:1)
如果有足够的处理器性能,这可以实时完成。您需要能够读取mp3文件,一些实时软件mp3解码器块(类似于用于制作自己的MP3播放器/可视化器的块),其速度足以实时运行N个副本/线程,可能是一些DSP采样率转换模块和DSP混频器模块。所有软件。将所有处理线程与队列和数据FIFO结合在一起。
我的库代码可用于其中一些块(解码器,重新采样器),但要注意潜在的许可限制。