In [1]:
import os
import wave
In [2]:
# add project-specific src directories
import sys
sys.path.insert(2, '../src/')
# project imports
import fft
In [3]:
%load_ext autoreload
%autoreload 2
In [4]:
data_dir = '../data/'
In [20]:
stream_01, sample_rate_01 = read_wav.mono_channel(os.path.join(data_dir, 'z01.wav'))
In [21]:
stream_02, sample_rate_02 = read_wav.mono_channel(os.path.join(data_dir, 'z02.wav'))
In [22]:
stream_01[:10]
Out[22]:
In [23]:
stream_02[:10]
Out[23]:
In [24]:
wr01 = wave.open(os.path.join(data_dir, 'z01.wav'))
wr01.readframes(10)
Out[24]:
In [25]:
wr01 = wave.open(os.path.join(data_dir, 'z02.wav'))
wr01.readframes(10)
Out[25]:
In [9]:
len(res)
Out[9]:
In [10]:
len(stream)
Out[10]:
In [19]:
wr = wave.open(os.path.join(data_dir, 'z01.wav'))
In [17]:
wr.getparams()
Out[17]:
In [ ]:
../data/
In [3]:
import match
import numpy
In [ ]:
match.get_mono
In [19]:
import numpy as np
from scipy.io import wavfile
def get_mono(fpath):
""" Converts the given wav file to 5512Hz PCM Mono
"""
samplerate, channels = wavfile.read(fpath)
return np.mean(channels, axis=1)
In [ ]:
def mse(A, B):
#convert from complex to real vectors
A = map(convert, A)
B = map(convert, B)
#caluclate euclidean distance between A and B
dist = [distance.euclidean(a,b) ** 2 for a, b in zip(A, B)]
return np.mean(dist)
In [27]:
z01 = get_mono('../data/z01.wav')
z02 = get_mono('../data/z05.wav')
In [36]:
np.dstack([z01, z02])[0]
Out[36]:
In [46]:
np.mean([abs(a - b) ** 2 for a, b in np.dstack([z01, z02])[0]])
Out[46]:
In [37]:
match.fft('../data/z01.wav')
Out[37]:
In [40]:
t = map(match.convert, match.fft('../data/z01.wav'))
In [42]:
np.real(match.fft('../data/z01.wav'))
Out[42]:
In [55]:
def downsample(stream):
""" Downsample from 44100 -> 5512Hz
"""
return decimate(stream, 8)
def get_mono(fpath):
""" Converts the given wav file to 5512Hz PCM Mono
"""
samplerate, channels = wavfile.read(fpath)
return np.mean(channels, axis=1)
def fft(fpath):
mono_stream = get_mono(fpath)
return np.fft.fft(mono_stream)
def mse(A, B):
return ((np.real(A) - np.real(B)) ** 2).mean()
def similarity(f1, f2):
ffts = map(fft, [f1, f2])
return mse(ffts[0], ffts[1])
In [56]:
similarity('../data/z01.wav', '../data/z02.wav')
Out[56]:
In [57]:
similarity('../data/z01.wav', '../data/z06.wav')
Out[57]:
In [59]:
similarity('../data/z03.wav', '../data/z04.wav')
Out[59]:
In [60]:
148965953915
150000000000
Out[60]: