In [1]:
import numpy as np
import matplotlib.pyplot as plt
import librosa
import librosa.display
%matplotlib inline

import IPython.display

In [2]:
file_path = "../data/songData/genres/blues/blues.00000.wav"
y, sr = librosa.load(file_path)

In [3]:
S_full, phase = librosa.magphase(librosa.stft(y))

In [4]:
idx = slice(*librosa.time_to_frames([0, 30], sr=sr))
plt.figure(figsize=(12, 4))
librosa.display.specshow(librosa.amplitude_to_db(S_full[:, idx], ref=np.max),
                        x_axis='time', y_axis='log', sr=sr)
plt.colorbar()
plt.tight_layout()



In [5]:
S_filter = librosa.decompose.nn_filter(S_full,
                                      aggregate=np.median,
                                      metric='cosine',
                                      width=int(librosa.time_to_frames(2, sr)))

In [6]:
S_filter = np.minimum(S_filter, S_full)

In [7]:
margin_i, margin_v = 2, 10
power = 2

mask_i = librosa.util.softmask(S_filter,
                              margin_i * (S_full - S_filter),
                              power=power)

mask_v = librosa.util.softmask(S_full - S_filter,
                              margin_v * S_filter,
                              power=power)

S_foreground = mask_v * S_full
S_background = mask_i * S_full

In [8]:
plt.figure(figsize=(12, 8))

plt.subplot(3, 1, 1)
librosa.display.specshow(librosa.amplitude_to_db(S_full[:, idx], ref=np.max),
                        y_axis='log', sr=sr)
plt.title('Full spectrogram')
plt.colorbar()

plt.subplot(3, 1, 2)
librosa.display.specshow(librosa.amplitude_to_db(S_background[:, idx], ref=np.max),
                         y_axis='log', sr=sr)
plt.title('Background')
plt.colorbar()

plt.subplot(3, 1, 3)
librosa.display.specshow(librosa.amplitude_to_db(S_foreground[:, idx], ref=np.max),
                        y_axis='log', sr=sr)
plt.title('Foreground')
plt.colorbar()

plt.tight_layout()



In [9]:
background_data = librosa.decompose.decompose(S_background)

IPython.display.Audio(data=background_data, rate=sr)


---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-9-caa762c48be1> in <module>()
----> 1 background_data = librosa.decompose.decompose(S_background)
      2 
      3 IPython.display.Audio(data=background_data, rate=sr)

/home/minato/.pyenv/versions/anaconda3-4.2.0/lib/python3.5/site-packages/librosa/decompose.py in decompose(S, n_components, transformer, sort, fit, **kwargs)
    175 
    176     if fit:
--> 177         activations = transformer.fit_transform(S.T).T
    178     else:
    179         activations = transformer.transform(S.T).T

/home/minato/.pyenv/versions/anaconda3-4.2.0/lib/python3.5/site-packages/sklearn/decomposition/nmf.py in fit_transform(self, X, y, W, H)
   1032             shuffle=self.shuffle,
   1033             nls_max_iter=self.nls_max_iter, sparseness=self.sparseness,
-> 1034             beta=self.beta, eta=self.eta)
   1035 
   1036         if self.solver == 'pg':

/home/minato/.pyenv/versions/anaconda3-4.2.0/lib/python3.5/site-packages/sklearn/decomposition/nmf.py in non_negative_factorization(X, W, H, n_components, init, update_H, solver, tol, max_iter, alpha, l1_ratio, regularization, random_state, verbose, shuffle, nls_max_iter, sparseness, beta, eta)
    795                                                verbose=verbose,
    796                                                shuffle=shuffle,
--> 797                                                random_state=random_state)
    798     else:
    799         raise ValueError("Invalid solver parameter '%s'." % solver)

/home/minato/.pyenv/versions/anaconda3-4.2.0/lib/python3.5/site-packages/sklearn/decomposition/nmf.py in _fit_coordinate_descent(X, W, H, tol, max_iter, alpha, l1_ratio, regularization, update_H, verbose, shuffle, random_state)
    582         if update_H:
    583             violation += _update_coordinate_descent(X.T, Ht, W, l1_H, l2_H,
--> 584                                                     shuffle, rng)
    585 
    586         if n_iter == 0:

/home/minato/.pyenv/versions/anaconda3-4.2.0/lib/python3.5/site-packages/sklearn/decomposition/nmf.py in _update_coordinate_descent(X, W, Ht, l1_reg, l2_reg, shuffle, random_state)
    467 
    468     HHt = fast_dot(Ht.T, Ht)
--> 469     XHt = safe_sparse_dot(X, Ht)
    470 
    471     # L2 regularization corresponds to increase of the diagonal of HHt

/home/minato/.pyenv/versions/anaconda3-4.2.0/lib/python3.5/site-packages/sklearn/utils/extmath.py in safe_sparse_dot(a, b, dense_output)
    187         return ret
    188     else:
--> 189         return fast_dot(a, b)
    190 
    191 

KeyboardInterrupt: