{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Librosa Feature Generation\n\nIn this notebook I share my code for generation audio features with [librosa library](https://librosa.org/). There are 16 features in total including rhythm features. I use resampled data for this task.","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"### Import  ","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"import os\nimport shutil\nfrom tqdm import tqdm\nimport librosa\nfrom librosa import feature\nimport numpy as np\nimport warnings\n\nwarnings.filterwarnings(\"ignore\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Set up the features","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"fn_list_i = [\n    feature.chroma_stft,\n    feature.spectral_centroid,\n    feature.spectral_bandwidth,\n    feature.spectral_rolloff,\n    feature.mfcc,\n    feature.chroma_cqt,\n    feature.chroma_cens,\n    feature.melspectrogram,\n    feature.spectral_contrast,\n    feature.poly_features,\n    feature.tonnetz,\n    feature.tempogram,\n    feature.fourier_tempogram,\n]\n \nfn_list_ii = [\n    feature.rms,\n    feature.zero_crossing_rate,\n    feature.spectral_flatness,\n]\n\n\ndef get_feature_vector(y,sr): \n   feat_vect_i = [ np.mean(funct(y,sr)) for funct in fn_list_i]\n   feat_vect_ii = [ np.mean(funct(y)) for funct in fn_list_ii] \n   feature_vector = feat_vect_i + feat_vect_ii \n   return feature_vector","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Initializing","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"PATHS = [\n    \"../input/birdsong-resampled-train-audio-00\",\n    \"../input/birdsong-resampled-train-audio-01\",\n    \"../input/birdsong-resampled-train-audio-02\",\n    \"../input/birdsong-resampled-train-audio-03\",\n    \"../input/birdsong-resampled-train-audio-04\",\n]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"norm_audios_feat = []","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Generation","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"for path in paths:\n    for root1, dirs, files in os.walk(path):\n        for d in tqdm(dirs):\n            for root2, dirs, files in os.walk(os.path.join(root1, d)):\n                for file in files:\n                    y , sr = librosa.load(os.path.join(root2, file),sr=None)\n                    feature_vector = get_feature_vector(y, sr)\n                    norm_audios_feat.append(feature_vector)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(len(norm_audios_feat))\nprint(len(norm_audios_feat[0]))\nprint(norm_audios_feat[1:10])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Saving the features as csv-file and as pickle-file.","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"import csv\n\noutput = \"featcsv.csv\"\nheader =[\n    \"chroma_stft\",\n    \"spectral_centroid\",\n    \"spectral_bandwidth\",\n    \"spectral_rolloff\",\n    \"mfcc\",\n    \"chroma_cqt\",\n    \"chroma_cens\",\n    \"melspectrogram\",\n    \"spectral_contrast\",\n    \"poly_features\",\n    \"tonnetz\",\n    \"tempogram\",\n    \"fourier_tempogram\",\n    \"rms\",\n    \"zero_crossing_rate\",\n    \"spectral_flatness\",\n]\n\nwith open(norm_output, \"+w\") as f:\n   csv_writer = csv.writer(f, delimiter = \",\")\n   csv_writer.writerow(header)\n   csv_writer.writerows(norm_audios_feat)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import pickle\n\nwith open(\"features.pickle\", \"wb\") as file:\n    pickle.dump(norm_audios_feat, file)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}