In [1]:
import numpy as np
import librosa
import scipy.io.wavfile
import senmf
import itertools
%pylab inline
In [2]:
sr, x = scipy.io.wavfile.read('data/bird-songs.wav')
stft = librosa.stft(x, n_fft=1024, hop_length=200).T
X = np.abs(stft)[:,:250]
figure(figsize=(20,5))
imshow(np.log(X.T))
Out[2]:
In [3]:
nmf = senmf.SENMF(n_bases=5, window_width=15, X=X)
nmf.rand_D()
nmf.rand_A()
Out[3]:
In [5]:
%time nmf.fit(5)
In [6]:
plot(nmf.A.T)
Out[6]:
In [7]:
(x,y,z) = nmf.D.shape
imshow(np.log(nmf.D.reshape(x*y, z)))
Out[7]:
In [8]:
for i in range(nmf.n_bases):
figure()
imshow(nmf.reconstruct_basis(i))
In [9]:
X_bar = nmf.reconstruct()
imshow(np.log(X_bar))
Out[9]:
In [10]:
imshow(np.log(X-X_bar))
Out[10]: