2014-10-10 66 views
1

我创建了一个音频播放器像车库乐队。我怎样才能搭配2个音频文件转换成1个文件

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

实施例:
用户推动drum buttonviolin button同时。
然后用户推动disk button保存那曲调。

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

+0

的[iPhone可能重复:编程混合两个音频文件?](http://stackoverflow.com/questions/8638731/iphone-mix-two-audio-files-programmatically) – matt 2014-10-10 13:18:10

回答

1

这对于苹果的新AVAudioEngine来说非常简单,它专门用于这种情况。

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

而且看它的WWDC视频......

+0

(好奇心杀死了猫:)这也适用于iOS以外的环境吗? – GitaarLAB 2014-10-10 12:19:19

+0

这是我的简单演示代码,包括混合到一个文件:https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch14p655AVAudioEngineTest/AVAudioEngineTest/ViewController.swift – matt 2014-10-10 12:21:16

+0

@matt:谢谢。 – Mirant 2014-10-10 12:42:09

0

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

基本概念:等波互相放大,相反波相互衰减。
因此,基本思路是:

  • 转换音频采样为PCM(如果不是PCM已经)(你可能希望这样做以块的形式)的数量
  • 琛每个通道的采样和鸿沟的频道(用0代替比最长的轨道花费更少时间的轨道)。
  • 包(波等)和存储二进制(任选地压缩为MP3等)。

实施例:3单磁道(T =轨道,C =信道,Sn =单个试样n的值或0):

resultTrack_C1_Sn = (T1_C1_Sn + T2_C1_Sn + T3_C1_Sn)/totalTracks 

当多通道(如立体声):重复用于每个通道交错结果(左声道优先)。当然,你可以在一个'跑'中做到这一点。

注意(对于PCM):

  • <= 8 bits采样分辨率是在PCM 无符号(所以0127,换句话说,负波摆动低于127,正波摆动是127以上的),你需要说明这一点。
  • >8 bits签署所以你可以安全地使用上面的基本公式(因为-4 + -5 = -9)。

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

+0

如果您有任何演示或示例代码或方法(链接),请告诉我或发送给我.thank您。 – Mirant 2014-10-10 12:25:36

+0

对不起,我目前正在JavaScript中做这个还没有准备好炫耀。然而,除了写一个正确的波头,这对于* basic * 16bit 2ch 41.1khz来说是微不足道的 - 对于分辨率不是8位倍数的PCM格式,您可以在RIFF/WAVE规格和在线代码中有98%的方程是错误的(它们意外地用于8位的倍数),但这是另一个问题的原因 - )这里概述的步骤是正确的,应该让你开始。实际上,它正是*我正在做的事情,我用一些DAW来验证结果。 – GitaarLAB 2014-10-10 12:31:59

相关问题