{"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":"markdown","source":"# ** Data Loading and Visualization **","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport IPython.display as ipd\nimport librosa\nimport librosa.display\nimport os\nfrom tqdm import tqdm\nimport sklearn\nimport seaborn as sns\nimport plotly.express as px\nimport warnings\nwarnings.filterwarnings(action='ignore')\n\n\nimport geopandas as gpd\nfrom shapely.geometry import Point, Polygon","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"filename = '../input/birdclef-2021/train_short_audio/acafly/XC131193.ogg'","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(18, 5))\n\n# by default librosa.load returns a sample rate of 22050\n# librosa converts input to mono, hence always \ndata, sample_rate = librosa.load(filename)\nlibrosa.display.waveplot(data, sr=sample_rate)\nprint(\"Sample Rate: \", sample_rate)\nipd.Audio(filename)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y, sr = librosa.load(filename,sr=32000, offset=None, duration=15)\n\nprint('y:', y, '\\n')\nprint('y shape:', np.shape(y), '\\n')\nprint('Sample Rate (KHz):', sr, '\\n')\n\n# Verify length of the audio\nprint('Check Len of Audio:', np.shape(y)[0]/sr)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Trim leading and trailing silence from an audio signal (silence before and after the actual audio)\naudio_acafly, _ = librosa.effects.trim(y)\n\n# the result is an numpy ndarray\nprint('Audio File:', audio_acafly, '\\n')\nprint('Audio File shape:', np.shape(audio_acafly))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Sound waves","metadata":{}},{"cell_type":"code","source":"plt.figure(figsize=(14,8))\nplt.title('Sound Waves', fontsize=16)\n\nlibrosa.display.waveplot(audio_acafly, sr , color = \"#A300F9\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Fourier Transform","metadata":{}},{"cell_type":"code","source":"n_fft = 2048 \nhop_length = 512 \n\nD_acafly= np.abs(librosa.stft(audio_acafly, n_fft = n_fft, hop_length = hop_length))\nprint('Shape of D object:', np.shape(D_acafly))\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Spectogram","metadata":{}},{"cell_type":"code","source":"DB_acafly = librosa.amplitude_to_db(D_acafly, ref = np.max)\n\nplt.figure(figsize=(14,8))\nplt.title('Spectrogram', fontsize=16)\n\nlibrosa.display.specshow(DB_acafly, sr=32000 , hop_length = hop_length,\n                         x_axis = 'time', y_axis = 'log', cmap = 'cool')\n\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"markdown","source":"# Mel Spectrogram","metadata":{}},{"cell_type":"code","source":"S_acafly = librosa.feature.melspectrogram(y, sr)\nS_DB_acafly = librosa.amplitude_to_db(S_acafly, ref=np.max)\n\nplt.figure(figsize=(14,8))\nplt.title('Mel Spectrogram', fontsize=16)\n\nlibrosa.display.specshow(S_DB_acafly, sr=32000 , hop_length = hop_length,\n                         x_axis = 'time', y_axis = 'log', cmap = 'cool')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Zero Crossing Rate","metadata":{}},{"cell_type":"code","source":"zero_acafly = librosa.zero_crossings(audio_acafly, pad=False)\nprint(\"acafly change rate is {}\".format(sum(zero_acafly)))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Harmonics and Perceptrual","metadata":{}},{"cell_type":"code","source":"y_harm_acafly, y_perc_acafly = librosa.effects.hpss(audio_acafly)\n\nplt.figure(figsize = (16, 6))\nplt.plot(y_perc_acafly, color = '#FFB100')\nplt.plot(y_harm_acafly, color = '#A300F9')\nplt.legend((\"Perceptrual\", \"Harmonics\"))\nplt.title(\"Harmonics and Perceptrual : Acafly Bird\", fontsize=16);\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Spectral Centroid","metadata":{}},{"cell_type":"code","source":"# Calculate the Spectral Centroids\nspectral_centroids = librosa.feature.spectral_centroid(audio_acafly, sr=sr)[0]\n\n# Shape is a vector\n#print('Centroids:', spectral_centroids, '\\n')\nprint('Shape of Spectral Centroids:', spectral_centroids.shape, '\\n')\n\n# Computing the time variable for visualization\nframes = range(len(spectral_centroids))\n\n# Converts frame counts to time (seconds)\nt = librosa.frames_to_time(frames)\n\nprint('frames:', frames, '\\n')\n#print('t:', t)\n\n# Function that normalizes the Sound Data\ndef normalize(x, axis=0):\n    return sklearn.preprocessing.minmax_scale(x, axis=axis)\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Plotting the Spectral Centroid along the waveform\nplt.figure(figsize = (16, 6))\nlibrosa.display.waveplot(audio_acafly, sr=sr, alpha=0.4, color = '#A300F9', lw=3)\nplt.plot(t, normalize(spectral_centroids), color='#FFB100', lw=2)\nplt.legend([\"Spectral Centroid\", \"Wave\"])\nplt.title(\"Spectral Centroid: Acafly Bird\", fontsize=16);","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Chroma Frequencies","metadata":{}},{"cell_type":"code","source":"# Increase or decrease hop_length to change how granular you want your data to be\nhop_length = 5000\n\n# Chromogram Vesspa\nchromagram = librosa.feature.chroma_stft(audio_acafly, sr=sr, hop_length=hop_length)\nprint('Chromogram Vesspa shape:', chromagram.shape)\n\nplt.figure(figsize=(16, 6))\nlibrosa.display.specshow(chromagram, x_axis='time', y_axis='chroma', hop_length=hop_length, cmap='twilight')\n\nplt.title(\"Chromogram: Acafly\", fontsize=16);","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tempo_acafly, _ = librosa.beat.beat_track(y, sr = sr)\nprint(\"BPM for Acafly is {}\".format(tempo_acafly))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Spectral Rolloff","metadata":{}},{"cell_type":"code","source":"# Spectral RollOff Vector\nspectral_rolloff = librosa.feature.spectral_rolloff(audio_acafly, sr)[0]\n\n# Computing the time variable for visualization\nframes = range(len(spectral_rolloff))\n# Converts frame counts to time (seconds)\nt = librosa.frames_to_time(frames)\n\n# The plot\nplt.figure(figsize = (16, 6))\nlibrosa.display.waveplot(audio_acafly, sr=sr, alpha=0.4, color = '#A300F9', lw=3)\nplt.plot(t, normalize(spectral_rolloff), color='#FFB100', lw=3)\nplt.legend([\"Spectral Rolloff\", \"Wave\"])\nplt.title(\"Spectral Rolloff: Acafly Bird\", fontsize=16);","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}