2011-11-19 68 views
2

坦率地說,我不知道從哪一個開始。我必須有一個將一些mp3曲目合併到一個曲目的程序(不是連接,而是實際合併它們,就像一次播放幾個音軌一樣)。有沒有可用的庫或其他基本程序會自動執行此操作?我也需要改變每首曲目的音量,我也不知道從哪裏開始。合併幾個MP3曲目到一個曲目

速度和效率是這個的主要因素,所以我不能只是做懶傢伙,併發揮他們並捕捉它。

回答

2

我將嘗試繪製,你可以遵循一些基本的步驟:

  1. 您需要將您的MP3文件解壓縮到原始音頻。您正在開發什麼樣的應用,你可以 madlib(GPL)或ffmpeg(LGPL),例如使用根據 。

  2. 您需要將所有曲目標準化爲same frequency (重新採樣),然後決定輸出bit-depth

  3. 現在你可以混合所有的曲目。假設你有兩個頻道, 的基本思路是計算你的曲目的正確的 頻道的所有樣本的平均值,然後對左聲道做同樣的處理。 有很多方法可以做到這一點,在這裏您將不得不爲 決定在結果中的性能/質量取捨。對於 示例,某些開發人員更願意在浮點型 點上執行混合操作,以便處理clipping (d)effects,但其他 可能會對此提出建議,因爲它會影響性能。有一個關於基於整數的混合here(它已經 引用多次在SO)一 好崗位。在此步驟之前(或在此過程中),您可以通過對要規範化的通道樣本使用乘數來實現一些audio normalization處理。

  4. 最後,您可以再次壓縮混合音頻。例如,您可以在此任務上使用 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

你可以將它們混合在一起作爲獨立的軌道。是你自己寫代碼的要求嗎?

當你在原始形式的數據流,可以治療可能樣本值的中間點爲零..(8位樣本.. 256個值可能.. 127是零..在0或255樣品在最大卷)。

調節音量,移位,相乘,以增加體積,分減少(銘記削波)

混合,只需添加每個流的值,在時間(注意到限幅)一個樣本。

這裏是一個很好的鏈接太多:http://www.4front-tech.com/pguide/audio.html

+0

它需要通過CLI完成。 –

+0

看着跛腳,ogg。你需要一個原始音頻流(這實際上是一系列數字,代表揚聲器線圈每個樣本獲得多少功率)。我正在更新我的答案以作進一步解釋。 – snapfractalpop

1

這是可以做到實時,給予足夠的處理器性能。您需要能夠讀取mp3文件,一些實時軟件mp3解碼器塊(類似於用於製作自己的mp3播放器/可視化器的塊),其速度足以實時運行N個副本/線程,可能包括一些DSP採樣速率轉換模塊和一個DSP混合模塊。所有軟件。將所有處理線程與隊列和數據fifo結合在一起。

我有可用於某些塊(解碼器,重新採樣器)的庫代碼,但要注意潛在的許可限制。