-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathutils.py
73 lines (68 loc) · 2.68 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import librosa
import numpy as np
import pandas as pd
from tqdm import tqdm
from sklearn import preprocessing
import warnings
from os import listdir
from os.path import isdir, join
# function to load data
def data_loader(dir_path):
warnings.filterwarnings('ignore')
alldirs = [d for d in listdir(dir_path)if isdir(join(dir_path, d))]
out_X = []
out_Y = []
for i in alldirs:
allfiles = [f for f in listdir(join(dir_path, i))if not f.endswith(('.csv','.json','.DS_Store'))]
for fp in tqdm(allfiles):
try:
X,sr = librosa.load(join(dir_path, i, fp), sr = 11025)
out_X.append(X)
out_Y.append(str(i))
except:
next
return out_X, out_Y
# function to reshape all lists to common length by adding trailing 0s
def padder(X):
max_len = max([len(i) for i in X])
for j in tqdm(X):
j = librosa.util.fix_length(j,max_len)
return X,max_len
# function to extract features
def feat_extract_concat(X):
out = []
for i in tqdm(X):
i = np.array(i)
stft = np.mean(np.abs(librosa.stft(i)).T, axis = 0)
mfccs = np.mean(librosa.feature.mfcc(i, sr = 11025).T, axis = 0)
chroma = np.mean(librosa.feature.chroma_stft(i, sr = 11025).T, axis = 0)
mel = np.mean(librosa.feature.melspectrogram(i, sr = 11025).T, axis = 0)
contrast = np.mean(librosa.feature.spectral_contrast(i, sr = 11025, n_bands = 4).T, axis = 0)
tonnetz = np.mean(librosa.feature.tonnetz(librosa.effects.harmonic(i), sr = 11025).T, axis = 0)
out_tmp = list(stft)+list(mfccs)+list(chroma)+list(mel)+list(contrast)+list(tonnetz)
out.append(out_tmp)
return out
def feat_extract_sep(X):
out_stft = []
out_mfccs = []
out_chroma = []
out_mel = []
out_contrast = []
out_tonnetz = []
out_cqt = []
out_cens = []
out_rmse = []
out_spcentroid = []
out_spband = []
out_sproll = []
out_poly = []
out_zcr = []
for i in tqdm(X):
i = np.array(i)
out_stft.append(list(np.mean(np.abs(librosa.stft(i)).T, axis = 0)))
out_mfccs.append(list(np.mean(librosa.feature.mfcc(i, sr = 11025).T, axis = 0)))
out_chroma.append(list(np.mean(librosa.feature.chroma_stft(i, sr = 11025).T, axis = 0)))
out_mel.append(list(np.mean(librosa.feature.melspectrogram(i, sr = 11025).T, axis = 0)))
out_contrast.append(list(np.mean(librosa.feature.spectral_contrast(i, sr = 11025, n_bands = 4).T, axis = 0)))
out_tonnetz.append(list(np.mean(librosa.feature.tonnetz(librosa.effects.harmonic(i), sr = 11025).T, axis = 0)))
return out_stft,out_mfccs,out_chroma,out_mel,out_contrast,out_tonnetz