{"cells":[{"metadata":{},"cell_type":"markdown","source":"### Feel free to comment any suggestions or criticism you might have. Please refer to the table of contents below for structural navigation. \n## Upvote and share if you find the notebook useful! Thank you :)\n# Table of contents:\n*  [Intro](#intro)\n*  [Exploring the training data](#exp)\n*  [Analysis of \"Relevant Fields\"](#analy)\n    *  [ebird](#ebird)\n    *  [location](#location)\n    *  [recordist](#recordist)\n*  [Audio Representation](#panaly)\n    *  [Waveform or PCM](#wav)\n    *  [Spectrogram](#stft)\n*  [Audio Feature Extraction](#panaly2)\n    *  [Spectral Centroid](#sc)\n    *  [Spectral Roll-off](#srf)\n    *  [Spectral Bandwidth](#sbw)\n    *  [Spectral Flux](#sf)\n    *  [Spectral Contrast](#spc)\n    *  [Spectral Flatness](#scf)\n    *  [Zero-crossing rate](#zcr)\n    *  [Autocorrelation](#acr)\n     *  [Fundamental Frequency](#ff)\n     *  [Tempo Estimation](#tmp)\n    *  [Mel-Frequency Cepstral Coefficients](#mfcc)\n    *  [Chromogram](#chr)\n*  [References](#ref)\n*  [Further Readings](#fread)\n\n\n\n\n\n<a id='intro'></a>\n# Introduction\n\n![image1.png](data:image/jpeg;base64,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)\n\nBird vocalization includes both bird calls and bird songs. In non-technical use, bird songs are the bird sounds that are melodious to the human ear. The distinction between songs and calls is based upon complexity, length, and context. Songs are longer and more complex and are associated with territory and courtship and mating, while calls tend to serve such functions as alarms or keeping members of a flock in contact. \n\n![image2.png](https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcTjPnT44Pn2snp1K4_vd6fCV4nxZ3G6sNKwumvB0Ozwl2ClfU32&usqp=CAU)\n\nSong is usually delivered from prominent perches, although some species may sing when flying (we find such recordings in the training data).\n\n<a id='ppc'></a>\n## Purpose behind calls & songs:\n\n![image3.png](https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcTmnh5r_gp6awtDn2vaOnJQXqibzRDqWuES_VE5PJprlLoV7GoU&usqp=CAU)\n* One of the two main functions of bird song is mate attraction. Experiments also suggest that parasites and diseases may directly affect song characteristics such as song rate, which thereby act as reliable indicators of health. Therefore, a female bird may select males based on the quality of their songs and the size of their song repertoire.\n\n![image4.png](https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSemLGq1ZjK2grpBuizpAZKqmgOo1FD--inpuL1lxrvZ16XVyBw&usqp=CAU)\n* The second principal function of bird song is territory defense. Territorial birds will interact with each other using song to negotiate territory boundaries. Since song may be a reliable indicator of quality, individuals may be able to discern the quality of rivals and prevent an energetically costly fight. Song complexity is also linked to male territorial defense, with more complex songs being perceived as a greater territorial threat.\n\nCommunication through bird calls can be between individuals of the same species or even across species. Birds communicate alarm through vocalizations and movements that are specific to the threat, and bird alarms can be understood by other animal species, including other birds, in order to identify and protect against the specific threat.\n\nMany birds engage in duet calls. In some cases, the duets are so perfectly timed as to appear almost as one call(something we need to keep in mind while working on the data).\n\n","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"<a id='fr'></a>\n## Frequency range of bird calls/songs:\n\n![image.png](https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcS_6mgx4YPcspVLpMSIxER1KAkV6UCVNFrJkkVMwmPstoQUsp6n&usqp=CAU)\n\nThe range of frequencies at which birds call in an environment varies with the quality of habitat and the ambient sounds. The acoustic adaptation hypothesis predicts that narrow bandwidths, low frequencies, and long elements and inter-element intervals should be found in habitats with complex vegetation structures (which would absorb and muffle sounds), while high frequencies, broad bandwidth, high-frequency modulations (trills), and short elements and inter-elements may be expected in open habitats, without obstructive vegetation.\n","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"<a id='ps'></a>\n## The identification (classification) job for you!\n![image.png](attachment:image.png)\n\nOur sense of hearing provides us rich information about our environment with\nrespect to the locations and characteristics of sound producing objects. For\nexample, we can effortlessly assimilate the sounds of birds twittering outside\nthe window. \n\nWhile audio compression has been the most prominent application of digital\naudio processing, the gathering importance of data abundance is seeing growing applications of signal processing\nin audio segmentation and classification. Audio classification is a part of the\nlarger problem of audiovisual data handling. Audio classification is also useful as a front end\nto audio compression systems where the efficiency of coding and transmission\nis facilitated by matching the compression method to the audio type, as for\nexample, speech or music. \n\nThat is exactly what the problem description is in this competition! Identification of a wide variety of bird vocalizations in soundscape recordings which might have anthropogenic sounds (e.g., airplane overflights) or other bird and non-bird (e.g., chipmunk) calls in the background, with a particular labeled bird species in the foreground. \n","attachments":{"image.png":{"image/png":"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"}},"execution_count":null},{"metadata":{},"cell_type":"markdown","source":"<a id='evc'></a>\n## Your Evaluation Metric:\n![image1.png](https://upload.wikimedia.org/wikipedia/commons/thumb/2/26/Precisionrecall.svg/320px-Precisionrecall.svg.png)\n\nThe evaluation metric in this competition is averaged F1-score which is quite simple to understand. Briefly, the F1 score is the harmonic mean of the precision and recall, where an F1 score reaches its best value at 1 (perfect precision and recall).\n\n![image2.png](https://wikimedia.org/api/rest_v1/media/math/render/svg/3607c634303f2fd8b69ca4f9d97a491c45083cc5)\n\nIn this multiclass setup, the final F1 score is obtained by micro-averaging (biased by class frequency). Get to know about micro-averged F1-score better over [here](https://datascience.stackexchange.com/questions/15989/micro-average-vs-macro-average-performance-in-a-multiclass-classification-settin).","execution_count":null},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"import os\nimport numpy as np \nimport pandas as pd\nimport datetime as dt\nfrom sklearn import preprocessing as prep\nimport librosa as lb\nimport librosa.display as lbd\nimport librosa.feature as lbf\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport plotly.graph_objects as go\nfrom plotly.subplots import make_subplots\nimport plotly.express as px\nimport plotly.offline\nsns.set(style='darkgrid')\nplt.rcParams['figure.figsize'] = (16,8)\nimport IPython.display as ipd\nimport ipywidgets as ipw\nfrom bs4 import BeautifulSoup\nimport requests\nimport warnings\nwarnings.filterwarnings('ignore')\n\nlink = 'https://ebird.org/species/'\naudios = '../input/birdsong-recognition/train_audio/'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"train = pd.read_csv('../input/birdsong-recognition/train.csv')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<a id='exp'></a>\n# Exploring the training data\n## Excerpts from the official 'Data Description' about training data:\n\n**train_audio:** The train data consists of short recordings of individual bird calls generously uploaded by users of xenocanto.org.\n\n### The most directly relevant fields in 'train.csv' are:\n\n* **ebird_code:** a code for the bird species.\n\n* **recodist:** the user who provided the recording.\n\n* **location:** where the recording was taken. Some bird species may have local call 'dialects', so you may want to seek geographic diversity in your training data.\n\n* **date:** while some bird calls can be made year round, such as an alarm call, some are restricted to a specific season. You may want to seek temporal diversity in your training data.\n\n* **filename:** the name of the associated audio file.\n\n\n## Lets look the training data now:","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"train","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"> ### We clearly see why the 'relevant fields' are relevant. The data contains information about the whereabouts and whenabouts of the recording for every bird. We have unique files for every different recordings which is specified by the column 'filename'.\n\n## Let us look at the count and type of the data.","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"train.info()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":">### Thats good enough. Gives us idea about all the columns. Now lets move onto something more pleasing to the eyes!\n<a id='msng'></a>\n## plotly Visualization of missing data","execution_count":null},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"temp = pd.DataFrame({'Number of Missing Values': pd.Series(train.isnull().sum().sort_values(ascending=False)[:5])})\ntemp['Feature'] = temp.index; temp = temp.reset_index(drop=True)\n\n\nplotly.offline.iplot(px.bar(temp, x = 'Number of Missing Values', y = 'Feature', orientation='h', title = 'Missing Values in training data', \n                            color = 'Feature', height=400, text = 'Number of Missing Values'))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":">### No data from any relevant column is missing in the training data.\n<a id='analy'></a>\n# Analysing the \"relevant fields\" in the training data:\n<a id='ebird'></a>\n### ebird_code:","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"temp = train.groupby(['ebird_code', 'species']).count().reset_index().sort_values(by='filename',ascending=True)\n\nplotly.offline.iplot(px.bar(temp, x='filename', y='species', orientation='h', labels={'filename': 'Count', 'species':'Bird Name'}, hover_data=['species'],\n       height=1500, width=800, color = 'filename', title='Count of Data Available for different bird species'))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"> ### Almost half of the data has around 100 recordings for each bird species.\n\n## Let's explore a few birds! \n(check the code toggle to see the code)","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"col = sorted(list(train['ebird_code'].unique()))\n\nfor temp in range(2,8):\n    ## SCRAPING FOR BIRD DESCRIPTION and IMAGE URL\n    URL = str(link+col[temp]); page = requests.get(URL)\n    soup = BeautifulSoup(page.content, 'html.parser'); result = soup.find_all('p', class_='u-stack-sm')\n    res = soup.find_all('figure', class_='MediaFeed-item'); \n    img = res[0].find_all('img')[0].get('src'); description = result[0].text\n\n    ## PUTTING EVERYTHING IN A VARIABLE\n    ad = os.listdir(str(audios+col[temp]))[10]\n    df = train[train['filename']==ad].reset_index()\n    spec = str(df['species'][0]+' ('+df['sci_name'][0] + ')')\n    loc = df['location'][0]\n    time = str(df['date'][0]+' (yyyy-mm-dd) '+df['time'][0]+' hrs')\n    recordist = df['recordist'][0]\n    elev = df['elevation'][0]\n\n    ## DISPLAYING IN THE NOTEBOOK\n    ipd.display(ipd.HTML('<head> <body> <h1 style = \"font-size:46px; font-family:sans; background-color:Lavender;\"> {} </h1>\\\n                            <p style=\"text-align:left; color:black; font-family:verdana; font-size:19px;\"> <br> <img src= {} \\\n                            style=\"float:right;width:50%;height:50%;\"> <br> &emsp; {}<br><br><b> Located at:</b>{}<br><b>Date & Time \\\n                            of recording:</b> {}<br><b>Elevation: </b>{}<br><b>Recordist: </b>{}</br></p>\\\n                            <h3 style = \"font-family:verdana; font-size:26px\">Audio:</h3> </body></head>'.format(spec,img,description,loc,time,elev,recordist)))\n    ipd.display(ipd.Audio(str(audios+col[temp]+'/'+ad), embed=True))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"## WILL GIVE UP A WARNING TO USE 'audioread' INSTEAD. SUPPRESS IT BY 'warnings.filterwarnings'.\n## GIVES WARNING AS LIBROSA IS NOT CAPABLE OF READING '.mp3' FILES AND FALLS BACK TO 'audioread' \n## WHEN GIVEN ONE. TAKES A BIT TIME TO LOAD.\nad = 'XC233159.mp3'\nx, sr = lb.load(str(audios+col[temp]+'/'+ad))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"\n# Pausing analysis for audio represention and feature generation of 'American Redstart (Setophaga ruticilla) '\n<a id='panaly'></a>\n# Audio representation:\n<a id='wav'></a>\n* ## Waveform or PCM\nSpeech signals are sound signals, defined as pressure variations travelling through the air. These variations in pressure can be described as waves and correspondingly they are often called sound waves.\n\nWe assume that the speech signals have been captured by a microphone and converted to a digital form. A speech signal is then represented by a sequence of numbers Xn , which represent the relative air pressure at time-instant n∈N. This representation is known as pulse code modulation often abbreviated as PCM. \nThe accuracy of this representation depends on\n* the Sampling Frequency(or Sampling rate)\n* the Accuracy and Distribution of Amplitudes of Xn\n\n\n\n### 1. Sampling rate:\n\nSampling is a method of reducing continuous-time signal to discrete-time signal. **A digital audio signal is obtained by the suitable sampling and quantization\nof the electrical output of the microphone.**\n\nUsually speech signals reside in the range 300 Hz to 3500 Hz, so the according sampling rate 'Fs' is determined by the Nyquist frequency, which is half the sampling rate Fs and defines the upper end of the largest bandwidth [0,Fs/2] which can be uniquely represented. So, for a Narrow-band sampling rate is determined to be 8 kHz. \n\nBut, Some consonants, especially fricatives like /s/, however contain substantial energy above 4kHz, whereby narrow-band is not sufficient for high quality speech. Most energy however remains below 8kHz such that wide-band, that is, a sampling rate of 16 kHz is sufficient for most purposes. Super-wide band and full band further correspond to sampling rates of 32 kHz and 44.1 kHz. \n\nRead more about [Sampling](https://en.wikipedia.org/wiki/Sampling_(signal_processing)) and [Nyquist frequency](https://en.wikipedia.org/wiki/Nyquist_frequency).\n\n### 2. Accuracy and distribution of steps on the amplitude axis\n\nIn digital representations of a signal we are forced to use a finite number of steps to describe the amplitude which is **we must quantize the signal to some discrete levels.**\n\nTwo types are prevalent:\n* #### Linear quantization: \n\n![image.png](attachment:image.png)\n \n Linear quantization with a step size Δq would correspond to defining the quantized signal as: \n\n  \\\\(\\hat x = \\Delta q\\,\\cdot {\\mathrm{round}}(x/\\Delta q)\\\\)\n  \n  The intermediate representation, y=round(x/Δq), can then be taken to represent, for example, signed 16-bit integers.\n  \n\n ","attachments":{"image.png":{"image/png":"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"}},"execution_count":null},{"metadata":{},"cell_type":"markdown","source":"* #### Logarithmic quantization and mu-law: \n\n  To retain equal accuracy for loud and weak signals, we could quantize on an logarithmic scale as \n\n  \\\\(\\hat x = {\\mathrm{sign}}(x)\\cdot\\exp\\left[\n\\Delta q\\cdot\\,{\\mathrm{round}}\n\\left(\\log\\left(|x|\\right)/\\Delta q\\right)\n\\right]\\\\)\n                                               \n  Benefit of this approach would be that we can encode signals on a much larger range and the quantization accuracy is relative to the signal magnitude. But, very small values prove to be fatal.\n  \n  ![image.png](attachment:image.png)\n  \n  \n  A practical solution to this problem is quantization with the mu-law algorithm, which defines a modified logarithm as\n\n  \\\\(F(x):={\\mathrm{sign}}(x)\\cdot\\,\\frac{\\log\\left(1+\\mu|x|\\right)}{\\left(1+\\mu\\right)}\\\\)\n                                                   \n  By replacing the logarithm with F(x), we retain the properties of the logarithm for large x, but avoid the problems when x is small.","attachments":{"image.png":{"image/png":"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"}},"execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"lbd.waveplot(x,sr=sr); \nplt.title('Waveform of the audio recording:', size=20); plt.ylabel('Amplitude'); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<a id='stft'></a>\n* ## Spectrogram & STFT\nWe have a notion of what a high or low pitch means. Pitch refers to our perception of the frequency of a sound. The Fourier spectrum of a signal reveals such frequency content. This makes the spectrum an intuitively pleasing domain to work in, because we can visually examine signals. \n\nThe [Fourier transform](https://en.wikipedia.org/wiki/Fourier_transform) of a function of time is a complex-valued function of frequency, whose magnitude (absolute value) represents the amount of that frequency present in the original function. \n\nBy splitting the signal into shorter segments, we can focus on signal properties at a particular point in time. By [*windowing*](https://sites.uci.edu/computermusic/2013/05/14/windowing-an-audio-signal/) (refers to splitting the input signal into temporal segments) and taking the discrete Fourier transform (DFT) of each window, we obtain the short-time Fourier transform (STFT) of the signal. Specifically, for an input signal xn and window wn, the transform is defined as\n\n![image.png](attachment:image.png)\n\nThe STFT is one of the most frequently used tools in speech analysis and processing. It describes the evolution of frequency components over time. Like the spectrum itself, one of the benefits of STFTs is that its parameters have a physical and intuitive interpretation.\n\nThe output of the STFT is complex-valued (though where the spectrum is a vector, the STFT output is a matrix). As a consequence, we cannot directly visualize the complex-valued output. Instead, STFTs are usually visualized using their log-spectra, \\\\(20log_{10}(X(h,k))\\\\). Such 2 dimensional log-spectra can then be visualized with a heat-map known as a **Spectrogram.**","attachments":{"image.png":{"image/png":"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"}},"execution_count":null},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"X = lb.stft(x)\n\nlbd.specshow(lb.amplitude_to_db(abs(X)),sr=sr,x_axis='time', y_axis='hz')\nplt.xlabel('Time (in min:sec)'); plt.title('Short-time Fourier transform (Spectrogram):', size=20); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"> ### We get a rough estimation of pitch seems to be 5000-5500 Hz from the graph. We will calculate the pitch ahead and check our rough estimate.","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"<a id='panaly2'></a>\n# Feature study of Audio for Classification\n\nWhile the spectrogram and auditory signal representations discussed in the\nprevious section are good for visualization of audio content, they have a high\ndimensionality which makes them unsuitable for direct application to classification.\nIdeally, we would like to extract low-dimensional features from\nthese representations (or even directly from the acoustical signal) which\nretain only the important distinctive characteristics of the intended audio\nclasses.\n\nA well-designed\nset of features for a given audio categorization task would make for robust\nclassification with reasonable amounts of training data. \n\nYears of research on audio signal features has given 2\nbroad categories of features: \n*  Physical Features \n    *  [Spectral Centroid](#sc)\n    *  [Spectral Roll-off](#srf)\n    *  [Spectral Bandwidth](#sbw)\n    *  [Spectral Flux](#sf)\n    *  [Spectral Contrast](#spc)\n    *  [Spectral Flatness](#scf)\n    *  [Zero-crossing rate](#zcr)\n    *  [Autocorrelation](#acr)\n     *  [Fundamental Frequency](#ff)\n     *  [Tempo Estimation](#tmp)\n    *  [Mel-Frequency Cepstral Coefficients](#mfcc)\n    *  [Chromogram](#chr)\n*  Perceptual Features\n    *  Loudness:\n           \n      Loudness indicates the sensation of strength of signal. It can be approximately related to intensity as \n      \n      \\\\(L=kI^{\\alpha}\\\\)\n      \n      Value of \\\\(\\alpha\\\\) is proven to be 0.23 in case of noise.\n      \n    *  Pitch:\n    \n      Pitch is a perceptual property of sounds that allows their ordering on a frequency-related scale, or more commonly, pitch is the quality that makes it possible to judge sounds as \"higher\" and \"lower\" in the sense associated with musical melodies. ","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"<a id='sc'></a>\n\n## Spectral Centroid\nThe spectral centroid is commonly associated with the measure of the \"brightness\" of a sound.  It is widely used as an automatic measure of timbre.\n\nThis measure is obtained by evaluating the “center of gravity” using the Fourier transform’s frequency and magnitude information. It is calculated by dividing the spectrogram into frames and calculating the weighted mean for that frame. \n\n![image.png](attachment:image.png)\n\nf(n) represents the center frequency and x(n) represents the magnitude, of bin number n, corresponding to the Spectrogram.\n\nI think of it as the \"main frequency\" present in your sound at that particular *time frame* during the recording. Refer to [this](https://ccrma.stanford.edu/~unjung/AIR/areaExam.pdf) article for a deeper study into the topic.\n\n**librosa.feature.spectral_centroid** returns an array with columns equal to the number of frames present in your sample (discussed above)","attachments":{"image.png":{"image/png":"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"}},"execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"sc = lbf.spectral_centroid(x, sr=sr)[0]; frames = range(len(sc)); t = lb.frames_to_time(frames)\n\nlbd.waveplot(x, sr=sr)\nplt.title('Spectral Centroid visualized', size=25)\n## NORMALIZING THE VALUES OF SPECTRAL CENTROID BEFORE PLOTTING TO COMPARE WITH WAVEFORM\nplt.plot(t, prep.minmax_scale(sc), linewidth=0.8, color='r'); plt.show()","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"X = lb.stft(x)\n\nplt.figure(figsize=(20,8)); lbd.specshow(lb.amplitude_to_db(abs(X)),sr=sr,x_axis='time', y_axis='log')\nplt.xlabel('Time (in min:sec)'); plt.title('Spectrogram with spectral centroids:', size=25); plt.plot(t, sc, linewidth=0.8, color='black'); plt.colorbar(); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<a id='srf'></a>\n## Spectral Roll-off\n\nSpectral rolloff is the frequency below which a specified percentage of the total spectral energy, e.g. 85%, lies. It\nwas first used as feature to separate voiced and\nunvoiced signal. It is calculated as, \\\\(R_r = f[K]\\\\)\n\nwhere K is the largest bin that fullfills,\n![image.png](attachment:image.png)\n \n **librosa.feature.spectral_rolloff** computes the rolloff frequency for each frame in a signal:","attachments":{"image.png":{"image/png":"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"}},"execution_count":null},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"spectral_rolloff = lbf.spectral_rolloff(x+0.01, sr=sr)[0]\n\nlbd.waveplot(x, sr=sr)\nplt.plot(t, prep.minmax_scale(spectral_rolloff), color='r', label='Spectral Roll-off'); plt.title('Spectral Roll-off visualized', size=25); plt.legend(); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<a id='sbw'></a>\n## Spectral Bandwidth\n\nThe spectral bandwidth is defined as the extent of the power transfer function\naround the the center frequency.\n\n**librosa.feature.spectral_bandwidth** computes the order-p  spectral bandwidth:\n\\\\(\\left( \\sum_k S(k) \\left(f(k) - f_c \\right)^p \\right)^{\\frac{1}{p}}\\\\)\n\nwhere \\\\(S(k)\\\\) is the spectral magnitude at frequency bin \\\\(k\\\\), \\\\(f(k)\\\\) is the frequency at bin \\\\(k\\\\), and \\\\(f_c\\\\) is the spectral centroid. When \\\\(p=2\\\\), this is like a weighted standard deviation.","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"spectral_bandwidth = lbf.spectral_bandwidth(x+0.01, sr=sr, p=2)[0]\n\nlbd.waveplot(x,sr)\nplt.plot(t, prep.minmax_scale(spectral_bandwidth), color='r', label='Spectral Bandwidth'); plt.title('Spectral Bandwidth visualized', size=25); plt.legend(); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<a id='sf'></a>\n## Spectral Flux\nA measure of how quickly the spectrum of a signal is changing. It is calculated by computing frame-to-frame squared difference of the spectral magnitude\nvector summed across frequency as\n\n![image.png](attachment:image.png)\n\nIt provides a measure of the local spectral rate of change. A high value of\nspectral flux indicates a sudden change in spectral magnitudes and therefore\na possible segment boundary at the \\\\(r^{th}\\\\) frame.","attachments":{"image.png":{"image/png":"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"}},"execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"spectral_flux = lb.onset.onset_strength(x, sr); onset_default = lb.onset.onset_detect(x, sr, units='time')\n\nplt.plot(t, spectral_flux, label='Spectral flux'); plt.vlines(onset_default, 0, spectral_flux.max(), color='r', label='Onsets');plt.title('Spectral Flux Visualized', size=25)\nplt.legend(); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<a id='spc'></a>\n## Spectral Contrast\nEach frame of a spectrogram S is divided into sub-bands. For each sub-band, the energy contrast is estimated by comparing the mean energy in the peak energy to that of the valley energy. High contrast values generally correspond to clear, narrow-band signals, while low contrast values correspond to broad-band noise.","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"spectral_contrast = lbf.spectral_contrast(x, sr)\n\nplt.figure(figsize=(20,8)); lbd.specshow(spectral_contrast, x_axis='time'); plt.ylabel('Frequency bands'); plt.colorbar(); plt.title('Spectral contrast Visualized', size=25); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<a id='scf'></a>\n## Spectral Flatness\n The spectral flatness measure describes the noisiness versus sinusoidality of\nsignal. If there is a sinusoidal structure, the spectral flatness is zero. If the signal\nconsists mainly of noise, the spectral flatness measure is near one. It is given by:\n![image.png](attachment:image.png)","attachments":{"image.png":{"image/png":"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"}},"execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"flatness = lbf.spectral_flatness(x); \n\nplt.figure(figsize=(20,8)); lbd.specshow(flatness, x_axis='time'); plt.colorbar(); plt.title('Spectral flatness Visualized', size=25); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Not much noise in our audio.\n<a id='zcr'></a>\n## Zero-crossing rate\n\nBird song is best developed in the order Passeriformes (also known as songbirds), which includes more than half of all bird species. Some other groups are nearly voiceless, producing only percussive and rhythmic sounds. \n\nGiven such a peculiar behaviour, analysis of zero-crossing rate, which is a key feature to classify percussive sounds, becomes important. Additionally, you also get to know about the smoothness as voiced speech sounds are more smooth than unvoiced ones.\n\nZero-crossing rate is the rate of sign-changes along a signal and formally defined as \n\n![image.png](attachment:image.png)\n\nTo calculate of the zero-crossing rate of a signal you need to compare the sign of each pair of consecutive samples. In other words, for a length N signal you need O(N) operations.\n\nLets look at an example:","attachments":{"image.png":{"image/png":"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"}},"execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"p, q = 1650, 1700\nplt.figure(figsize=(16,8)); plt.plot(x[p:q]); plt.title('Zero crossing rate between {} and {}:'.format(p,q)); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":">### Looks like 20 Zero crossings to me. Lets check it out by the library function provided in librosa.","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"zc = lb.zero_crossings(x[p:q])\nzc.shape","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":">### 'librosa.zero_crossings' computed a binary mask where **True** indicates the presence of a zero crossing. To find the total number of zero crossings, we use sum:","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"print('Zero crossings: ', sum(zc))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":">### Lets find the zero-crossing rate over time:","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"zcr = lbf.zero_crossing_rate(x)\n\nplt.figure(figsize=(16,8)); plt.plot(zcr[0]); plt.title('Zero crossing rate over time:', size=25); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"A drawback of zero-crossings is that the number of zero-crossings in a segment is an integer number. A continuous-valued measure would allow more detailed analysis.\n\nHence, an alternative to the zero-crossing rate is to calculate the autocorrelation at lag-1. It can be estimated also from short segments, it is continuous-valued and arithmetic complexity is also O(N).","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"<a id='acr'></a>\n## Autocorrelation\n\nSpeech signals typically have such structure that samples near in time to each other are similar in amplitude. Samples of the signal are correlated with the preceding and following samples. Such structures are in statistics measured by covariance and correlation.\n\n\"Autocorrelation\" is used to compare a signal with a time-delayed version of itself. If a signal is periodic, then the signal will be perfectly correlated with a version of itself if the time-delay is an integer number of periods. \n\nThe autocorrelation is useful for finding repeated patterns in a signal. For example, at short lags, the autocorrelation can tell us something about the signal's fundamental frequency. For longer lags, the autocorrelation may tell us something about the tempo of a musical signal.\n\n\\\\(\\begin{split}\n\\text{autocorrelation:} & c_{k} = \\frac{E_n[x_nx_{n-k}]}{E_n[x_n^2]} = \\frac{r_k}{r_0}.\n\\end{split}\\\\)\n\nIn this equation,  k  is often called the lag parameter.  \\\\(c_{k}\\\\)  is maximized at  k=0  and is symmetric about  k.","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"ar = lb.autocorrelate(x, max_size=10000)\n\nplt.figure(figsize=(16,8)); plt.plot(ar); plt.xlim(0,10000); plt.xlabel('Lag'); plt.title('Autocorrelation over lag:', size=25); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**librosa.autocorrelate** only keeps one half of the autocorrelation function, since the autocorrelation is symmetric.\n<a id='ff'></a>\n* ### Pitch Estimation or Fundamental Frequency (F\\\\(_0\\\\)):\n    It is computed by measuring the periodicity of the time-domain waveform.\n    It may also be estimated from the signal spectrum as the frequency of the\n    first harmonic or as the spacing between harmonics of the periodic signal. \n    \n    The autocorrelation is used to find repeated patterns within a signal. A repeated pattern can correspond to a pitch period. We can, therefore, use the autocorrelation function to estimate the pitch in an audio signal.\n\n    The autocorrelation always has a maximum at zero, i.e. zero lag. We want to identify the maximum outside of the peak centered at zero. Therefore, we might choose only to search within a range of reasonable pitches:","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"## SETTING THE SEARCH RANGE OF THE PITCH\nf_hi = lb.midi_to_hz(120)\nf_lo = lb.midi_to_hz(12)\n\n## SETTING THE INVALID PITCH RANGE TO ZERO\nt_lo = sr/f_hi\nt_hi = sr/f_lo\nar[:int(t_lo)] = 0\nar[int(t_hi):] = 0","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"plt.figure(figsize=(16,8)); plt.plot(ar[:1400]); plt.title('Autocorrelation within a range (0 to 1400)', size=25); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":">### Finally, the estimated the pitch in Hertz:","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"float(sr)/ar.argmax()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":">### This goes well with our above visualization of \"Spectrogram with Spectral Centroid\" which gave us a rough estimate of pitch to be around 7300 Hz.\n\n<a id='tmp'></a>\n* ### Tempo Estimation:\n    Tempo refers to the speed of a musical piece. More precisely, tempo refers to the rate of the musical beat and is given by the reciprocal of the beat period. Tempo is defined in units of beats per minute (BPM).\n    \n    Beat is when you tap your foot when listening to music. The same thing Queen does in the beginning of 'We will Rock You' is a beat (and noise made rhythm). [Listen](https://www.youtube.com/watch?v=-tJYN-eG1zk) and know!\n    \n    We estimate tempo in three steps:\n     * Onset detection\n     * Beat tracking\n     * and finally - Tempo estimation\n     \n     \n To detect note onsets, we want to locate sudden changes in the audio signal that mark the beginning of transient regions. Often, an increase in the signal's amplitude envelope will denote an onset candidate. Novelty functions are functions which denote local changes in signal properties such as energy or spectral content.  \n \n Hence, computing the onset envelope or novelty function: ","execution_count":null},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"hop_length = 200 ## Samples to be taken per frame\nonset = lb.onset.onset_strength(x, sr=sr, hop_length=hop_length, n_fft=2048)\n\n## PLOTTING THE ONSET ENVELOPE\nframes = range(len(onset)); t = lb.frames_to_time(frames,sr,hop_length=hop_length)\n\nplt.figure(figsize=(16,8)); plt.plot(t,onset); plt.xlabel('Time (in sec)'); plt.title('Novelty Function', size=25); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":">### We can visually understand from the Novelty Function plotted above that our audio has a lot of noise comes from the background noise of nature where the audio might have been recorded.","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"S = lb.stft(onset, hop_length=1, n_fft=512)\nft = np.absolute(S)\n\nplt.figure(figsize=(16,8)); lbd.specshow(ft,sr=sr,hop_length=hop_length, x_axis='time'); plt.title('Fourier Tempogram', size=25); plt.xlabel('Time (in min:sec)'); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":">### 'librosa.feature.tempogram' implements an autocorrelation tempogram, a short-time autocorrelation of the (spectral) novelty function for us. So thats a lot less work for us we need not worry about (only till you know whats going on under the hood)!","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"tempogram = lbf.tempogram(onset_envelope=onset, sr=sr, hop_length=hop_length, win_length=400)\n\nplt.figure(figsize=(16,8)); lbd.specshow(tempogram, sr=sr, hop_length=hop_length, x_axis='time', y_axis='tempo');\nplt.title('Tempogram Visualized', size=25); plt.xlabel('Time (in min:sec)'); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":">### We will use 'librosa.beat.tempo' to estimate the global tempo in an audio file.","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"tempo = lb.beat.tempo(x, sr=sr)\nprint(tempo[0])","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"t = len(x)/float(sr)\nseconds_per_beat = 60/tempo[0]\nbeat_times = np.arange(0, t, seconds_per_beat)\n\nplt.figure(figsize=(16,8)); lbd.waveplot(x); plt.vlines(beat_times, -1, 1, color='r'); plt.title('Tempo Visualized', size=25); plt.show();","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":">### As already discussed, this does not come as a surprise to us given the audio has a lot of noise in the background. We would need to use some transformation to reduce the noise or amplification techniques during preprocessing.\n<a id='mfcc'></a>\n## Mel-Frequency Cepstral Coefficients (MFCC)\nMFCC are perceptually motivated features that provide a compact representation of the short-time spectrum envelope. \n\nTo compute the MFCC:\n* Take the Fourier transform of a signal window.\n* Map the power of the spectrum obtained above into the Mel scale, using triangular overlapping windows.\n* Take the log of the powers at each of Mel frequencies.\n* Take the discrete cosine transform of the list of Mel log powers, as if it were a signal.\n* The MFCCs are the amplitudes of the resulting spectrum. \n\nThankfully **librosa.feature.mfcc** computes MFCCs across an audio signal.","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"mfccs = lbf.mfcc(x, sr)\nmfccs.shape","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":">### mfcc computed 20 MFCCs over 222 frames.\n\n>### The 0th coefficient of the MFCC conveys a constant offset and hence is discarded when performing classification. For now, we will move forward with the MFCCs as is.","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(20,8)); lbd.specshow(prep.minmax_scale(mfccs, axis=1), sr=sr, x_axis='time')\nplt.colorbar(); plt.title('MFCCs Visualized', size=25); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<a id='chr'></a>\n## Chromagram\n\nChroma features show a high degree of robustness to variations in timbre and closely correlate to the musical aspect of harmony. This is the reason why chroma features are a well-established tool for processing and analyzing musical data. \n\nFor example, every chord recognition procedure relies on some kind of chroma representation. Chroma features have turned out to be a powerful mid-level feature representation in content-based audio retrieval such as cover song identification, audio matching or audio hashing.","execution_count":null},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"chrom = lbf.chroma_stft(x)\n\nplt.figure(figsize=(20,8)); lbd.specshow(chrom, sr=sr, y_axis='chroma', x_axis='time'); plt.colorbar(); \nplt.title('Chromagram Visualized', size=25); plt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<a id='contrf'></a>\n# Continuing with other \"relevant field\" analysis:\n<a id='location'></a>\n### date & location:\n\n*  Which location is the most common?\n*  How are the location geographically located?","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"countries = train['country'].unique()\ncolors = ['blue', 'red', 'green', 'black', 'lavender']\n\nfig = go.Figure(data=go.Scattergeo(lon=train['longitude'], lat = train['latitude'], mode='markers', text = train['location'], marker=dict(size=4,\n                                                                                                               opacity=0.6,\n                                                                                                               symbol='square',\n                                                                                                               line=dict(width=1,\n                                                                                                                        color='white'),\n                                                                                                               colorscale='Blues',\n                                                                                                               color='blue')))\nfig.update_layout(geo_scope='world', title = 'Recordings from world'); \n\nplotly.offline.iplot(fig)","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"fig = go.Figure(data=go.Scattergeo(lon=train['longitude'], lat = train['latitude'], mode='markers', text = train['location'], marker=dict(size=4,\n                                                                                                               opacity=0.6,\n                                                                                                               symbol='square',\n                                                                                                               line=dict(width=1,\n                                                                                                                        color='white'),\n                                                                                                               colorscale='Blues',\n                                                                                                               color='blue')))\nfig.update_layout(geo_scope='usa', title = 'Recordings from USA'); \n\nplotly.offline.iplot(fig)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"fig = go.Figure(data=go.Scattergeo(lon=train['longitude'], lat = train['latitude'], mode='markers', text = train['location'], marker=dict(size=4,\n                                                                                                               opacity=0.6,\n                                                                                                               symbol='square',\n                                                                                                               line=dict(width=1,\n                                                                                                                        color='white'),\n                                                                                                               colorscale='Blues',\n                                                                                                               color='blue')))\nfig.update_layout(geo_scope='europe', title = 'Recordings from Europe'); \n\nplotly.offline.iplot(fig)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<a id='recordist'></a>\n### recordist:\n![img.png](data:image/jpeg;base64,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)\n* Where are the recordists from?\n* Which recordist has contributed the most number of recordings?\n* Which species has been covered by most recordists?\n* What are the average ratings of recordists?","execution_count":null},{"metadata":{"_kg_hide-input":true,"trusted":true},"cell_type":"code","source":"fig = make_subplots(2,2,\n                    specs = [[{},{}],[{'colspan':2},None]],\n                    subplot_titles=('Where are the recordists from?', 'How many recordings each recordist has contributed?', 'What are the average ratings of recordists?'))\n\ntemp = train.groupby(['country']).count().reset_index().sort_values(by='recordist'); \nfig.add_trace(go.Bar(x= temp['recordist'], y = temp['country'], orientation='h', name='Ans 1', marker=dict(color='violet',line=dict(color='black',width=0.3))),1,1)\n\ntemp =train.groupby(['recordist']).count().reset_index().sort_values(by='filename'); \nfig.add_trace(go.Bar(x=temp['filename'], y=temp['recordist'],orientation='h',name='Ans 2',marker=dict(color='indianred',line=dict(color='black',width=0.3))), 1,2)\n\ntemp = pd.DataFrame(train.groupby(['recordist'])['rating'].sum()).reset_index(); temp1 = pd.DataFrame(train.groupby(['recordist'])['filename'].count()).reset_index()\ntemp['rating'] = round(temp['rating']/temp1['filename'],1); \nfig.add_trace(go.Bar(x=temp.sort_values('rating')['rating'], y = temp.sort_values('rating')['recordist'],orientation='h',name='Ans 3', marker=dict(color='green',line=dict(color='black',width=0.1))),2,1)\n\nfig.update_layout(height=1500, title_text='Exploring recordists'); \nplotly.offline.iplot(fig)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<a id='ref'></a>\n## References:-\n* [Getting Started with Audio Data Analysis using Deep Learning (with case study)](https://www.analyticsvidhya.com/blog/2017/08/audio-voice-processing-deep-learning/)\n* [YouTube video](https://www.youtube.com/watch?v=m3XbqfIij_Y&t=1626s) by [Valerio Velardo - The Sound of AI](https://www.youtube.com/channel/UCZPFjMe1uRSirmSpznqvJfQ) on Understanding audio data for deep learning\n* [librosa documentation](https://librosa.org/librosa/tutorial.html)\n* https://ipython.org/ipython-doc/3/api/generated/IPython.display.html\n* https://en.wikipedia.org/wiki/Bird_vocalization\n* https://en.wikibooks.org/wiki/LaTeX/Mathematics\n\n<a id='fread'></a>\n## Further readings:-\n* https://www.asee.org/documents/zones/zone1/2008/student/ASEE12008_0044_paper.pdf","execution_count":null}],"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}