1. 程式人生 > >python 實現wav的波形顯示(時域和頻域)

python 實現wav的波形顯示(時域和頻域)

lib getpara set 付出 frame ams sam 同步 時域

  音頻處理中,經常要看一下啊頻域圖是什麽樣子的,這裏自己寫了一個小程序,可以完美的同步顯示時域和頻域圖,直接上代碼:

 1 #wave data   -xlxw
 2 
 3 #import
 4 import wave as we
 5 import numpy as np
 6 import matplotlib.pyplot as plt 
 7 import sys 
 8 
 9 def wavread(path):
10     wavfile =  we.open(path,"rb")
11     params = wavfile.getparams()
12 framesra,frameswav= params[2],params[3] 13 nchannels, sampwidth, framesra, frameswav = params[:4] 14 print("nchannels:%d" % nchannels) 15 print("sampwidth:%d" % sampwidth) 16 datawav = wavfile.readframes(frameswav) 17 wavfile.close() 18 datause = np.fromstring(datawav,dtype = np.short)
19 print(len(datause)) 20 if nchannels == 2: 21 datause.shape = -1,2 22 datause = datause.T 23 time = np.arange(0, frameswav) * (1.0/framesra) 24 return datause,time,nchannels 25 26 def main(): 27 path = sys.argv[1] 28 #path = input("The Path is:") 29 print
(path) 30 wavdata,wavtime,nchannels = wavread(path) 31 32 N=len(wavdata) 33 framerate = 16000 34 start=0 35 df = 1 36 freq = [df*n for n in range(0,len(wavdata))] 37 print(len(wavdata)) 38 print(len(wavtime)) 39 40 c=np.fft.fft(wavdata)*nchannels 41 d=int(len(c)/2) 42 print(len(c)) 43 44 fig, ax = plt.subplots(2, 1) 45 46 47 ax[0].plot(wavtime,wavdata,color = green) 48 ax[0].set_xlabel(Time) 49 ax[0].set_ylabel(Amplitude) 50 51 52 ax[1].plot(freq,abs(c),color = red) 53 ax[1].set_xlabel(Freq(HZ)) 54 ax[1].set_ylabel(Y(freq)) 55 56 plt.show()

 直接上圖看結果:

技術分享圖片

  這個只能對單聲道16k采樣的wav格式做處理,不過,只要稍微加一更改,就可以處理別的了。具體改代碼的事情,還是誰用誰做吧。做個程序員,總要付出一些代價的。

每日一言:君子役物,小人役於物。——《勸學》

python 實現wav的波形顯示(時域和頻域)