- import wave
- import struct
- from scipy import *
- from pylab import *
- #讀取wav文件,我這兒讀了個自己用python寫的音階的wav
- filename = '1.wav'
- wavefile = wave.open(filename, 'r') # open for writing
- #讀取wav文件的四種信息的函數。期中numframes表示一共讀取了幾個frames,在後面要用到滴。
- nchannels = wavefile.getnchannels()
- sample_width = wavefile.getsampwidth()
- framerate = wavefile.getframerate()
- numframes = wavefile.getnframes()
- print("channel",nchannels)
- print("sample_width",sample_width)
- print("framerate",framerate)
- print("numframes",numframes)
- #建一個y的數列,用來保存後面讀的每個frame的amplitude。
- y = zeros(numframes)
- #for循環,readframe(1)每次讀一個frame,取其前兩位,是左聲道的信息。右聲道就是後兩位啦。
- #unpack是struct裏的一個函數,用法詳見http://docs.python.org/library/struct.html。簡單說來就是把#packed的string轉換成原來的數據,無論是什麼樣的數據都返回一個tuple。這裏返回的是長度爲一的一個
- #tuple,所以我們取它的第零位。
- for i in range(numframes):
- val = wavefile.readframes(1)
- left = val[0:2]
- #right = val[2:4]
- v = struct.unpack('h', left )[0]
- y[i] = v
- #framerate就是44100,文件初讀取的值。然後本程序最關鍵的一步!specgram!實在太簡單了。。。
- Fs = framerate
- specgram(y, NFFT=1024, Fs=Fs, noverlap=900)
- show()
Python 讀取WAV音頻文件 畫頻譜
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.