├── Features Extracion ├── Audio Preprocessing │ ├── Image Source │ │ ├── Features.png │ │ ├── MEL.png │ │ ├── Screenshot (1233).png │ │ ├── Screenshot (1234).png │ │ ├── Screenshot (1235).png │ │ ├── Screenshot (1236).png │ │ ├── Screenshot (1237).png │ │ ├── Screenshot (1238).png │ │ ├── Screenshot (1239).png │ │ └── Screenshot (1240).png │ ├── SampleData │ │ ├── Welcome.wav │ │ └── generated_signal_audio.wav │ └── Source Code │ │ ├── Audio.ipynb │ │ ├── Chroma Features.ipynb │ │ ├── Combination Of Features.ipynb │ │ ├── Spectral Contrast.ipynb │ │ ├── Spectral Leakage.ipynb │ │ ├── SubPlotting.ipynb │ │ ├── Tonnetz.ipynb │ │ ├── download.wav │ │ ├── download1.wav │ │ ├── intro.ipynb │ │ └── mfccs.ipynb └── Data Preprocessing │ ├── intro.txt │ └── main.ipynb ├── README.md └── Source Code └── CryMLClassifer.ipynb /Features Extracion/Audio Preprocessing/Image Source/Features.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/echoCodeScript/Infant-Cry-Classification-ML-Model/1e990d33543169790d84de5840d960e3e5daee4a/Features Extracion/Audio Preprocessing/Image Source/Features.png -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Image Source/MEL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/echoCodeScript/Infant-Cry-Classification-ML-Model/1e990d33543169790d84de5840d960e3e5daee4a/Features Extracion/Audio Preprocessing/Image Source/MEL.png -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Image Source/Screenshot (1233).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/echoCodeScript/Infant-Cry-Classification-ML-Model/1e990d33543169790d84de5840d960e3e5daee4a/Features Extracion/Audio Preprocessing/Image Source/Screenshot (1233).png -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Image Source/Screenshot (1234).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/echoCodeScript/Infant-Cry-Classification-ML-Model/1e990d33543169790d84de5840d960e3e5daee4a/Features Extracion/Audio Preprocessing/Image Source/Screenshot (1234).png -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Image Source/Screenshot (1235).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/echoCodeScript/Infant-Cry-Classification-ML-Model/1e990d33543169790d84de5840d960e3e5daee4a/Features Extracion/Audio Preprocessing/Image Source/Screenshot (1235).png -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Image Source/Screenshot (1236).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/echoCodeScript/Infant-Cry-Classification-ML-Model/1e990d33543169790d84de5840d960e3e5daee4a/Features Extracion/Audio Preprocessing/Image Source/Screenshot (1236).png -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Image Source/Screenshot (1237).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/echoCodeScript/Infant-Cry-Classification-ML-Model/1e990d33543169790d84de5840d960e3e5daee4a/Features Extracion/Audio Preprocessing/Image Source/Screenshot (1237).png -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Image Source/Screenshot (1238).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/echoCodeScript/Infant-Cry-Classification-ML-Model/1e990d33543169790d84de5840d960e3e5daee4a/Features Extracion/Audio Preprocessing/Image Source/Screenshot (1238).png -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Image Source/Screenshot (1239).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/echoCodeScript/Infant-Cry-Classification-ML-Model/1e990d33543169790d84de5840d960e3e5daee4a/Features Extracion/Audio Preprocessing/Image Source/Screenshot (1239).png -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Image Source/Screenshot (1240).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/echoCodeScript/Infant-Cry-Classification-ML-Model/1e990d33543169790d84de5840d960e3e5daee4a/Features Extracion/Audio Preprocessing/Image Source/Screenshot (1240).png -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/SampleData/Welcome.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/echoCodeScript/Infant-Cry-Classification-ML-Model/1e990d33543169790d84de5840d960e3e5daee4a/Features Extracion/Audio Preprocessing/SampleData/Welcome.wav -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/SampleData/generated_signal_audio.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/echoCodeScript/Infant-Cry-Classification-ML-Model/1e990d33543169790d84de5840d960e3e5daee4a/Features Extracion/Audio Preprocessing/SampleData/generated_signal_audio.wav -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Source Code/Audio.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 5, 6 | "id": "463e26a9", 7 | "metadata": {}, 8 | "outputs": [ 9 | { 10 | "name": "stdout", 11 | "output_type": "stream", 12 | "text": [ 13 | "\n", 14 | "Shape of Signal: (645632,)\n", 15 | "Signal Datatype: int16\n", 16 | "Signal duration: 40.35 seconds\n" 17 | ] 18 | }, 19 | { 20 | "name": "stderr", 21 | "output_type": "stream", 22 | "text": [ 23 | "C:\\Users\\DASARI RAKESH\\AppData\\Local\\Temp\\ipykernel_9732\\2627825262.py:3: WavFileWarning: Chunk (non-data) not understood, skipping it.\n", 24 | " freq_sample,sig_audio=wavfile.read('./DataSets/Welcome.wav')\n" 25 | ] 26 | } 27 | ], 28 | "source": [ 29 | "import scipy\n", 30 | "from scipy.io import wavfile\n", 31 | "freq_sample,sig_audio=wavfile.read('./DataSets/Welcome.wav')\n", 32 | "print('\\nShape of Signal:', sig_audio.shape)\n", 33 | "print('Signal Datatype:', sig_audio.dtype)\n", 34 | "print('Signal duration:', round(sig_audio.shape[0] / float(freq_sample), 2), 'seconds')" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": null, 40 | "id": "f7c58501", 41 | "metadata": {}, 42 | "outputs": [], 43 | "source": [] 44 | } 45 | ], 46 | "metadata": { 47 | "kernelspec": { 48 | "display_name": "Python 3 (ipykernel)", 49 | "language": "python", 50 | "name": "python3" 51 | }, 52 | "language_info": { 53 | "codemirror_mode": { 54 | "name": "ipython", 55 | "version": 3 56 | }, 57 | "file_extension": ".py", 58 | "mimetype": "text/x-python", 59 | "name": "python", 60 | "nbconvert_exporter": "python", 61 | "pygments_lexer": "ipython3", 62 | "version": "3.10.6" 63 | } 64 | }, 65 | "nbformat": 4, 66 | "nbformat_minor": 5 67 | } 68 | -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Source Code/Spectral Contrast.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "d660c426", 6 | "metadata": {}, 7 | "source": [ 8 | "# Spectral Contrast\n", 9 | "Spectral contrast is a feature extraction technique commonly used in digital signal processing to represent the spectral content of an audio signal. It is based on the observation that human perception of sound is heavily influenced by the spectral contrast between different frequency bands.\n", 10 | "\n", 11 | "Spectral contrast is calculated by dividing the power spectrum of an audio signal into several frequency bands and then computing the difference in energy between adjacent bands. The resulting values represent the contrast between different frequency regions of the spectrum, and can be used as features in various machine learning tasks, such as music genre classification or speech recognition.\n", 12 | "As I mentioned earlier, spectral contrast is a technique used to represent the spectral content of an audio signal. It is based on the observation that human perception of sound is influenced by the contrast between different frequency bands. For example, a sound that contains strong energy in the low frequency bands but weak energy in the high frequency bands will be perceived as \"bass-heavy\" or \"muddy\".\n", 13 | "\n", 14 | "To compute spectral contrast, we first divide the frequency range of an audio signal into several frequency bands. The number of frequency bands and the frequency range of each band can be chosen based on the characteristics of the signal and the specific application. For example, if we are interested in speech recognition, we may want to focus on the frequency range that contains the most information about human speech, which is typically between 0 Hz and 4 kHz.\n", 15 | "\n", 16 | "Once we have divided the frequency range into frequency bands, we compute the energy of each band by calculating the sum of the squared magnitudes of the spectral coefficients that fall within each band. We can then compute the contrast between adjacent bands by subtracting the energy of one band from the energy of the neighboring band. The resulting contrast values represent the difference in energy between adjacent frequency regions of the spectrum.\n", 17 | "\n", 18 | "The spectral contrast features can then be used as input to machine learning algorithms for various audio processing tasks, such as music genre classification, speech recognition, or speaker identification. In these applications, the goal is to extract meaningful information from the audio signal that can be used to identify the type of sound or speech, or to distinguish between different speakers.\n", 19 | "\n", 20 | "In the Python code example I provided earlier, we used the Librosa library to compute the spectral contrast of an audio signal. We first loaded the audio signal using the librosa.load function, and then computed the power spectrum of the signal using the librosa.stft function. We then divided the frequency range into six bands using the np.arange function, and computed the spectral contrast using the librosa.feature.spectral_contrast function.\n", 21 | "\n", 22 | "It's worth noting that spectral contrast is just one of many techniques that can be used for feature extraction in audio processing. Other commonly used techniques include Mel frequency cepstral coefficients (MFCCs), linear predictive coding (LPC), and zero crossing rate (ZCR). The choice of feature extraction technique depends on the specific application and the characteristics of the signal being analyzed." 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": null, 28 | "id": "70f6a834", 29 | "metadata": {}, 30 | "outputs": [], 31 | "source": [ 32 | "import librosa\n", 33 | "import matplotlib.pyplot as plt\n", 34 | "\n", 35 | "# Load an audio file\n", 36 | "audio_file = './download1.wav'\n", 37 | "try:\n", 38 | " y, sr = librosa.load(audio_file)\n", 39 | "except FileNotFoundError:\n", 40 | " print(\"File not found. Please provide the correct path to the audio file.\")\n", 41 | " exit()\n", 42 | "\n", 43 | "# Compute the spectral contrast\n", 44 | "spectral_contrast = librosa.feature.spectral_contrast(y=y, sr=sr, n_bands=6, fmin=200.0)\n", 45 | "\n", 46 | "# Plot the spectral contrast\n", 47 | "plt.figure(figsize=(6, 4))\n", 48 | "try:\n", 49 | " librosa.display.specshow(spectral_contrast, x_axis='time')\n", 50 | "except TypeError:\n", 51 | " print(\"Error displaying the spectrogram. Please check the dimensions of the input data.\")\n", 52 | " exit()\n", 53 | "\n", 54 | "plt.title('Spectral Contrast')\n", 55 | "plt.colorbar(format='%+2.0f dB')\n", 56 | "plt.tight_layout()\n", 57 | "plt.show()\n", 58 | "\n" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": null, 64 | "id": "6ace1898", 65 | "metadata": {}, 66 | "outputs": [], 67 | "source": [] 68 | } 69 | ], 70 | "metadata": { 71 | "kernelspec": { 72 | "display_name": "Python 3 (ipykernel)", 73 | "language": "python", 74 | "name": "python3" 75 | }, 76 | "language_info": { 77 | "codemirror_mode": { 78 | "name": "ipython", 79 | "version": 3 80 | }, 81 | "file_extension": ".py", 82 | "mimetype": "text/x-python", 83 | "name": "python", 84 | "nbconvert_exporter": "python", 85 | "pygments_lexer": "ipython3", 86 | "version": "3.10.6" 87 | } 88 | }, 89 | "nbformat": 4, 90 | "nbformat_minor": 5 91 | } 92 | -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Source Code/SubPlotting.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "056266e6", 7 | "metadata": {}, 8 | "outputs": [ 9 | { 10 | "data": { 11 | "image/png": "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\n", 12 | "text/plain": [ 13 | "
" 14 | ] 15 | }, 16 | "metadata": {}, 17 | "output_type": "display_data" 18 | } 19 | ], 20 | "source": [ 21 | "import matplotlib.pyplot as plt\n", 22 | "import numpy as np\n", 23 | "\n", 24 | "# Create some sample data\n", 25 | "x = np.linspace(0, 10, 100)\n", 26 | "y1 = np.sin(x)\n", 27 | "y2 = np.cos(x)\n", 28 | "\n", 29 | "# Create two subplots with a shared y-axis\n", 30 | "fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True)\n", 31 | "\n", 32 | "# Plot the data on each subplot\n", 33 | "ax1.plot(x, y1)\n", 34 | "ax1.set_title('Plot 1')\n", 35 | "ax2.plot(x, y2)\n", 36 | "ax2.set_title('Plot 2')\n", 37 | "\n", 38 | "# Set the x-axis label for the entire figure\n", 39 | "fig.text(0.5, 0.04, 'X-axis Label', ha='center')\n", 40 | "\n", 41 | "# Set the y-axis label for the figure\n", 42 | "fig.text(0.04, 0.5, 'Y-axis Label', va='center', rotation='vertical')\n", 43 | "\n", 44 | "# Display the figure\n", 45 | "plt.show()\n" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": null, 51 | "id": "6fe3e841", 52 | "metadata": {}, 53 | "outputs": [], 54 | "source": [] 55 | } 56 | ], 57 | "metadata": { 58 | "kernelspec": { 59 | "display_name": "Python 3 (ipykernel)", 60 | "language": "python", 61 | "name": "python3" 62 | }, 63 | "language_info": { 64 | "codemirror_mode": { 65 | "name": "ipython", 66 | "version": 3 67 | }, 68 | "file_extension": ".py", 69 | "mimetype": "text/x-python", 70 | "name": "python", 71 | "nbconvert_exporter": "python", 72 | "pygments_lexer": "ipython3", 73 | "version": "3.10.6" 74 | } 75 | }, 76 | "nbformat": 4, 77 | "nbformat_minor": 5 78 | } 79 | -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Source Code/Tonnetz.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "d2c7d1d6", 6 | "metadata": {}, 7 | "source": [ 8 | "#### Tonnetz\n", 9 | "Tonal space, or tonnetz, is a representation of musical pitch relationships that visually arranges chords and key centers in a geometric pattern. The tonnetz can be used in audio preprocessing as a way of analyzing the harmonic content of music, which can be useful for tasks such as chord recognition or music transcription.\n", 10 | "\n", 11 | "The tonnetz can be constructed using the concept of pitch class, which assigns all notes of a given pitch class (e.g. all C notes) to the same node on the tonnetz. The pitch classes are arranged in a circle, with each node representing a single pitch class. Adjacent nodes on the circle represent pitches that are a semitone apart. The circle can be thought of as a torus, with opposite sides of the circle connected to each other.\n", 12 | "\n", 13 | "To create the tonnetz, chords are represented as sets of pitch classes. Each chord can then be mapped to a point in the tonnetz by averaging the positions of the pitch classes in the chord. This creates a pattern of points in the tonnetz, with chords that are musically related (e.g. chords that share many of the same pitches) appearing close together.\n", 14 | "\n", 15 | "The tonnetz can be visualized as a two-dimensional grid, with each point on the grid corresponding to a chord. The distance between two points on the grid represents the degree of similarity between the corresponding chords. For example, chords that are adjacent on the grid are musically similar, while chords that are far apart are dissimilar." 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 3, 21 | "id": "01e281d7", 22 | "metadata": {}, 23 | "outputs": [ 24 | { 25 | "ename": "AccidentalException", 26 | "evalue": "m is not a supported accidental type", 27 | "output_type": "error", 28 | "traceback": [ 29 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 30 | "\u001b[1;31mAccidentalException\u001b[0m Traceback (most recent call last)", 31 | "Cell \u001b[1;32mIn [3], line 7\u001b[0m\n\u001b[0;32m 4\u001b[0m chords \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mAm\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mDm\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mG7\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mC\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m 6\u001b[0m \u001b[38;5;66;03m# convert chords to music21 Chord objects\u001b[39;00m\n\u001b[1;32m----> 7\u001b[0m chords \u001b[38;5;241m=\u001b[39m [chord\u001b[38;5;241m.\u001b[39mChord(c) \u001b[38;5;28;01mfor\u001b[39;00m c \u001b[38;5;129;01min\u001b[39;00m chords]\n\u001b[0;32m 9\u001b[0m \u001b[38;5;66;03m# create a tonnetz object\u001b[39;00m\n\u001b[0;32m 10\u001b[0m tonnetz \u001b[38;5;241m=\u001b[39m tonal\u001b[38;5;241m.\u001b[39mTonnetz()\n", 32 | "Cell \u001b[1;32mIn [3], line 7\u001b[0m, in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 4\u001b[0m chords \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mAm\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mDm\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mG7\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mC\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m 6\u001b[0m \u001b[38;5;66;03m# convert chords to music21 Chord objects\u001b[39;00m\n\u001b[1;32m----> 7\u001b[0m chords \u001b[38;5;241m=\u001b[39m [\u001b[43mchord\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mChord\u001b[49m\u001b[43m(\u001b[49m\u001b[43mc\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m c \u001b[38;5;129;01min\u001b[39;00m chords]\n\u001b[0;32m 9\u001b[0m \u001b[38;5;66;03m# create a tonnetz object\u001b[39;00m\n\u001b[0;32m 10\u001b[0m tonnetz \u001b[38;5;241m=\u001b[39m tonal\u001b[38;5;241m.\u001b[39mTonnetz()\n", 33 | "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\music21\\chord\\__init__.py:726\u001b[0m, in \u001b[0;36mChord.__init__\u001b[1;34m(self, notes, **keywords)\u001b[0m\n\u001b[0;32m 722\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m notes \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28many\u001b[39m(\u001b[38;5;28misinstance\u001b[39m(n, note\u001b[38;5;241m.\u001b[39mGeneralNote)\n\u001b[0;32m 723\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(n, (note\u001b[38;5;241m.\u001b[39mNote, Chord))\n\u001b[0;32m 724\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m n \u001b[38;5;129;01min\u001b[39;00m notes):\n\u001b[0;32m 725\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mUse a PercussionChord to contain Unpitched objects; got \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnotes\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m--> 726\u001b[0m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__init__\u001b[39m(notes\u001b[38;5;241m=\u001b[39mnotes, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkeywords)\n\u001b[0;32m 728\u001b[0m \u001b[38;5;66;03m# if there were a covariant list, we would use that instead.\u001b[39;00m\n\u001b[0;32m 729\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_notes: t\u001b[38;5;241m.\u001b[39mList[note\u001b[38;5;241m.\u001b[39mNote] \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n", 34 | "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\music21\\chord\\__init__.py:115\u001b[0m, in \u001b[0;36mChordBase.__init__\u001b[1;34m(self, notes, **keywords)\u001b[0m\n\u001b[0;32m 112\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mduration\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m keywords:\n\u001b[0;32m 113\u001b[0m durationKeyword \u001b[38;5;241m=\u001b[39m keywords[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mduration\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m--> 115\u001b[0m durationKeyword \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_add_core_or_init\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnotes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43museDuration\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdurationKeyword\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 117\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m durationKeyword \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 118\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mduration \u001b[38;5;241m=\u001b[39m durationKeyword\n", 35 | "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\music21\\chord\\__init__.py:237\u001b[0m, in \u001b[0;36mChordBase._add_core_or_init\u001b[1;34m(self, notes, useDuration)\u001b[0m\n\u001b[0;32m 235\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(n, (\u001b[38;5;28mstr\u001b[39m, \u001b[38;5;28mint\u001b[39m)):\n\u001b[0;32m 236\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m useDuration:\n\u001b[1;32m--> 237\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_notes\u001b[38;5;241m.\u001b[39mappend(\u001b[43mnote\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mNote\u001b[49m\u001b[43m(\u001b[49m\u001b[43mn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mduration\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43museDuration\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[0;32m 238\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 239\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_notes\u001b[38;5;241m.\u001b[39mappend(note\u001b[38;5;241m.\u001b[39mNote(n))\n", 36 | "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\music21\\note.py:1471\u001b[0m, in \u001b[0;36mNote.__init__\u001b[1;34m(self, pitch, name, nameWithOctave, **keywords)\u001b[0m\n\u001b[0;32m 1469\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpitch \u001b[38;5;241m=\u001b[39m pitch\n\u001b[0;32m 1470\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# assume first argument is pitch\u001b[39;00m\n\u001b[1;32m-> 1471\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpitch \u001b[38;5;241m=\u001b[39m Pitch(pitch, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkeywords)\n\u001b[0;32m 1472\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# supply a default pitch\u001b[39;00m\n\u001b[0;32m 1473\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m nameWithOctave \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", 37 | "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\music21\\pitch.py:1848\u001b[0m, in \u001b[0;36mPitch.__init__\u001b[1;34m(self, name, step, octave, accidental, microtone, pitchClass, midi, ps, fundamental, **keywords)\u001b[0m\n\u001b[0;32m 1846\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1847\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(name, \u001b[38;5;28mstr\u001b[39m):\n\u001b[1;32m-> 1848\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m \u001b[38;5;241m=\u001b[39m name \u001b[38;5;66;03m# set based on string\u001b[39;00m\n\u001b[0;32m 1849\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# is a number\u001b[39;00m\n\u001b[0;32m 1850\u001b[0m \u001b[38;5;66;03m# is a midiNumber or a ps -- a float midiNumber\u001b[39;00m\n\u001b[0;32m 1851\u001b[0m \u001b[38;5;66;03m# get step and accidental w/o octave\u001b[39;00m\n\u001b[0;32m 1852\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstep, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_accidental \u001b[38;5;241m=\u001b[39m _convertPsToStep(name)[\u001b[38;5;241m0\u001b[39m:\u001b[38;5;241m2\u001b[39m]\n", 38 | "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\music21\\pitch.py:2680\u001b[0m, in \u001b[0;36mPitch.name\u001b[1;34m(self, usrStr)\u001b[0m\n\u001b[0;32m 2678\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(usrStr) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m 2679\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstep \u001b[38;5;241m=\u001b[39m usrStr[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n\u001b[1;32m-> 2680\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maccidental \u001b[38;5;241m=\u001b[39m \u001b[43mAccidental\u001b[49m\u001b[43m(\u001b[49m\u001b[43musrStr\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 2681\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 2682\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m PitchException(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mCannot make a name out of \u001b[39m\u001b[38;5;132;01m{\u001b[39;00musrStr\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n", 39 | "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\music21\\pitch.py:906\u001b[0m, in \u001b[0;36mAccidental.__init__\u001b[1;34m(self, specifier)\u001b[0m\n\u001b[0;32m 904\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_alter \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0.0\u001b[39m \u001b[38;5;66;03m# semitones to alter step\u001b[39;00m\n\u001b[0;32m 905\u001b[0m \u001b[38;5;66;03m# potentially can be a fraction... but not exponent...\u001b[39;00m\n\u001b[1;32m--> 906\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mspecifier\u001b[49m\u001b[43m)\u001b[49m\n", 40 | "File \u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\music21\\pitch.py:1170\u001b[0m, in \u001b[0;36mAccidental.set\u001b[1;34m(self, name, allowNonStandardValue)\u001b[0m\n\u001b[0;32m 1168\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 1169\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m allowNonStandardValue:\n\u001b[1;32m-> 1170\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m AccidentalException(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m is not a supported accidental type\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 1172\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(name, \u001b[38;5;28mstr\u001b[39m):\n\u001b[0;32m 1173\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_name \u001b[38;5;241m=\u001b[39m name\n", 41 | "\u001b[1;31mAccidentalException\u001b[0m: m is not a supported accidental type" 42 | ] 43 | } 44 | ], 45 | "source": [ 46 | "from music21 import *\n", 47 | "\n", 48 | "# create a chord progression\n", 49 | "chords = ['C', 'Am', 'Dm', 'G7', 'C']\n", 50 | "\n", 51 | "# convert chords to music21 Chord objects\n", 52 | "chords = [chord.Chord(c) for c in chords]\n", 53 | "\n", 54 | "# create a tonnetz object\n", 55 | "tonnetz = tonal.Tonnetz()\n", 56 | "\n", 57 | "# map the chords to the tonnetz\n", 58 | "points = [tonnetz.getChordSymbol(c) for c in chords]\n", 59 | "\n", 60 | "# visualize the tonnetz\n", 61 | "tonnetz.showGraph(points)\n" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": 5, 67 | "id": "4a14e9ad", 68 | "metadata": {}, 69 | "outputs": [ 70 | { 71 | "data": { 72 | "image/png": "iVBORw0KGgoAAAANSUhEUgAABMYAAAOpCAYAAADxCCvNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAB7CAAAewgFu0HU+AACWOUlEQVR4nOzdeXxU1f3/8fedyUYWCKsEQVSQRUFBFougIQpYBVm0KlhQllqtyxckrmgVailFC0rrVhZFkIKKFKUoYtEgixqDIKhUFpVNkN2E7Mnc3x/5MXMnZLIxmdzhvp6Pxzw8mfu553zuzJ1J/HDOvYZpmqYAAAAAAAAAh3HVdgIAAAAAAABAbaAwBgAAAAAAAEeiMAYAAAAAAABHojAGAAAAAAAAR6IwBgAAAAAAAEeiMAYAAAAAAABHojAGAAAAAAAAR6IwBgAAAAAAAEeiMAYAAAAAAABHojAGAAAAAAAAR6IwBgAAAAAAAEeiMAYAAAAAAABHojAGAAAAAAAAR6IwBgAAAAAAAEeiMAYAAAAAAABHojAGAAAAAAAAR6IwBgAAAAAAAEeiMAYAAAAAAABHojAGAAAAAAAAR6IwBgAAAAAAAEeiMAYAgEP9+OOPMgwjqI+JEyfW9mEBAAAAlUZhDAAAwCbOPfdcb5Hxxx9/rO10AAAAzngRtZ0AAACoHXXr1tU999xTbkx6erq++OILSVKzZs00ZMiQcuO7d+8etPwAAACAmkZhDAAAh2rQoIGef/75cmMmTpzoLYxdcMEFFcYDAAAA4YSllAAAAAAAAHAkCmMAAAAAAABwJApjAAAgKEzT1FtvvaVhw4apVatWio+PV3x8vFq1aqVbb71VixcvlmmaFfbTu3dv7wXo09LSJElHjx7V1KlT1a1bNzVq1Eh16tTR+eefrzFjxujrr7+usM+RI0d6+5w7d64kKScnRy+++KJ69eqls846S9HR0WrRooWGDRumdevWVfn4V61apbvuuksXXXSRGjRooOjoaDVr1kzXXHONnn/+eeXm5pa5n/XuoLt27fI+f95555V558+Tr0laWlq17x4KAACAElxjDAAAnLbt27frlltu0caNG0/Z9v333+v777/XwoUL1aVLF7355ps6//zzK933unXrdMstt2jfvn1+z//www/64Ycf9Nprr+mll17SHXfcUek+v/32W/3mN7/R1q1b/Z7fu3evFi1apEWLFumJJ57QpEmTKuxrz549uu2227wFK6v9+/dr//79WrlypaZMmaJFixbpiiuuqHSeAAAAqFkUxgAAwGnZunWrkpOTdejQIe9zHTt2VKdOnWQYhjZu3KgtW7ZIkjZs2KDLL79cn3zyidq0aVNh319//bUeffRRnThxQk2aNNEVV1yhhg0bat++ffroo4+Um5ur4uJi3XXXXerYsaN+9atfVdjnTz/9pD59+mj//v1KTEzUFVdcoaZNm+rw4cP66KOP9Msvv0iS/vSnP+nCCy/ULbfcUu6xX3311dq/f78kyTAMXXrppbrwwgtVp04d7du3T5988omysrL0008/qW/fvnr//feVkpLi7cN6d9B58+YpKytLknTbbbcpISHhlDHPPvts738ruqvoSevWrdOmTZsqFQsAAOAoJgAAQABPPvmkKcmUZCYnJ5+yPT8/37zkkku8MU2aNDE//PDDU+I++OADs1GjRt64Sy+91CwoKChzzOTkZG9cdHS06Xa7zWnTppmFhYV+cbt37zY7dOjgjU1JSQl4HLfffrtfn5LMhx9+2MzOzvaLO3LkiHnVVVd5Y88//3zT4/GU2eeJEyfM9u3be2OvvfZac8eOHafE/fLLL+Yf/vAHb1xSUpJ5/PjxMvts2bKlN+6HH34IeDxVsXHjRjMuLs7b7yOPPBKUfgEAAM4EXGMMAABU24IFC/TVV19JkiIjI7VixQr16dPnlLh+/frpvffeU0REyWT1L7/8UgsXLqyw//z8fL344osaP368d9+TWrRooYULF3qvmZWWluaduVVRn48++qj++te/KjY21m9bgwYN9K9//UtxcXGSSpaBpqenl9nP9OnTvUsxhwwZov/85z9q1arVKXF169bViy++qNtvv11SyfLKl19+ucI8g+HAgQMaOHCgsrOzJUmDBw/WX/7yl5CMDQAAEA4ojAEAgGr75z//6W3/4Q9/UOfOnQPGduvWze86YC+99FKF/Xfs2FG///3vA27v0KGDunXrJqnk4v8ZGRkV9tm4cWM98cQTAbefddZZ6t+/v/fnsgpjhYWFev755yVJ0dHRevnll+Vylf9n1V/+8hdvEW/BggUV5nm68vLyNHjwYO3Zs0eS1KlTJ73++utcfB8AAMCCwhgAAKiWrKwsv0LU6NGjK9znd7/7nbf9xRdfeGcyBXLT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rHklJSUFfWJLTEyMt11QUFBh/MmL49epUydoOUyZMkWzZ8+WJHXr1k0vvPBC0PquDRTGbGzlypV69NFH1aBBAw0dOlQzZswI27s8AAAAAACA05OQkOBtV2Z5ZHZ2tqTKLbusjH/+85+aMGGCpJKL+7/33nve5ZrhKiSFsdGjR0uSzj33XD322GOVKu789NNPevzxx2UYhubMmVPTKdrS6NGjva8dAAAAAABwtpiYGDVs2FBHjhzR3r17y409duyYtzDWokWL0x574cKFuvvuuyVJLVu21IcffqhGjRqddr+1LSSFsblz58owSqYTfvLJJ3rrrbdUv379cvc5duyYdz+nFsYAAAAAAIA/03DJNOx5L8FQ5HXhhRdqzZo12rFjh4qKihQRUXZp53//+5+3fbp3jHz33Xd12223yePxKCkpSatWrTpjrn8e0jPJNE19/PHHuuyyy/zeIAAAAAAAAFSsV69ekkqWSW7YsCFg3OrVq73tnj17Vnu8VatW6eabb1ZRUZEaNmyoDz/8UK1atap2f3YT0sLY6NGjZRiGduzYoV/96ldasWJFKIcHAAAAAAAIa4MHD/a2X3311TJjPB6P5s2bJ0lKTExUSkpKtcZav369Bg0apPz8fNWrV08ffPCBLrroomr1ZVchLYyNHz9e//73v5WQkKDMzExdf/31mj59eihTAAAAAAAA4cyQZBg2fdT84Xfv3l1XXHGFJGnOnDn69NNPT4mZNm2atm7dKkkaO3asIiMj/banpaXJMAwZhqGRI0eWOc6mTZvUv39/ZWdnKy4uTsuXL1eXLl2CezA2EPK7Ul5//fVat26drr/+eu3atUsPPvigvvnmG7388sunvFEAAAAAAADwN2PGDPXs2VO5ubnq16+fJkyYoJSUFOXm5mrRokWaOXOmJKlNmzZKTU2tcv87d+7UNddco+PHj0uS/vznP6tevXr6+uuvA+7TpEkTNWnSpFrHU5tCXhiTpA4dOuiLL77QDTfcoLVr12ru3Lnatm2blixZosaNG9dGSgAAAAAAAGGhc+fOeuONNzR8+HBlZmZqwoQJp8S0adNGy5cvV0JCQpX7X7NmjQ4ePOj9+f77769wnyeffFITJ06s8li1rdZu49CoUSOtWrVKo0aNkmmaWr9+vS677DJt2bKltlICAAAAAAAIC9dff702b96s+++/X23atFFsbKwSExPVtWtXTZ06VRs3blTr1q1rO03bq5UZYydFRkZqzpw5uuiii/TQQw/pxx9/VM+ePTV//nzePAAAAAAAcApTLpm1N8+nXKHOq2XLlpo+fXqVr9/eu3dvmaYZcPvIkSMDXnvsTGOLM2n8+PFatmyZ6tatqxMnTujGG2/UM888U9tpAQAAAAAA4Axmi8KYJF177bVav369zj//fHk8Hs2fP7+2UwIAAAAAAMAZzDaFMUm68MILlZ6eruTk5HKn9AEAAAAAAGcyDcPWD4SXkFxj7OOPP5YknXfeeRXGNmjQQB9++KGeeuop7d69u6ZTAwAAAAAAgEOFpDCWnJxcpfiIiAhNmjSphrIBAAAAAAAAQlQY+9Of/iRJuvvuu9WoUaNK7XPs2DH94x//kGEY+uMf/1iT6QEAAAAAgDBhGi6Zhq2uDOVl17wQWEgKYxMnTpRhGPrNb35T6cLY0aNHvftRGAMAAAAAAECwUcoEAAAAAACAI4Vkxlh1FBYWSpIiIyNrORMAAAAAAGAXpgyZsufdH+2aFwKz7YyxTZs2SZIaN25cu4kAAAAAAADgjFQjM8bmzZtX5vPvvPOOMjIyyt03Pz9fO3fu1CuvvCLDMNStW7eaSBEAAAAAAAAOVyOFsZEjR8ow/KcPmqapxx9/vNJ9mKYpl8ulsWPHBjs9AAAAAAAAoOauMWaaZqWeK0tUVJS6deumRx99VMnJycFODQAAAAAAhCnTcMk07HllKLvmhcBqpDD2ww8/eNumaer888+XYRj64IMPdMEFFwTczzAMxcTEqGHDhnK73TWRGgAAAAAAACCphgpjLVu2LPP5Zs2aBdwGAAAAAAAAhFKNLaW08ng8oRgGAAAAAACc4UxDMktd19wuTHumhXKw+BUAAAAAAACOFJIZY1a//PKLFi9erE8//VQHDhxQTk6OXn31Vb8llj/99JOOHz+umJgYnX/++aFOEQAAAAAAAA4Q0sLY888/r8cee0wnTpyQVHJhfsMwlJ2d7ReXlpam4cOHKyYmRnv37lWDBg1CmSYAAAAAALAtQ6bsumbRrnkhkJAtpXzyySc1duxYZWVlKSoqSl26dAkYO3ToUDVt2lT5+fl6++23Q5UiAAAAAAAAHCQkhbENGzboz3/+syRp+PDhOnDggNLT0wMn5XLppptukmma+vDDD0ORIgAAAAAAABwmJIWx559/XqZpqkePHpo3b57q1atX4T49evSQJG3ZsqWm0wMAAAAAAIADheQaY5988okMw9C9995b6X3OPfdcSdK+fftqKCsAAAAAABBuTMMl0wjZlaGqxK55IbCQvGP79++XJLVt27bS+8TExEiS8vPzayQnAAAAAAAAOFtICmNRUVGSpOPHj1d6n59//lmSlJiYWAMZAQAAAAAAwOlCUhg755xzJEnbt2+v9D4fffSRpKrNMgMAAAAAAGc2U4atHwgvISmMXX311TJNUy+//HKl4vft26eZM2fKMAz169evhrMDAAAAAACAE4WkMHbvvfcqMjJSX331lZ566qlyY7/77jv9+te/1i+//KLY2FjdeeedoUgRAAAAAAAADhOSu1K2atVKkydP1kMPPaSJEydq+fLluuGGG7zb33rrLUVGRmrdunVauXKlPB6PDMPQc889p8aNG4ciRQAAAAAAEAZM2fiulKGZf4QgCklhTJIeeOABmaapxx9/XOnp6friiy9kGCVrb//0pz9540zTlNvt1t/+9jeNGTMmVOkBAAAAAADAYUJaynzwwQe1adMmjRo1So0aNZJpmn6PunXratiwYdq4caPGjh0bytQAAAAAAADgMCGbMXZS+/btNWfOHEnS7t27dfDgQRUXF6thw4Y6//zz5XIx7RAAAAAAAAA1L+SFMatzzjlH55xzTm2mAAAAAAAAwogpQ6aM2k6jTHbNC4ExPQsAAAAAAACORGEMAAAAAAAAjhTSpZRHjhzR66+/rjVr1uj7779XVlaWiouLy93HMAzt3LkzRBkCAAAAAAA7Mw1DpmHPeT6mwVLKcBOywthbb72l3//+98rMzJQkmaZZqf0MTioAAAAAAADUgJAUxj7//HPdeuut8ng8Mk1TzZo1U+fOndWgQQPuQgkAAAAAAIBaEZLC2NSpU1VcXKw6depo1qxZuvXWW0MxLAAAAAAAOMNwV0oEU0ima61fv16GYeiRRx6hKAYAAAAAAABbCElh7Pjx45Kka665JhTDAQAAAAAAABUKyVLKpKQk7d69mwvph7E9dTuoMLGZJMlI9N04wVDlbqJg5SlVjzXNss8LT6kpqMWm29su9PjaHtO/v/wi32mdZ22f8I/bd9j3s/XmqEeOFvqPW+w7xqIijy9vj1+YomIs+RX4OjyRme8Xl33C93NhfpEv7xz/uKJC3zbD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AAAAcCQKYwAAAAAAAHAkllICAAAAAICwYZolDzuya14IjBljAAAAAAAAcCQKYwAAAAAAAHAkllICAAAAAICwwVJKBBMzxgAAAAAAAOBIFMYAAAAAAADgSBTGAAAAAAAA4EgUxgAAAAAAQNjwmPZ+nAlycnL09NNPq1u3bmrQoIHi4uLUrl07paamateuXafdv8fj0SeffKIJEyaod+/eatq0qaKiolS3bl116NBBd999tzZv3hyEI6kYF98HAAAAAACAJGnHjh267rrrtH37dr/nv/vuO3333XeaPXu2FixYoAEDBlR7jHPPPVd79uw55fnCwkJ98803+uabb/TPf/5TDzzwgP7617/KMIxqj1URZowBAAAAAABAWVlZ6t+/v7codscdd2jVqlVav369Jk+erPj4eGVmZuqWW27Rpk2bqj3OTz/9JElq3bq1Hn74Yb377rvKyMjQmjVr9Kc//Un169eXx+PR008/rcceeywYhxYQM8YAAAAAAED4MCXTrksW7ZpXJT3zzDPatm2bJOnpp5/Wgw8+6N3Wo0cP9e7dW8nJycrJydG4ceOUlpZWrXG6d++uJ598Uv369TtlNlivXr106623qkePHjp06JCeeeYZ/e53v9P5559f7eMqDzPGAAAAAAAAHK6wsFB///vfJUnt27dXamrqKTGXX365xowZI0lavXq1vvjii2qNtX79el1zzTUBl0i2atVKTzzxhCSpqKhIS5curdY4lUFhDAAAAAAAwOE+/vhj/fLLL5Kk22+/XS5X2SWjkSNHetv//ve/ayyflJQUb3vnzp01Ng5LKQEAAAAAQNjweEoedmTXvCpj7dq13nZycnLAuK5duyo2NlY5OTlat25djeWTn5/vbbvd7hobh8IYAAAAAABAkO3fv7/CmObNm4cgk8r59ttvve127doFjIuIiFDr1q21efNmbd26tcbyWb16tbfdvn37GhuHwhgAAAAAAECQde/evcIY00Z3Edi7d68kKS4uTomJieXGtmjRQps3b9ahQ4eUn5+v6OjooOaSk5Oj5557TpIUHR2tQYMGBbV/KwpjAAAAAAAgbJg2viulXfOqjKysLElSfHx8hbFxcXHe9okTJ4JeGHv44Ye1e/duSdI999yjZs2aBbV/KwpjAAAAAAAAQZaenq6kpKTaTqPS8vLyJElRUVEVxloLYbm5uUHN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yuvtt98e1/GUUgIAAAAQERHbtm2LK6+8Mt56662632/dujW2bt0aTz/9dKxbty6uvvrqMR/7H//xH+O5554b835HYsYYAAAA0DKylO9XK9u/f39cddVVlaTYLbfcEj/72c/itddeiwcffDC6u7tj37598eUvfzk2bdo0pmN//PHHcfvtt0dExBlnnDGmfY/EjDEAAAAA4i//8i/jzTffjIiIRx55JO67777KvsWLF8ell14aPT09cfDgwbjrrrti/fr1Yzb2N77xjfif//mfuPzyy2Pu3LnR29s7Zn2PxIwxAAAAgIIbHByMxx9/PCIiLrjggrj33nuParNkyZK4+eabIyKir68v/vVf/3VMxn799ddj9erVMWXKlHjiiSfGpM/RkhgDAAAAWkZKKVKW01dq3VrKV155JT766KOIiLjhhhuirW34lNGNN95Y2f77v//7kx63XC7HLbfcElmWxde//vX47d/+7ZPu83hIjAEAAAAU3KuvvlrZ7unpadjukksuic7OzoiI+Jd/+ZeTHvev/uqvYtOmTfFbv/Vbcf/99590f8fLGmMAAAAAY2zXrl3HbDN37twJiGR0tmzZUtlesGBBw3YdHR1x/vnnx+bNm+MXv/jFSY25Y8eOeOCBByIi4oknnogpU6acVH8nQmIMAAAAaBkp5bdksTauRYsWHVf7Ztu5c2dERHR1dcXMmTNHbDtv3rzYvHlz7N69O/r7+084oXXrrbfGwYMH4/rrr48rrrjihPo4WUopAQAAAApu//79ERHR3d19zLZdXV2V7Y8//viExvv+978fP/3pT2PGjBnx6KOPnlAfY8GMMQAAAIAx9vOf/zzmzJnT7DBG7dChQxERMXny5GO2rZ0h9sknnxz3WHv37o177rknIiIeeuihmD179nH3MVYkxgAAAADG2Jw5c8ZlDbFSqXTSfXzve9+re7pkRMTUqVMjImJgYOCYx/f391e2p02bdtzj33vvvbF79+5YtGhR3Hrrrcd9/FiSGAMAAABaRsoisiw/a3PVSlmzIzhx06dPj4jRlUYeOHCgsj2a0staL7/8cvT29kZ7e3s89dRT0dbW3FW+JMYAAAAAWsTJPgkyIoYt8Zw7d25s3LgxDhw4EB9++OGIC/C/8847ERExa9as4154f9WqVRERcckll8TWrVtj69atR7XZsWNHZfvFF1+MWbNmRUTEihUrjmus0ZAYAwAAAGgRCxYsGJd+L7zwwnj++ecjIuKXv/xlfO5znxu2Xblcju3bt0dExAUXXHDc43xahrlx48a4/vrrj9n+zjvvrGyPR2LMUykBAACAlpFSyvWrVS1durSy3dfX17Dd66+/Ximl/PznPz/ucY03iTEAAACAgrv00ktjxowZERHR29vbMMm3du3ayvZ111133OOsX7/+mMnFG264odJ+x44d45p0lBgDAAAAKLjJkydXyhZ/8YtfxDe/+c2j2mzYsCG++93vRkRET09PLFy4cNi+SqVSlEqlmD9//rjFO1asMQYAAAC0jJSlSLl9KmU+4xqt++67L5599tl48803Y+XKlbFt27ZYsWJFTJs2LV555ZV46KGHolwux7Rp0+Kxxx5rdrhjQmIMAAAAgJg+fXr8+Mc/jiuvvDLeeuutWLNmTaxZs6auzWmnnRbr1q2Liy++uDlBjjGllAAAAABERMT5558fb7zxRqxatSouueSSmDlzZnR2dsZnPvOZuPvuu2Pz5s1x9dVXNzvMMWPGGAAAAAAVXV1dsXLlyli5cuUJHX+yC+WvXbu2bpH/8SQxBgAAALQMa4wxlpRSAgAAAFBIEmMAAAAAFJJSSgAAAKBlZJEiO8k1rMZLFvmMi8bMGAMAAACgkCTGAAAAACgkpZQAAABAy/BUSsaSGWMAAAAAFJLEGAAAAACFpJQSAAAAaBkppUg5fSplXuOiMTPGAAAAACgkiTEAAAAACkliDAAAAIBCssYYAAAA0DJSliLL8rmWV8ppXDRmxhgAAAAAhSQxBgAAAEAhKaUEAAAAWkbKUm5LFvMaF42ZMQYAAABAIUmMAQAAAFBISikBAACAlpFSREr5LFnMaViMwIwxAAAAAApJYgwAAACAQpIYAwAAAKCQrDEGAAAAtIyUskhZ1uwwhpVSPuOiMTPGAAAAACgkiTEAAAAACkkp5QQplUqjatfT0xPr168f32AAAACgRWVZiixLzQ5jWHmNi8bMGAMAAACgkMwYm2Bf/epX47bbbmu4v6urawKjAQAAACguibEJdsYZZ8RnP/vZZocBAAAALSmlFCnls2Qxr3HRmFJKAAAAAApJYgwAAACAQpIYAwAAAKCQrDE2wX7wgx/Ec889F2+//Xa0t7fHmWeeGUuWLIkbb7wxLrvssgmNZefOnSPu37Vr1wRFAgAAAKOTshQpy+daXnmNi8YkxibYli1b6n7etm1bbNu2LZ555pn40pe+FGvXro0ZM2ZMSCzz5s2bkHEAAAAA8khibIJ0dnbGNddcE5dffnksWLAguru7Y/fu3dHX1xdPPfVU7N27N1544YW49tpr46WXXopJkyY1O2QAAACAU5rE2AR59913Y+bMmUf9ftmyZXHHHXfEF7/4xXjjjTeir68vnnzyybjzzjvHPaZ33nlnxP27du2KRYsWjXscAAAAMFpKKRlLEmMTZLik2Kdmz54dP/zhD2PBggUxODgYq1evnpDE2Ny5c8d9DAAAAIC88lTKnDj33HNj2bJlEXFk3bH33nuvyREBAAAAnNokxnLkwgsvrGy/++67TYwEAAAA8ilFFlnK5ytF1uyPh+MkMZYjpVKp4b7FixdHqVSKDRs21P1+3759cfHFF8eUKVPipZdeGu8QAQAAAE4ZEmM5smXLlsr2WWedVbdv1apVERHxjW98o/K7gYGBuO6662Lz5s3R29tbKcUEAAAA4NgkxnJix44dlRlf5513Xpx99tl1+3/v934vrrrqqnj55Zdj/fr1kVKKG2+8MV5++eV49NFHY8WKFc0IGwAAAKBlSYxNgBdffDHK5XLD/R988EEsX748BgYGIiLitttuG7bdww8/HG1tbfHnf/7n8ad/+qfxd3/3d3H//ffH1772tXGJGwAAAPImZREpSzl9NfvT4Xh1NDuAIrjjjjticHAwli9fHosXL4758+fHtGnTYs+ePbF+/fr4zne+E3v27ImIiKVLl8btt98+bD8XXXRR/PEf/3E888wz8eqrr8ZNN90UDz300ES+FQAAAIBThsTYBHnvvfdi9erVsXr16oZtli9fHk8//XRMmTKlYZtZs2ZFRMT06dPjb/7mb8Y8TgAAAICikBibAL29vdHX1xcbNmyIX/3qV7Fnz57Yt29fdHd3x7x582LJkiVxww03xOLFi0fs56//+q/jW9/6VsyePTs++OCD6O3tjT/5kz+ZoHcBAAAAzfdp2WIe5TUuGpMYmwA9PT3R09NzUn0899xz8bWvfS0uu+yyWLduXVxwwQXxwAMPxFe+8pXo7Owco0gBAAAAisPi+y3gZz/7WXzlK1+Jiy66KF544YWYM2dO3H333bFr16749re/3ezwAAAAAFqSxFjO/du//Vtcd911cdZZZ8U/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\n", 73 | "text/plain": [ 74 | "
" 75 | ] 76 | }, 77 | "metadata": { 78 | "image/png": { 79 | "height": 468, 80 | "width": 611 81 | } 82 | }, 83 | "output_type": "display_data" 84 | } 85 | ], 86 | "source": [ 87 | "import librosa\n", 88 | "import librosa.display\n", 89 | "import matplotlib.pyplot as plt\n", 90 | "\n", 91 | "# Load audio signal\n", 92 | "y, sr = librosa.load('download1.wav')\n", 93 | "\n", 94 | "# Compute chromagram\n", 95 | "chroma = librosa.feature.chroma_cqt(y=y, sr=sr)\n", 96 | "\n", 97 | "# Compute tonnetz from chromagram\n", 98 | "tonnetz = librosa.feature.tonnetz(chroma=chroma)\n", 99 | "\n", 100 | "# Plot tonnetz\n", 101 | "librosa.display.specshow(tonnetz, y_axis='tonnetz')\n", 102 | "plt.colorbar()\n", 103 | "plt.title('Tonnetz')\n", 104 | "plt.tight_layout()\n", 105 | "plt.show()\n" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": null, 111 | "id": "4d6af9c2", 112 | "metadata": {}, 113 | "outputs": [], 114 | "source": [] 115 | } 116 | ], 117 | "metadata": { 118 | "kernelspec": { 119 | "display_name": "Python 3 (ipykernel)", 120 | "language": "python", 121 | "name": "python3" 122 | }, 123 | "language_info": { 124 | "codemirror_mode": { 125 | "name": "ipython", 126 | "version": 3 127 | }, 128 | "file_extension": ".py", 129 | "mimetype": "text/x-python", 130 | "name": "python", 131 | "nbconvert_exporter": "python", 132 | "pygments_lexer": "ipython3", 133 | "version": "3.10.6" 134 | } 135 | }, 136 | "nbformat": 4, 137 | "nbformat_minor": 5 138 | } 139 | -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Source Code/download.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/echoCodeScript/Infant-Cry-Classification-ML-Model/1e990d33543169790d84de5840d960e3e5daee4a/Features Extracion/Audio Preprocessing/Source Code/download.wav -------------------------------------------------------------------------------- /Features Extracion/Audio Preprocessing/Source Code/download1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/echoCodeScript/Infant-Cry-Classification-ML-Model/1e990d33543169790d84de5840d960e3e5daee4a/Features Extracion/Audio Preprocessing/Source Code/download1.wav -------------------------------------------------------------------------------- /Features Extracion/Data Preprocessing/intro.txt: -------------------------------------------------------------------------------- 1 | DATA: It can be any unprocessed fact, value, text, sound, or picture that is not being 2 | interpreted and analyzed. 3 | INFORMATION: Data that has been interpreted and manipulated and has now some meaningful inference 4 | for the users. 5 | KNOWLEDGE: Combination of inferred information, experiences, learning, and insights. 6 | Results in awareness or concept building for an individual or organization. 7 | 8 | -------------------------------------------------------------------------------- /Features Extracion/Data Preprocessing/main.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Data Preprocessing" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Data is typically divided into two types: \n", 15 | "\n", 16 | "#### 1.Labeled data\n", 17 | "#### 2.Unlabeled data" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": null, 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [] 26 | } 27 | ], 28 | "metadata": { 29 | "kernelspec": { 30 | "display_name": "Python 3 (ipykernel)", 31 | "language": "python", 32 | "name": "python3" 33 | }, 34 | "language_info": { 35 | "codemirror_mode": { 36 | "name": "ipython", 37 | "version": 3 38 | }, 39 | "file_extension": ".py", 40 | "mimetype": "text/x-python", 41 | "name": "python", 42 | "nbconvert_exporter": "python", 43 | "pygments_lexer": "ipython3", 44 | "version": "3.10.6" 45 | }, 46 | "vscode": { 47 | "interpreter": { 48 | "hash": "f29d8df7978f3b9ccf092617105558f15a01651387578462290f7b5dabf2e5ab" 49 | } 50 | } 51 | }, 52 | "nbformat": 4, 53 | "nbformat_minor": 2 54 | } 55 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## CryMLClassifier - Baby Cry Classification Model 2 | 3 | This repository contains the source code and dataset for the CryMLClassifier, a machine learning model designed to classify baby cries into five types: burping, belly pain, discomfort, hungry, and tired. The model is trained on the "Donate a Cry Corpus Dataset," which is a publicly available dataset widely used for baby cry analysis. 4 | 5 | ### Dataset 6 | The dataset used for training and evaluation is the "Donate a Cry Corpus Dataset." Unfortunately, the direct link to the dataset is currently unavailable. However, you can find more information about the dataset and how to access it by visiting the official website or contacting the dataset creators directly. 7 | 8 | ### Features Extraction 9 | The folder "features_extraction" provides a demonstration of the various features used in the classification process. It includes sample code and information on feature extraction techniques. However, please note that the actual CryMLClassifier model utilizes 193 features, as described below. 10 | 11 | ### Features Used 12 | The CryMLClassifier model utilizes 193 features extracted from the audio data of baby cries. These features include the following: 13 | 14 | - 40 MFCCs (Mel-frequency cepstral coefficients) 15 | - 12 chroma features 16 | - 128 mel-spectrogram features 17 | - 7 spectral contrast features 18 | - 6 tonnetz features 19 | 20 | These features are extracted from the audio samples and used as inputs to the machine learning algorithms for classification. 21 | 22 | ### Model Training 23 | The CryMLClassifier model has been trained and evaluated using various machine learning algorithms, including K-Nearest Neighbors (KNN), Support Vector Machines (SVM), Decision Trees, Random Forest, and XGBoost. After experimentation, the Random Forest and XGBoost models have shown promising results in terms of accuracy. 24 | 25 | The accuracy achieved by the CryMLClassifier model using these algorithms is as follows: 26 | - K-Nearest Neighbors 90.58% 27 | - Support Vector Machine 92.18% 28 | - Decision Tree 96% 29 | - Random Forest: Approximately 99.59% 30 | - XGBoost: Approximately 99.79% 31 | 32 | Please note that the performance of the model may vary based on different factors, and these accuracy values are specific to the dataset and evaluation methods used in this project. 33 | 34 | ### Requirements 35 | Make sure you have the required Python libraries installed before running the code. You can install them using the pip package manager by executing the following command: 36 | 37 | ```bash 38 | pip install jupyter sklearn librosa numpy pandas matplotlib seaborn 39 | ``` 40 | 41 | ### Execution 42 | To execute the code, follow these steps: 43 | 44 | 1. Download the entire folder, including the dataset and source code. 45 | 2. Install the required Python libraries as mentioned in the "Requirements" section. 46 | 3. Open the Jupyter notebook or Python script containing the source code. 47 | 4. Run the code to train and evaluate the CryMLClassifier model. 48 | 5. You can modify the code as needed for further experimentation or analysis. 49 | 50 | For any inquiries or issues related to the CryMLClassifier model or the code, please feel free to contact me. 51 | 52 | ------------------------------- 53 | --------------------------------------------------------------------------------