{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sonification: Convert data to MIDI (Part 1)\n", "This is a simple example of parameter mapping sonification in which discrete data points are mapped to musical notes. You can think of this as a musical scatter plot with time being the x-axis and musical pitch being the y-axis. This technique will likely be more intuitive when applied to time series data (since the 'x-axis' already indicates time) but it can be used no matter what the data on each axis represent. This is very similar to what can be done with software like [TwoTone](https://twotone.io) but of course it will be much more flexible when you do it yourself! \n", "\n", "As an example, we will recreate a version of the sonification method used in [Moon Impacts](www.system-sounds.com/moon-impacts/). We will start with a list of the lunar impact craters that are bigger than 10km across that have age estimates. This data comes from a paper by our friend Sara who discovered an interesting uptick in the impact rate about 290 million years ago [(Mazrouei et al 2019)](https://www.science.org/doi/10.1126/science.aar4058). The sonification will allow us to hear the rhythm of these large impacts over the last billion years. We'll map the crater diameters to pitch and velocity (a combinaiton of volume and intensity) so we can hear the distribution of impact sizes over time.\n", "\n", "
\n", "
\"Drawing\"
\n", "
\n", "\n", "The output of this notebook will be a MIDI file (.mid) which can be opened in any DAW (digital audio workstation) where you'll be able to choose any intrument or sound you want. \n", "\n", "The code is presented in many small steps with figures to be more accessible to beginners. If you're new to jupyter, you might want to check out [Jupyter notebook shortcuts](https://towardsdatascience.com/jypyter-notebook-shortcuts-bf0101a98330). If you're more advanced, you can start from a streamlined version of the algorithm that has been written as a single python script. \n", "\n", "In [part 2](https://astromattrusso.gumroad.com/l/data2music-part2), we'll go beyond pitch and velocity and will learn how to use data to control a vastly greater range of audio/musical parameters. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1) Load data (.csv file)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "111 impacts\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nameslongitudelatitudediameterage
60Mosting A354.80469-3.2207012.71324
50NaN262.6702943.6585013.61026
45NaN79.7333022.8318014.3993
2King120.492204.9375076.2992
41Hume Z90.41211-3.6249715.0981
\n", "
" ], "text/plain": [ " names longitude latitude diameter age\n", "60 Mosting A 354.80469 -3.22070 12.7 1324\n", "50 NaN 262.67029 43.65850 13.6 1026\n", "45 NaN 79.73330 22.83180 14.3 993\n", "2 King 120.49220 4.93750 76.2 992\n", "41 Hume Z 90.41211 -3.62497 15.0 981" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd #import library for loading data, https://pypi.org/project/pandas/\n", "\n", "filename = 'lunarCraterAges' #name of csv data file\n", "\n", "df = pd.read_csv('./data/' + filename + '.csv') #load data as a pandas dataframe\n", "#df = df[(df['diameter'] >= 20)] #filter data if you like (for example, only craters larger than 20km)\n", "\n", "df = df.sort_values(by=['age'], ascending=False) #sort data from oldest to youngest (optional, doesn't affect the sonification)\n", "\n", "n_impacts = len(df)\n", "print(n_impacts, 'impacts')\n", "\n", "df.head() #take a look at first 5 rows\n", "#df.tail() #take a look at last 5 rows" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2) Plot data" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pylab as plt #import library for plotting, https://pypi.org/project/matplotlib/\n", "\n", "ages = df['age'].values #this is a numpy array (not a list), you can do mathematical operations directly on the object\n", "diameters = df['diameter'].values \n", "\n", "plt.scatter(ages, diameters, s=diameters)\n", "plt.xlabel('age [Myrs]')\n", "plt.ylabel('diameter [km]')\n", "plt.show()\n", "\n", "times_myrs = max(ages) - ages #measure time from oldest crater (first impact) in data\n", "\n", "plt.scatter(times_myrs, diameters, s=diameters)\n", "plt.xlabel('time since impact 0 [Myrs]')\n", "plt.ylabel('diameter [km]')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3) Write general mapping function" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def map_value(value, min_value, max_value, min_result, max_result):\n", " '''maps value (or array of values) from one range to another'''\n", " \n", " result = min_result + (value - min_value)/(max_value - min_value)*(max_result - min_result)\n", " return result\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4) Compress time\n", "- the MIDI file we create will measure time in beats (quarter notes), not in seconds\n", "- we'll set the tempo to 60 bpm so that 1 beat = 1 second so the distinction doesn't matter \n", "- for other projects you may want to quantize the data to some fraction of a beat (eigth note = 0.5 beat, etc.) and then be free to change the tempo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### option 1: set a conversion factor to compress time" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Duration: 52.8 beats\n" ] } ], "source": [ "myrs_per_beat = 25 #number of Myrs for each beat of music \n", "\n", "t_data = times_myrs/myrs_per_beat #rescale time from Myrs to beats\n", "\n", "\n", "duration_beats = max(t_data) #duration in beats (actually, onset of last note)\n", "print('Duration:', duration_beats, 'beats')\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### option 2: set a desired duration (in beats)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Myrs per beat: 25.0\n" ] } ], "source": [ "duration_beats = 52.8 #desired duration in beats (actually, onset of last note)\n", "\n", "t_data = map_value(times_myrs, 0, max(times_myrs), 0, duration_beats)\n", "\n", "#or\n", "#t_data = map_value(ages, min(ages), max(ages), duration_beats, 0)\n", "\n", "myrs_per_beat = max(times_myrs)/duration_beats\n", "print('Myrs per beat:', myrs_per_beat)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Duration: 52.8 seconds\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#calculate duration in seconds\n", "bpm = 60 #if bpm = 60, 1 beat = 1 sec \n", "duration_sec = duration_beats*60/bpm #duration in seconds (actually, onset of last note)\n", "print('Duration:', duration_sec, 'seconds')\n", "\n", "\n", "plt.scatter(t_data, diameters, s=diameters)\n", "plt.xlabel('time [beats]')\n", "plt.ylabel('diameter [km]')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4) Normalize and scale data" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "\n", "y_data = map_value(diameters, min(diameters), max(diameters), 0, 1) #normalize data, so it runs from 0 to 1 \n", "\n", "y_scale = 0.5 #lower than 1 to spread out more evenly\n", "\n", "y_data = y_data**y_scale\n", "\n", "plt.scatter(times_myrs, y_data, s=50*y_data)\n", "plt.xlabel('time [Myr]')\n", "plt.ylabel('y data [normalized]')\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6) Choose musical notes for pitch mapping, convert to midi numbers\n", "- choose the set of musical notes to map data to (it's common to use a few octaves of a certain scale but you can choose any set of notes you want depending on your goals for the sonification)\n", "- the total number of notes sets the pitch resolution, think of this as the number of rows of pixels in an image\n", "- these note names are converted to [midi note numbers](https://www.inspiredacoustics.com/en/MIDI_note_numbers_and_center_frequencies ) (integers from 0 to 127, lowest note on piano = A0 = 21, C1 = 24, etc.)\n", "\n", "
\n", "
\"MIDI
\n", "
\n", "\n", "(from [Müller, FMP, Springer 2015](https://www.audiolabs-erlangen.de/fau/professor/mueller/bookFMP))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## UPDATE\n", "Run the following cell to define the str2midi function. In the video we imported it from the audiolazy library but that stopped working with python versions 3.10+. This is the workaround. This function can also be found in audiolazy_functions.py along with other conversions between note names, midi numbers, and frequencies (midi2freq, str2freq, freq2midi, midi2str, freq2str). To use any of those functions place audiolazy_functions.py in the same directory you're working out of and add from audiolazy_fucntions import * at thte top of your script. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import itertools as it\n", "\n", "MIDI_A4 = 69\n", "\n", "def str2midi(note_string):\n", " \"\"\"Given a note string name (e.g. \"Bb4\"), returns its MIDI pitch number. (From audiolazy)\n", " \"\"\"\n", " \n", " data = note_string.strip().lower()\n", " name2delta = {\"c\": -9, \"d\": -7, \"e\": -5, \"f\": -4, \"g\": -2, \"a\": 0, \"b\": 2}\n", " accident2delta = {\"b\": -1, \"#\": 1, \"x\": 2}\n", " accidents = list(it.takewhile(lambda el: el in accident2delta, data[1:]))\n", " octave_delta = int(data[len(accidents) + 1:]) - 4\n", " return (MIDI_A4 +\n", " name2delta[data[0]] + # Name\n", " sum(accident2delta[ac] for ac in accidents) + # Accident\n", " 12 * octave_delta # Octave\n", " )" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Resolution: 23 notes\n" ] } ], "source": [ "#from audiolazy import str2midi #import function to convert note names to midi numbers (could also use: midi2str, str2freq, freq2str,freq2midi,midi2freq) https://pypi.org/project/audiolazy/\n", "#removed due to problems importing it with some versions of python\n", "\n", "# 4 octaves of major scale\n", "note_names = ['C2','D2','E2','F2','G2','A2','B2',\n", " 'C3','D3','E3','F3','G3','A3','B3',\n", " 'C4','D4','E4','F4','G4','A4','B4',\n", " 'C5','D5','E5','F5','G5','A5','B5']\n", "\n", "#4 octaves of major pentatonic scale \n", "note_names = ['C2','D2','E2','G2','A2',\n", " 'C3','D3','E3','G3','A3',\n", " 'C4','D4','E4','G4','A4',\n", " 'C5','D5','E5','G5','A5']\n", "\n", "#custom note set (a voicing of a Cmaj13#11 chord, notes from C lydian)\n", "note_names = ['C1','C2','G2',\n", " 'C3','E3','G3','A3','B3',\n", " 'D4','E4','G4','A4','B4',\n", " 'D5','E5','G5','A5','B5',\n", " 'D6','E6','F#6','G6','A6']\n", "\n", "note_midis = [str2midi(n) for n in note_names] #make a list of midi note numbers \n", "\n", "n_notes = len(note_midis)\n", "print('Resolution:',n_notes, 'notes')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7) Map data to MIDI note numbers (map larger craters to lower notes)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "midi_data = []\n", "for i in range(n_impacts):\n", " note_index = round(map_value(y_data[i], 0, 1, n_notes-1, 0)) #notice choice of polarity: bigger craters are mapped to lower notes\n", " #we round the result because it's a list index which must be an integer\n", " midi_data.append(note_midis[note_index])\n", "\n", "plt.scatter(t_data, midi_data, s=50*y_data)\n", "plt.xlabel('time [beats]')\n", "plt.ylabel('midi note numbers')\n", "plt.show()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 8) Map data to note velocities (map larger craters to greater velocities)\n", "- midi velocity (integer from 0-127) is a combination of volume and intensity (hitting a piano key with a larger velocity makes a louder, more intense sound)\n", "- we are using the same data to control the note pitch and the note velocity (this is called 'dual coding')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "vel_min,vel_max = 35,127 #minimum and maximum note velocity\n", "\n", "vel_data = []\n", "for i in range(n_impacts):\n", " note_velocity = round(map_value(y_data[i], 0, 1, vel_min, vel_max)) #bigger craters will be louder\n", " #we round here because note velocites are integers\n", " vel_data.append(note_velocity)\n", " \n", "plt.scatter(t_data, midi_data, s=vel_data)\n", "plt.xlabel('time [beats]')\n", "plt.ylabel('midi note numbers')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 9) Save data as MIDI file" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "from midiutil import MIDIFile #import library to make midi file, https://midiutil.readthedocs.io/en/1.2.1/\n", " \n", "#create midi file object, add tempo\n", "my_midi_file = MIDIFile(1) #one track \n", "my_midi_file.addTempo(track=0, time=0, tempo=bpm) \n", "\n", "#add midi notes\n", "for i in range(n_impacts):\n", " my_midi_file.addNote(track=0, channel=0, pitch=midi_data[i], time=t_data[i], duration=2, volume=vel_data[i])\n", "\n", "#create and save the midi file itself\n", "with open(filename + '.mid', \"wb\") as f:\n", " my_midi_file.writeFile(f) \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optional: Listen to MIDI file within jupyter" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pygame 2.1.2 (SDL 2.0.18, Python 3.7.4)\n", "Hello from the pygame community. https://www.pygame.org/contribute.html\n" ] } ], "source": [ "import sys \n", "!{sys.executable} -m pip install --quiet \"pygame\" #install pygame with pip\n", "#or use this if you installed python with anaconda\n", "#conda install --yes --prefix {sys.prefix} pygame\n", "\n", "import pygame #import library for playing midi files, https://pypi.org/project/pygame/\n", "\n", "pygame.init()\n", "pygame.mixer.music.load(filename + '.mid')\n", "pygame.mixer.music.play()\n", "\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "pygame.mixer.music.stop()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Next Steps\n", "- open MIDI file in DAW (Digital Audio Workstation) like Logic, Garageband, Ableton, ProTools,...\n", "- choose instruments/sounds\n", "- add effects and/or other layers\n", "- [check out part 2 on Gumroad!](https://astromattrusso.gumroad.com/l/data2music-part2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }