Python 讀取WAV音頻文件 畫頻譜

  1. import wave  
  2. import struct  
  3. from scipy import *  
  4. from pylab import *  
  5.   
  6. #讀取wav文件,我這兒讀了個自己用python寫的音階的wav  
  7. filename = '1.wav'  
  8. wavefile = wave.open(filename, 'r'# open for writing  
  9.   
  10. #讀取wav文件的四種信息的函數。期中numframes表示一共讀取了幾個frames,在後面要用到滴。  
  11. nchannels = wavefile.getnchannels()  
  12. sample_width = wavefile.getsampwidth()  
  13. framerate = wavefile.getframerate()  
  14. numframes = wavefile.getnframes()  
  15.   
  16. print("channel",nchannels)  
  17. print("sample_width",sample_width)  
  18. print("framerate",framerate)  
  19. print("numframes",numframes)  
  20.   
  21. #建一個y的數列,用來保存後面讀的每個frame的amplitude。  
  22. y = zeros(numframes)  
  23.   
  24. #for循環,readframe(1)每次讀一個frame,取其前兩位,是左聲道的信息。右聲道就是後兩位啦。  
  25. #unpack是struct裏的一個函數,用法詳見http://docs.python.org/library/struct.html。簡單說來就是把#packed的string轉換成原來的數據,無論是什麼樣的數據都返回一個tuple。這裏返回的是長度爲一的一個  
  26. #tuple,所以我們取它的第零位。  
  27. for i in range(numframes):  
  28.     val = wavefile.readframes(1)  
  29.     left = val[0:2]  
  30. #right = val[2:4]  
  31.     v = struct.unpack('h', left )[0]  
  32.     y[i] = v  
  33.   
  34. #framerate就是44100,文件初讀取的值。然後本程序最關鍵的一步!specgram!實在太簡單了。。。  
  35. Fs = framerate  
  36. specgram(y, NFFT=1024, Fs=Fs, noverlap=900)  
  37. show()  
發佈了7 篇原創文章 · 獲贊 35 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章