2013-10-15 105 views
4

好吧,即時使用pyaudio,但從我一直在看波模塊可能可以幫助我在這裏。在Python中修剪音頻

所以我試着在我的程序添加一個微調功能,我的意思是我嘗試讓用戶找到一個wav的部分。他/她不喜歡,並有能力修剪波形文件,然而他/她想要它。

到目前爲止,我一直在使用pyaudio只是簡單的播放和pyaudio是很容易的,當涉及到從輸入設備記錄。

我一直在尋找的pyaudio上什麼我可以做修剪的音頻,但我真的還沒有發現任何可以幫助我。雖然在嵌入式波形模塊中我看到有設置位置的方法。

我需要做一個循環或者是否完成了語句,以便程序知道要錄製哪些位置,然後讓pyaudio或wave模塊從用戶設置的位置(開始,結束)錄製歌曲?如果我這樣接近它,我的程序能否高效運行?

+0

[使用波Python模塊獲取和寫入音頻]的可能重複(http://stackoverflow.com/questions/9867834/using-wave-python-module-to-get-and-write-audio ) –

回答

1

讓我們假設你使用SciPy的在波文件中讀取。

然後,你需要有「編輯點」這是進出值(以秒爲單位爲例),用戶想保留。你可以從文件中獲取這些信息,或者從顯示波形文件中獲取這些信息並從鼠標中獲取點擊。如果用戶給出應刪除那麼這將需要第一個音頻文件的部分否定

這不是最有效的解決方案,但應該在很多場景是好的。

import scipy.io.wavfile 
fs1, y1 = scipy.io.wavfile.read(filename) 
l1 = numpy.array([ [7.2,19.8], [35.3,67.23], [103,110 ] ]) 
l1 = ceil(l1*fs1)#get integer indices into the wav file - careful of end of array reading with a check for greater than y1.shape 
newWavFileAsList = [] 
for elem in l1: 
    startRead = elem[0] 
    endRead = elem[1] 
    if startRead >= y1.shape[0]: 
    startRead = y1.shape[0]-1 
    if endRead >= y1.shape[0]: 
    endRead = y1.shape[0]-1 
    newWavFileAsList.extend(y1[startRead:endRead]) 


newWavFile = numpy.array(newWavFileAsList) 

scipy.io.wavfile.write(outputName, fs1, newWavFile) 
+0

你也使用numpy模塊嗎? –

+0

和什麼將是最有效的方法來解決這個問題? –

+0

你認爲我可以用這個嗎? –