{"cells":[{"metadata":{},"cell_type":"markdown","source":"<div class=\"cell border-box-sizing text_cell rendered\"><div class=\"prompt input_prompt\">\n</div>\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<h1 id=\"Free-Sound-Cloud-Audio-Classification-Challange\">Free Sound Cloud Audio Classification Challange<a class=\"anchor-link\" href=\"https://www.kaggle.com/ashishpatel26/audio-classification?scriptVersionId=12940645#Free-Sound-Cloud-Audio-Classification-Challange\" target=\"_self\">¶</a></h1><p><img src=\"https://upload.wikimedia.org/wikipedia/commons/3/3c/Freesound_project_website_logo.png\" alt=\"\"></p>\n<h1 style=\"text-align:center;\"> Project Model</h1><p>Input file : <strong>Audio Wave file</strong><br>\nOutput file : <strong>Label</strong>\n<img src=\"https://storage.googleapis.com/kaggle-media/competitions/freesound/task2_freesound_audio_tagging.png\" alt=\"\"></p>\n\n</div>\n</div>\n</div>"},{"metadata":{"toc":true},"cell_type":"markdown","source":"<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n<div class=\"toc\"><ul class=\"toc-item\"><li><ul class=\"toc-item\"><li><span><a href=\"#Loading-an-audio-file\" data-toc-modified-id=\"Loading-an-audio-file-0.1\"><span class=\"toc-item-num\">0.1&nbsp;&nbsp;</span>Loading an audio file</a></span></li><li><span><a href=\"#Playing-Audio\" data-toc-modified-id=\"Playing-Audio-0.2\"><span class=\"toc-item-num\">0.2&nbsp;&nbsp;</span>Playing Audio</a></span></li><li><span><a href=\"#Visualizing-Audio\" data-toc-modified-id=\"Visualizing-Audio-0.3\"><span class=\"toc-item-num\">0.3&nbsp;&nbsp;</span>Visualizing Audio</a></span><ul class=\"toc-item\"><li><span><a href=\"#Waveform\" data-toc-modified-id=\"Waveform-0.3.1\"><span class=\"toc-item-num\">0.3.1&nbsp;&nbsp;</span>Waveform</a></span></li><li><span><a href=\"#Spectrogram\" data-toc-modified-id=\"Spectrogram-0.3.2\"><span class=\"toc-item-num\">0.3.2&nbsp;&nbsp;</span>Spectrogram</a></span></li><li><span><a href=\"#Log-Frequency-axis\" data-toc-modified-id=\"Log-Frequency-axis-0.3.3\"><span class=\"toc-item-num\">0.3.3&nbsp;&nbsp;</span>Log Frequency axis</a></span></li></ul></li><li><span><a href=\"#Creating-an-audio-signal\" data-toc-modified-id=\"Creating-an-audio-signal-0.4\"><span class=\"toc-item-num\">0.4&nbsp;&nbsp;</span>Creating an audio signal</a></span></li><li><span><a href=\"#Playing-the-sound\" data-toc-modified-id=\"Playing-the-sound-0.5\"><span class=\"toc-item-num\">0.5&nbsp;&nbsp;</span>Playing the sound</a></span></li><li><span><a href=\"#Saving-the-signal\" data-toc-modified-id=\"Saving-the-signal-0.6\"><span class=\"toc-item-num\">0.6&nbsp;&nbsp;</span>Saving the signal</a></span></li></ul></li><li><span><a href=\"#Feature-Extraction\" data-toc-modified-id=\"Feature-Extraction-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Feature Extraction</a></span><ul class=\"toc-item\"><li><span><a href=\"#1.-Zero-Crossing-Rate\" data-toc-modified-id=\"1.-Zero-Crossing-Rate-1.1\"><span class=\"toc-item-num\">1.1&nbsp;&nbsp;</span>1. Zero Crossing Rate</a></span></li><li><span><a href=\"#2.Spectral-Centroid\" data-toc-modified-id=\"2.Spectral-Centroid-1.2\"><span class=\"toc-item-num\">1.2&nbsp;&nbsp;</span>2.Spectral Centroid</a></span></li><li><span><a href=\"#3.Spectral-Rolloff\" data-toc-modified-id=\"3.Spectral-Rolloff-1.3\"><span class=\"toc-item-num\">1.3&nbsp;&nbsp;</span>3.Spectral Rolloff</a></span></li><li><span><a href=\"#4.MFCC\" data-toc-modified-id=\"4.MFCC-1.4\"><span class=\"toc-item-num\">1.4&nbsp;&nbsp;</span>4.MFCC</a></span></li><li><span><a href=\"#Feature-Scaling\" data-toc-modified-id=\"Feature-Scaling-1.5\"><span class=\"toc-item-num\">1.5&nbsp;&nbsp;</span>Feature Scaling</a></span></li><li><span><a href=\"#Chroma-Frequencies\" data-toc-modified-id=\"Chroma-Frequencies-1.6\"><span class=\"toc-item-num\">1.6&nbsp;&nbsp;</span>Chroma Frequencies</a></span></li></ul></li></ul></div>"},{"metadata":{},"cell_type":"markdown","source":"## Loading an audio file"},{"metadata":{"trusted":true},"cell_type":"code","source":"import warnings\nwarnings.filterwarnings('ignore')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import librosa\naudio_path = '../input/train_curated/0006ae4e.wav'\nx , sr = librosa.load(audio_path)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Playing Audio\nUsing IPython.display.Audio, to play the audio"},{"metadata":{"trusted":true},"cell_type":"code","source":"import IPython.display as ipd\nipd.Audio(audio_path)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"You can even use an mp3 or a WMA format for the audio example."},{"metadata":{},"cell_type":"markdown","source":"## Visualizing Audio\n\n### Waveform\nWe can plot the audio array using librosa.display.waveplot:\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"%matplotlib inline\nimport sklearn\nimport matplotlib.pyplot as plt\nimport librosa.display\n\nplt.figure(figsize=(20, 5))\nlibrosa.display.waveplot(x, sr=sr)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Here, we have the plot the amplitude envelope of a waveform."},{"metadata":{},"cell_type":"markdown","source":"### Spectrogram\nWe can also display a spectrogram using librosa.display.specshow."},{"metadata":{"trusted":true},"cell_type":"code","source":"X = librosa.stft(x)\nXdb = librosa.amplitude_to_db(abs(X))\nplt.figure(figsize=(20, 5))\nlibrosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='hz')\nplt.colorbar()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Log Frequency axis"},{"metadata":{"trusted":true},"cell_type":"code","source":"librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='log')\nplt.colorbar()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Creating an audio signal\nLet us now create an audio signal at 220Hz. We know an audio signal is a numpy array, so we shall create one and pass it on to the audio function.\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nsr = 22050 # sample rate\nT = 5.0    # seconds\nt = np.linspace(0, T, int(T*sr), endpoint=False) # time variable\nx = 0.5*np.sin(2*np.pi*220*t)# pure sine wave at 220 Hz\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Playing the sound\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"ipd.Audio(x, rate=sr) # load a NumPy array","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Saving the signal\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"librosa.output.write_wav('../tone_440.wav', x, sr) # writing wave file in tone440.wav format","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Feature Extraction"},{"metadata":{"trusted":true},"cell_type":"code","source":"x, sr = librosa.load('../input/train_noisy/000b6cfb.wav')\nipd.Audio(x, rate=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Plot the signal:\nplt.figure(figsize=(20, 5))\nlibrosa.display.waveplot(x, sr=sr)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## 1. Zero Crossing Rate"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Zooming in\nn0 = 9000\nn1 = 9100\nplt.figure(figsize=(20, 5))\nplt.plot(x[n0:n1])\nplt.grid()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"I count 6 zero crossings. Let's compute the zero crossings using librosa."},{"metadata":{"trusted":true},"cell_type":"code","source":"zero_crossings = librosa.zero_crossings(x[n0:n1], pad=False)\nzero_crossings.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(sum(zero_crossings))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## 2.Spectral Centroid"},{"metadata":{"trusted":true},"cell_type":"code","source":"spectral_centroids = librosa.feature.spectral_centroid(x, sr=sr)[0]\nspectral_centroids.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Computing the time variable for visualization\nplt.figure(figsize=(20,5))\nframes = range(len(spectral_centroids))\nt = librosa.frames_to_time(frames)\n\n# Normalising the spectral centroid for visualisation\ndef normalize(x, axis=0):\n    return sklearn.preprocessing.minmax_scale(x, axis=axis)\n\n#Plotting the Spectral Centroid along the waveform\nlibrosa.display.waveplot(x, sr=sr, alpha=0.4)\nplt.plot(t, normalize(spectral_centroids), color='r')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## 3.Spectral Rolloff "},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(20,5))\nspectral_rolloff = librosa.feature.spectral_rolloff(x+0.01, sr=sr)[0]\nlibrosa.display.waveplot(x, sr=sr, alpha=0.4)\nplt.plot(t, normalize(spectral_rolloff), color='r')\nplt.grid()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## 4.MFCC"},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(20,5))\nx, fs = librosa.load('../input/train_curated/0006ae4e.wav')\nlibrosa.display.waveplot(x, sr=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# MFCC\nplt.figure(figsize=(20,5))\nmfccs = librosa.feature.mfcc(x, sr=sr)\nprint(mfccs.shape)\n\nlibrosa.display.specshow(mfccs, sr=sr, x_axis='time')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Feature Scaling\nLet's scale the MFCCs such that each coefficient dimension has zero mean and unit variance:"},{"metadata":{"trusted":true},"cell_type":"code","source":"mfccs = sklearn.preprocessing.scale(mfccs, axis=1)\nprint(mfccs.mean(axis=1))\nprint(mfccs.var(axis=1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(20,8))\nlibrosa.display.specshow(mfccs, sr=sr, x_axis='time')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Chroma Frequencies"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Loadign the file\nx, sr = librosa.load('../input/train_curated/0006ae4e.wav')\nipd.Audio(x, rate=sr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"hop_length = 512\nchromagram = librosa.feature.chroma_stft(x, sr=sr, hop_length=hop_length)\nplt.figure(figsize=(15, 5))\nlibrosa.display.specshow(chromagram, x_axis='time', y_axis='chroma', hop_length=hop_length, cmap='coolwarm')","execution_count":null,"outputs":[]}],"metadata":{"gist":{"data":{"description":"Desktop/Audio Analysis in Python.ipynb","public":false},"id":""},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.0"},"toc":{"base_numbering":1,"nav_menu":{},"number_sections":true,"sideBar":true,"skip_h1_title":false,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":true,"toc_position":{"height":"calc(100% - 180px)","left":"10px","top":"150px","width":"259.901px"},"toc_section_display":true,"toc_window_display":false}},"nbformat":4,"nbformat_minor":1}