#!/usr/bin/env python # coding: utf-8 # MAT 201A Winter 2016 # HW 4 # Qiaodong Cui # In[1]: get_ipython().run_line_magic('pylab', 'inline') rcParams['figure.figsize'] = (10, 4) #wide graphs by default from __future__ import print_function from __future__ import division from scipy.io import wavfile get_ipython().run_line_magic('matplotlib', 'inline') # In[2]: rtom, tom = wavfile.read('tom.wav') #read music file rpia, pia = wavfile.read('piano.wav') rglo, glo = wavfile.read('glockenspiel.wav') # In[3]: from IPython.display import Audio Audio(tom,rate=rtom) # In[4]: Audio(pia,rate=rpia) # In[5]: Audio(glo,rate=rglo) # In[6]: plot(tom) #plot first music # In[7]: X = abs(fft.rfft(glo)) / (glo.size/2) #rfft, normalize, for the glockenspiel music # In[8]: plot(X) #plot frequency for glockenspiel xlim(1000,1200) #the maximum freq bin is within this range # In[9]: argmax(X) #find maximum bin # $$ f = \frac{f_0 * f_s}{N} $$ # $ f $ frequency, $ f_0 $ freq bin, $f_s$ sample rate, $N$ number of samples # In[10]: def get_Pin(wav, srate): X = abs(fft.rfft(wav)) / (wav.size/2) #first do a rfft, and normalize b = argmax(X) #find maximum bin return b*srate / wav.size #the above equation # In[11]: get_Pin(tom, rtom) #maximum frequency for tom.wav # In[12]: get_Pin(pia, rpia) #maximum frequency for piano.wav # In[13]: get_Pin(glo, rglo) #maximum frequency for glockenspiel.wav # In[ ]: