如何将2个音频文件混合到1个文件中

时间:2014-10-10 11:41:15

标签: objective-c audio

我正在创建像车库乐队这样的音频播放器。

为此,我必须在运行时将2种不同的音频文件格式混合到1个文件中。

示例:
用户同时推送drum buttonviolin button 然后用户按下disk button以保存该曲调。

那么如何将它们混合成1个文件(异步和完美的持续时间)??

2 个答案:

答案 0 :(得分:1)

这对于Apple的新AVAudioEngine来说非常微不足道,它专为这种情况而设计。

https://developer.apple.com/library/prerelease/iOS/documentation/AVFoundation/Reference/AVAudioEngine_Class/index.html

观看WWDC关于它的视频......

答案 1 :(得分:0)

未来读者注意事项:
当我输入这个答案时,问题没有指定任何环境/操作系统/语言,它只是询问如何合并音频。

基本概念:等波相互放大,相反的波相互衰减 所以,基本的想法是:

  • 将音频样本转换为PCM(如果它不是PCM)(您可能希望以块的形式执行此操作)
  • 对每个频道的样本求和并除以频道数(用0代替比最长音轨花费更少时间的曲目。)
  • 打包(挥手等)并存储二进制文件(可选择压缩为mp3等)。

示例:3个单声道音轨(T =音轨,C =频道,Sn =单个样本n的值或0):< / p>

resultTrack_C1_Sn = ( T1_C1_Sn + T2_C1_Sn + T3_C1_Sn ) / totalTracks

当多声道(如立体声):对每个声道重复时,交错结果(左声道首先出现)。当然,你可以在一次“跑步”中做到这一点。

注意(对于PCM):

    PCM中的
  • <= 8 bits样本分辨率无符号(因此0127,换句话说,负波浪摆幅低于127,正波浪 - 挥杆超过127)你需要考虑到这一点。
  • >8 bits 已签名,因此您可以安全地使用上面的基本公式(自-4 + -5 = -9起)。

这应该让你从基本概念开始。