2014-03-31 42 views
2

我想使用python wave模塊更改某個WAV音頻文件的播放速度(增加或減少)。增加/減少WAV文件的播放速度Python

我嘗試下面的事情:輸入文件的

  1. 讀幀速率。
  2. 雙倍的幀頻。
  3. 使用output_wave.setparams()函數編寫一個新的波形文件,增加幀速率。

但它沒有工作。

請建議。

在此先感謝,

+0

如果您可以發佈a)您正在使用的代碼以及b)該問題的更詳細的描述 - 即* how'是不是正在解決問題? – lvc

回答

4

哇!

如果您在增加或減少速度時無論如何改變音高,只需更改採樣率即可!

可以使用Python是非常簡單的:

import wave 

CHANNELS = 1 
swidth = 2 
Change_RATE = 2 

spf = wave.open('VOZ.wav', 'rb') 
RATE=spf.getframerate() 
signal = spf.readframes(-1) 

wf = wave.open('changed.wav', 'wb') 
wf.setnchannels(CHANNELS) 
wf.setsampwidth(swidth) 
wf.setframerate(RATE*Change_RATE) 
wf.writeframes(signal) 
wf.close() 

增加或減少變量Change_RATE

現在,如果您需要保持音高不變,您需要做相同類型的重疊添加方法!

+0

謝謝!這就是我一直在尋找的......非常感謝! –

+0

另一個問題,如果我製作一個波形文件,總共20000幀,幀率爲500,那麼wav聲音的週期應該是40秒,但實際上它會變成1分19秒.. NUMBER_OF_FRAME = 20000 FRAME_RATE = 500 op = wave.open('random.wav','w') op.setparams((1,2,FRAME_RATE,NUMBER_OF_FRAME,'NONE','not compressed')) for i in range NUMBER_OF_FRAME): \t字節1 = struct.pack( 'H',randint(0255)) \t字節2 = struct.pack( 'H',randint(0255)) \t op.writeframes(字節1字節2 +) 運算。關閉() 爲什麼我發生什麼? –