2011-10-02 168 views
8

我想在Python中做基本的音頻混合。如何使用python混合音頻文件?

舉個例子:我想帶兩個mp3文件並將它們加在一起並返回一個mp3文件。另一個例子:我想將一個mp3文件的前10秒添加到另一個mp3文件的開頭。

完成這些任務的最佳方法是什麼?我想使用像audioop這樣的內置python函數,但找不到任何好的教程或示例代碼來使用內置函數。

我正在閱讀文檔,但我很困惑,不知道如何做這樣的事情。我甚至不確定像mp3這樣的python庫。我看過的大部分內容似乎都是指WAV文件。所以,如果是這樣的話,我想後續的問題是有沒有一種簡單的方法將mp3轉換爲WAV進行操作並返回?

+0

幾乎在任何情況下,我能想到的,你必須轉換處理之前WAV。 mp3是一種壓縮格式,必須先解壓縮才能操作P​​CM數據。 –

+0

對不起,應該讓最後一個問題更清楚:「是否有一個簡單的方法來將mp3轉換爲WAV進行操作,然後在Python **中再次返回**?」 – user439299

回答

13

你可以做到這一點很容易地使用pydub

from pydub import AudioSegment 

sound1 = AudioSegment.from_mp3("/path/to/file1.mp3") 
sound2 = AudioSegment.from_mp3("/path/to/file1.mp3") 

# mix sound2 with sound1, starting at 5000ms into sound1) 
output = sound1.overlay(sound2, position=5000) 

# save the result 
output.export("mixed_sounds.mp3", format="mp3") 
+0

這是一個古老的問題和答案,但仍然相關,仍然有效。發佈這爲未來的讀者。 –

1

您可以查看python audiotools項目中的部分代碼。它是一個使用通用python包的命令行工具的集合。音效工具包含一個實用程序(trackcat),可以識別兩個或更多音軌;另一個(tracksplit)可以分割音軌(使用.cue文件)。這些以及許多其他包含的實用程序可以處理各種編碼的音頻文件,包括mp3。

0

我過去這樣做的方式只是使用subprocess。並致電sox

例如subprocess.call(["sox", "in.1.mp3", "in.2.mp3", "out.mp3"])