{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nimport librosa\nimport librosa.display\n\nimport IPython.display as idp\n\n\npd.set_option('display.max_columns', None)\nimport warnings\nwarnings.filterwarnings('ignore')\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-03-22T11:44:11.735693Z","iopub.execute_input":"2022-03-22T11:44:11.736435Z","iopub.status.idle":"2022-03-22T11:44:14.101956Z","shell.execute_reply.started":"2022-03-22T11:44:11.7364Z","shell.execute_reply":"2022-03-22T11:44:14.100762Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Making a Dataset from Audio Files\n<font size=4>Referred to Andrada's [GTZAN Dataset](https://www.kaggle.com/andradaolteanu/gtzan-dataset-music-genre-classificat) and her [notebook](https://www.kaggle.com/andradaolteanu/work-w-audio-data-visualise-classify-recommend)\n\n    \nDataset from this notebook is here:\nhttps://www.kaggle.com/datasets/satoshiss/music-classification-data-pog-series2 </font>","metadata":{}},{"cell_type":"code","source":"train_df = pd.read_csv('../input/kaggle-pog-series-s01e02/train.csv')\ntest_df = pd.read_csv('../input/kaggle-pog-series-s01e02/test.csv')\n\ngenre = pd.read_csv('../input/kaggle-pog-series-s01e02/genres.csv')","metadata":{"execution":{"iopub.status.busy":"2022-03-22T11:44:14.104249Z","iopub.execute_input":"2022-03-22T11:44:14.104593Z","iopub.status.idle":"2022-03-22T11:44:14.186847Z","shell.execute_reply.started":"2022-03-22T11:44:14.104548Z","shell.execute_reply":"2022-03-22T11:44:14.185972Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y,sr = librosa.load('../input/kaggle-pog-series-s01e02/train/000037.ogg')\nprint('y:',y,'\\n')\nprint('y shape:',np.shape(y),'\\n')\nprint('Sample Rate (KHz):',sr, '\\n')\n\nprint('Length of Audio:', len(y)/sr)\n","metadata":{"execution":{"iopub.status.busy":"2022-03-22T11:44:15.310704Z","iopub.execute_input":"2022-03-22T11:44:15.311025Z","iopub.status.idle":"2022-03-22T11:44:17.657118Z","shell.execute_reply.started":"2022-03-22T11:44:15.310992Z","shell.execute_reply":"2022-03-22T11:44:17.656058Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"librosa.key_to_notes(key='C:maj')","metadata":{"execution":{"iopub.status.busy":"2022-03-22T11:38:56.521291Z","iopub.execute_input":"2022-03-22T11:38:56.521787Z","iopub.status.idle":"2022-03-22T11:38:56.532681Z","shell.execute_reply.started":"2022-03-22T11:38:56.521744Z","shell.execute_reply":"2022-03-22T11:38:56.531527Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tempo, beats = librosa.beat.beat_track(y=y, sr=sr)","metadata":{"execution":{"iopub.status.busy":"2022-03-22T11:38:56.534153Z","iopub.execute_input":"2022-03-22T11:38:56.534462Z","iopub.status.idle":"2022-03-22T11:38:56.773356Z","shell.execute_reply.started":"2022-03-22T11:38:56.534384Z","shell.execute_reply":"2022-03-22T11:38:56.772324Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.mean(beats)","metadata":{"execution":{"iopub.status.busy":"2022-03-22T11:38:56.775043Z","iopub.execute_input":"2022-03-22T11:38:56.775717Z","iopub.status.idle":"2022-03-22T11:38:56.782965Z","shell.execute_reply.started":"2022-03-22T11:38:56.775666Z","shell.execute_reply":"2022-03-22T11:38:56.781874Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pitches = ['C','C#','D','D#','E','F','F#','G','G#','A','A#','B']\n\nkey = librosa.feature.chroma_stft(y=y,sr=sr).sum(axis=1).argmax()\n\nprint(pitches[key])\n\nif librosa.feature.chroma_stft(y=y,sr=sr).sum(axis=1)[(key+3)%12] > librosa.feature.chroma_stft(y=y,sr=sr).sum(axis=1)[(key+4)%12]:\n     print('minor')\nelse:\n    print('Major')\n\n\n#key of A# \n\n\n","metadata":{"execution":{"iopub.status.busy":"2022-03-22T11:44:19.542854Z","iopub.execute_input":"2022-03-22T11:44:19.543142Z","iopub.status.idle":"2022-03-22T11:44:19.920259Z","shell.execute_reply.started":"2022-03-22T11:44:19.54311Z","shell.execute_reply":"2022-03-22T11:44:19.919226Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"librosa.feature.chroma_stft(y=y,sr=sr).sum(axis=1)","metadata":{"execution":{"iopub.status.busy":"2022-03-22T11:38:57.161373Z","iopub.execute_input":"2022-03-22T11:38:57.161885Z","iopub.status.idle":"2022-03-22T11:38:57.30723Z","shell.execute_reply.started":"2022-03-22T11:38:57.16184Z","shell.execute_reply":"2022-03-22T11:38:57.306194Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"idp.display(idp.Audio('../input/kaggle-pog-series-s01e02/train/000037.ogg'))","metadata":{"execution":{"iopub.status.busy":"2022-03-22T11:38:57.309011Z","iopub.execute_input":"2022-03-22T11:38:57.309531Z","iopub.status.idle":"2022-03-22T11:38:57.344208Z","shell.execute_reply.started":"2022-03-22T11:38:57.309473Z","shell.execute_reply":"2022-03-22T11:38:57.343191Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def feature_extract(row):\n    filepath = row['filepath']\n    ls_mean = []\n    ls_var =[]\n    \n    try:\n        y,sr = librosa.load(f'../input/kaggle-pog-series-s01e02/{filepath}',res_type='kaiser_fast')\n        \n        length = len(y)/sr\n        mean_stft = np.mean(librosa.feature.chroma_stft(y=y,sr=sr))\n        var_stft = np.var(librosa.feature.chroma_stft(y=y,sr=sr))\n        tempo = librosa.beat.tempo(y,sr=sr)[0]\n        \n        S,phase = librosa.magphase(librosa.stft(y))\n        rms = librosa.feature.rms(S=S)\n        rms_mean = np.mean(rms)\n        rms_var = np.var(rms)\n        \n        centroid = librosa.feature.spectral_centroid(S=S)\n        centroid_mean = np.mean(centroid)\n        centroid_var = np.var(centroid)\n        \n        bandwidth = librosa.feature.spectral_bandwidth(S=S)\n        bandwidth_mean = np.mean(bandwidth)\n        bandwidth_var = np.var(bandwidth)\n        \n        rolloff = librosa.feature.spectral_rolloff(y=y,sr=sr,roll_percent=0.85)\n        rolloff_mean = np.mean(rolloff)\n        rolloff_var = np.var(rolloff)\n        \n        zerocrossing = librosa.feature.zero_crossing_rate(y=y)\n        crossing_mean = np.mean(zerocrossing)\n        crossing_var = np.var(zerocrossing)\n        \n        y_harmonic = librosa.effects.harmonic(y=y)\n        harmonic_mean = np.mean(y_harmonic)\n        harmonic_var = np.var(y_harmonic)\n        \n        contrast = librosa.feature.spectral_contrast(S=S,sr=sr)\n        contrast_mean = np.mean(contrast)\n        contrast_var = np.var(contrast)\n\n        mfcc= librosa.feature.mfcc(y=y,sr=sr)\n        for i in range(0,20):\n            ls_mean.append(np.mean(mfcc[i]))\n            ls_var.append(np.var(mfcc[i]))\n            \n        key = librosa.feature.chroma_stft(y=y,sr=sr).sum(axis=1).argmax()\n        key_name = pitches[librosa.feature.chroma_stft(y=y,sr=sr).sum(axis=1).argmax()]\n        \n        if librosa.feature.chroma_stft(y=y,sr=sr).sum(axis=1)[(key+3)%12] > librosa.feature.chroma_stft(y=y,sr=sr).sum(axis=1)[(key+4)%12]:\n             scale = 'minor'\n        else:\n             scale = 'Major'\n        \n    except:\n        length = 0\n        mean_stft =0\n        var_stft = 0\n        tempo=0\n        rms_mean =0 \n        rms_var= 0\n        centroid_mean=0\n        centroid_var=0\n        bandwidth_mean =0\n        bandwidth_var=0\n        rolloff_mean = 0\n        rolloff_var = 0\n        crossing_mean = 0\n        crossing_var = 0\n        harmonic_mean=0\n        harmonic_var =0\n        contrast_mean = 0\n        contrast_var =0\n        key = 0\n        key_name=0\n        scale =0\n        \n        for i in range(0,20):\n            ls_mean.append(0) \n            ls_var.append(0)\n        \n    return [length,mean_stft,var_stft,tempo,rms_mean,rms_var,centroid_mean,centroid_var,\\\nbandwidth_mean,bandwidth_var,rolloff_mean,rolloff_var, crossing_mean,crossing_var,\\\nharmonic_mean,harmonic_var,contrast_mean,contrast_var,key,key_name,scale,ls_mean[0],ls_var[0],ls_mean[1],ls_var[1],ls_mean[2],ls_var[2],\\\nls_mean[3],ls_var[3],ls_mean[4],ls_var[4],ls_mean[5],ls_var[5],ls_mean[6],ls_var[6],ls_mean[7],ls_var[7],ls_mean[8],ls_var[8],\\\nls_mean[9],ls_var[9],ls_mean[10],ls_var[10],ls_mean[11],ls_var[11],ls_mean[12],ls_var[12],ls_mean[13],ls_var[13],ls_mean[14],ls_var[14],\\\nls_mean[15],ls_var[15],ls_mean[16],ls_var[16],ls_mean[17],ls_var[17],ls_mean[18],ls_var[18],ls_mean[19],ls_var[19]]","metadata":{"execution":{"iopub.status.busy":"2022-03-22T11:44:25.788215Z","iopub.execute_input":"2022-03-22T11:44:25.788501Z","iopub.status.idle":"2022-03-22T11:44:25.814967Z","shell.execute_reply.started":"2022-03-22T11:44:25.788469Z","shell.execute_reply":"2022-03-22T11:44:25.813989Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time \n\ntrain_df[['length','mean_stft','var_stft','tempo','rms_mean','rms_var','centroid_mean','centroid_var',\\\n'bandwidth_mean','bandwidth_var','rolloff_mean','rolloff_var', 'crossing_mean','crossing_var',\\\n'harmonic_mean','harmonic_var','contrast_mean','contrast_var','key','key_name','scale','mfcc1_mean','mfcc1_var','mfcc2_mean','mfcc2_var','mfcc3_mean','mfcc3_var','mfcc4_mean','mfcc4_var',\\\n        'mfcc5_mean','mfcc5_var','mfcc6_mean','mfcc6_var','mfcc7_mean','mfcc7_var','mfcc8_mean','mfcc8_var',\\\n        'mfcc9_mean','mfcc9_var','mfcc10_mean','mfcc10_var','mfcc11_mean','mfcc11_var','mfcc12_mean','mfcc12_var',\\\n        'mfcc13_mean','mfcc13_var','mfcc14_mean','mfcc14_var','mfcc15_mean','mfcc15_var','mfcc16_mean','mfcc16_var',\\\n        'mfcc17_mean','mfcc17_var','mfcc18_mean','mfcc18_var','mfcc19_mean','mfcc19_var','mfcc20_mean','mfcc20_var']] = train_df.iloc[:10].apply(feature_extract,axis=1,result_type='expand')","metadata":{"execution":{"iopub.status.busy":"2022-03-22T11:44:27.6937Z","iopub.execute_input":"2022-03-22T11:44:27.693988Z","iopub.status.idle":"2022-03-22T11:45:02.514489Z","shell.execute_reply.started":"2022-03-22T11:44:27.693958Z","shell.execute_reply":"2022-03-22T11:45:02.513536Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.head(10)","metadata":{"execution":{"iopub.status.busy":"2022-03-22T11:45:02.516498Z","iopub.execute_input":"2022-03-22T11:45:02.51698Z","iopub.status.idle":"2022-03-22T11:45:02.603807Z","shell.execute_reply.started":"2022-03-22T11:45:02.516944Z","shell.execute_reply":"2022-03-22T11:45:02.602808Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from glob import glob\ntrain_files = glob('../input/kaggle-pog-series-s01e02/train/*.ogg')\nprint(len(train_df),len(train_files))\n\ntest_files = glob('../input/kaggle-pog-series-s01e02/test/*.ogg')\nprint(len(test_df),len(test_files))","metadata":{"execution":{"iopub.status.busy":"2022-03-22T11:39:31.308693Z","iopub.execute_input":"2022-03-22T11:39:31.308923Z","iopub.status.idle":"2022-03-22T11:39:32.333683Z","shell.execute_reply.started":"2022-03-22T11:39:31.308894Z","shell.execute_reply":"2022-03-22T11:39:32.33252Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#expected time for training data\nprint((19922*4.2 /60 /60, 5078*4.2/60/60))\nprint(f'Train: 23 hours,{round(0.2423*60)} min')\nprint(f'Test: 5 hours, {round(0.92433*60)} min')\nprint('total: 29 hours 10 mins')\n\n","metadata":{"execution":{"iopub.status.busy":"2022-03-22T11:39:32.335231Z","iopub.execute_input":"2022-03-22T11:39:32.335662Z","iopub.status.idle":"2022-03-22T11:39:32.343825Z","shell.execute_reply.started":"2022-03-22T11:39:32.33561Z","shell.execute_reply":"2022-03-22T11:39:32.342684Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#%%time \n\n#train_df[['length','mean_stft','var_stft','tempo','rms_mean','rms_var','centroid_mean','centroid_var',\\\n#'bandwidth_mean','bandwidth_var','rolloff_mean','rolloff_var', 'crossing_mean','crossing_var',\\\n#'harmonic_mean','harmonic_var','contrast_mean','contrast_var','key','key_name','scale','mfcc1_mean','mfcc1_var','mfcc2_mean','mfcc2_var','mfcc3_mean','mfcc3_var','mfcc4_mean','mfcc4_var',\\\n#        'mfcc5_mean','mfcc5_var','mfcc6_mean','mfcc6_var','mfcc7_mean','mfcc7_var','mfcc8_mean','mfcc8_var',\\\n#        'mfcc9_mean','mfcc9_var','mfcc10_mean','mfcc10_var','mfcc11_mean','mfcc11_var','mfcc12_mean','mfcc12_var',\\\n#        'mfcc13_mean','mfcc13_var','mfcc14_mean','mfcc14_var','mfcc15_mean','mfcc15_var','mfcc16_mean','mfcc16_var',\\\n#        'mfcc17_mean','mfcc17_var','mfcc18_mean','mfcc18_var','mfcc19_mean','mfcc19_var','mfcc20_mean','mfcc20_var']] = train_df.iloc[10000:15000].apply(feature_extract,axis=1,result_type='expand')","metadata":{"execution":{"iopub.status.busy":"2022-03-22T11:46:23.16174Z","iopub.execute_input":"2022-03-22T11:46:23.162075Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#train_df.to_csv('train_features_15000.csv')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#%%time \n\n#test_df[['length','mean_stft','var_stft','tempo','rms_mean','rms_var','centroid_mean','centroid_var',\\\n#'bandwidth_mean','bandwidth_var','rolloff_mean','rolloff_var', 'crossing_mean','crossing_var',\\\n#'harmonic_mean','harmonic_var','contrast_mean','contrast_var','key','key_name','scale','mfcc1_mean','mfcc1_var','mfcc2_mean','mfcc2_var','mfcc3_mean','mfcc3_var','mfcc4_mean','mfcc4_var',\\\n#        'mfcc5_mean','mfcc5_var','mfcc6_mean','mfcc6_var','mfcc7_mean','mfcc7_var','mfcc8_mean','mfcc8_var',\\\n#        'mfcc9_mean','mfcc9_var','mfcc10_mean','mfcc10_var','mfcc11_mean','mfcc11_var','mfcc12_mean','mfcc12_var',\\\n#        'mfcc13_mean','mfcc13_var','mfcc14_mean','mfcc14_var','mfcc15_mean','mfcc15_var','mfcc16_mean','mfcc16_var',\\\n#        'mfcc17_mean','mfcc17_var','mfcc18_mean','mfcc18_var','mfcc19_mean','mfcc19_var','mfcc20_mean','mfcc20_var']] = test_df.apply(feature_extract,axis=1,result_type='expand')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#test_df.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#test_df.to_csv('test_features.csv')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}}]}