| | import librosa |
| | import numpy as np |
| | import joblib |
| | import soundfile as sf |
| | scaler = joblib.load("./models/std_scaler(1).pkl") |
| |
|
| |
|
| | def load_audio_from_uploaded_file(uploaded_file): |
| | |
| | audio_data, sample_rate = sf.read(uploaded_file) |
| |
|
| | return audio_data, sample_rate |
| |
|
| |
|
| | |
| | Fields = ['name', 'length', 'chroma_stft_mean', 'chroma_stft_var', 'rms_mean', 'rms_var', |
| | 'spectral_centroid_mean', 'spectral_centroid_var', 'spectral_bandwidth_mean', 'spectral_bandwidth_var', |
| | 'rolloff_mean', 'rolloff_var', 'zero_crossing_rate_mean', 'zero_crossing_rate_var', |
| | 'harmony_mean', 'harmony_var', 'percussive_mean', 'percussive_var', 'tempo', |
| | 'mfcc1_mean', 'mfcc1_var', 'mfcc2_mean', 'mfcc2_var', 'mfcc3_mean', 'mfcc3_var', 'mfcc4_mean', 'mfcc4_var', |
| | 'mfcc5_mean', 'mfcc5_var', 'mfcc6_mean', 'mfcc6_var', 'mfcc7_mean', 'mfcc7_var', 'mfcc8_mean', 'mfcc8_var', |
| | 'mfcc9_mean', 'mfcc9_var', 'mfcc10_mean', 'mfcc10_var', 'mfcc11_mean', 'mfcc11_var', 'mfcc12_mean', |
| | 'mfcc12_var', |
| | 'mfcc13_mean', 'mfcc13_var', 'mfcc14_mean', 'mfcc14_var', 'mfcc15_mean', 'mfcc15_var', 'mfcc16_mean', |
| | 'mfcc16_var', |
| | 'mfcc17_mean', 'mfcc17_var', 'mfcc18_mean', 'mfcc18_var', 'mfcc19_mean', 'mfcc19_var', 'mfcc20_mean', |
| | 'mfcc20_var'] |
| |
|
| | short_field = Fields[2:] |
| |
|
| |
|
| | def all_feature_extraction(audio_path, sample_rate=22050): |
| | data_list = [] |
| | val_field = [] |
| | audio_df, sr = librosa.load(audio_path, sr=22050) |
| | data_list.append(audio_path) |
| | data_list.append(len(audio_df)) |
| |
|
| | |
| | chroma_stft = librosa.feature.chroma_stft(y=audio_df, hop_length=512) |
| | chroma_stft_mean = np.mean(chroma_stft) |
| | chroma_stft_var = np.var(chroma_stft) |
| |
|
| | val_field.append(chroma_stft) |
| | data_list.append(chroma_stft_mean) |
| | data_list.append(chroma_stft_var) |
| |
|
| | print(data_list,val_field) |
| |
|
| | |
| | rms = librosa.feature.rms(y=audio_df) |
| | rms_mean = np.mean(rms) |
| | rms_var = np.var(rms) |
| | data_list.append(rms_mean) |
| | data_list.append(rms_var) |
| |
|
| | spectral_centroid = librosa.feature.spectral_centroid(y=audio_df) |
| | spectral_centroid_mean = np.mean(spectral_centroid) |
| | spectral_centroid_var = np.var(spectral_centroid) |
| | data_list.append(spectral_centroid_mean) |
| | data_list.append(spectral_centroid_var) |
| |
|
| | spectral_bandwidth = librosa.feature.spectral_bandwidth(y=audio_df) |
| | spectral_bandwidth_mean = np.mean(spectral_bandwidth) |
| | spectral_bandwidth_var = np.var(spectral_bandwidth) |
| | data_list.append(spectral_bandwidth_mean) |
| | data_list.append(spectral_bandwidth_var) |
| |
|
| | spectral_rolloff = librosa.feature.spectral_rolloff(y=audio_df) |
| | spectral_rolloff_mean = np.mean(spectral_rolloff) |
| | spectral_rolloff_var = np.var(spectral_rolloff) |
| | data_list.append(spectral_rolloff_mean) |
| | data_list.append(spectral_rolloff_var) |
| |
|
| | zcr = librosa.feature.zero_crossing_rate(y=audio_df) |
| | zcr_mean = np.mean(zcr) |
| | zcr_var = np.var(zcr) |
| | data_list.append(zcr_mean) |
| | data_list.append(zcr_var) |
| |
|
| | harmonic, percussive = librosa.effects.hpss(y=audio_df) |
| | harmonic_mean = np.mean(harmonic) |
| | harmonic_var = np.var(harmonic) |
| | percussive_mean = np.mean(percussive) |
| | percussive_var = np.var(percussive) |
| | data_list.append(harmonic_mean) |
| | data_list.append(harmonic_var) |
| | data_list.append(percussive_mean) |
| | data_list.append(percussive_var) |
| |
|
| | tempo = librosa.feature.tempo(y=audio_df) |
| | tempo = np.mean(tempo) |
| | data_list.append(tempo) |
| | mfccs = librosa.feature.mfcc(y=audio_df, sr=sr) |
| | row_means = np.mean(mfccs, axis=1) |
| | row_vars = np.var(mfccs, axis=1) |
| | mfcc_means = {} |
| | mfcc_vars = {} |
| | for i in range(1, 21): |
| | variable_name = f'mfcc{i}' |
| | mfcc_means[variable_name] = row_means[i - 1] |
| | mfcc_vars[variable_name] = row_vars[i - 1] |
| | |
| | mfcc_list = [value for value in zip(mfcc_means.values(), mfcc_vars.values())] |
| |
|
| | for mean, var in mfcc_list: |
| | data_list.append(mean) |
| | data_list.append(var) |
| |
|
| | return [data_list,val_field] |
| |
|
| | def scale(initial_features): |
| | final_features = initial_features[2:] |
| | final_features = np.array(final_features) |
| | |
| | scaled_data_point = scaler.transform([final_features]) |
| | return scaled_data_point |
| |
|