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()  

你可能感兴趣的:(python,语音)