2014-10-10 27 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

相關問題