【问题标题】:How can I mix 2 audio files into 1 file如何将 2 个音频文件混合为 1 个文件
【发布时间】:2014-10-11 05:00:07
【问题描述】:

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

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

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

那么我怎样才能将它们混合到一个文件中(异步和完美的持续时间)??

【问题讨论】:

标签: objective-c audio


【解决方案1】:

这对于 Apple 的新 AVAudioEngine 来说非常简单,它就是为这种情况而设计的。

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

并观看有关它的 WWDC 视频...

【讨论】:

【解决方案2】:

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

基本概念:相等的波相互放大,相反的波相互衰减。
所以,基本思路是:

  • 将音频样本转换为 PCM(如果它还不是 PCM)(您可能希望分块执行此操作)
  • 将每个通道的样本相加并除以通道数(用0 代替耗时少于最长轨道的轨道)。
  • 打包(用于 wave 等)并存储二进制文件(可选择压缩为 mp3 等)。

示例:3 个单声道轨道(T=track、C=channel、Sn=single Sample n 的值或 0):

resultTrack_C1_Sn = ( T1_C1_Sn + T2_C1_Sn + T3_C1_Sn ) / totalTracks

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

注意(PCM):

  • <= 8 bits 样本分辨率在 PCM 中是 unsigned (所以 0127,换句话说,负波动低于 127,正波动高于 127),你需要考虑到这一点。
  • >8 bits签名,因此您可以安全地使用上面的基本公式(自 -4 + -5 = -9 起)。

这应该让您开始了解基本概念。

【讨论】:

  • 如果您有任何演示或示例代码或方法(链接),请告诉我或发送给我。谢谢。
  • 抱歉,我目前正在使用尚未准备好炫耀的 javascript 执行此操作。但是,(除了编写一个正确的波头,这对于 basic 16bit 2ch 41.1khz 来说是微不足道的——对于分辨率不是 8 位倍数的 PCM 格式,您会在RIFF/WAVE 规范和在线代码中 98% 的方程式是错误的(它们意外地适用于 8 位的倍数),但这是另一个问题的内容——)此处概述的步骤是正确的,应该可以帮助您入门。实际上,这正是我正在做的事情,我用一些 DAW 验证了结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 2015-06-22
相关资源
最近更新 更多