{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "1.2 Hello Music.ipynb", "provenance": [], "collapsed_sections": [], "toc_visible": true, "include_colab_link": true }, "kernelspec": { "name": "python3", "display_name": "Python 3" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "id": "-bEMPSTz3c60", "colab_type": "text" }, "source": [ "# Making Music with Python\n", "So how do we use numbers, variables, maths, and lists to make music? We need some way of converting a list of numbers into musical sounds. That is, we need some way of interpreting a list of numbers into *musical features* — such as pitch, rhythm, or harmony. Obviously there are about a zillion ways to do this, but, as a starting point, I've included some code in the course code repository to work with. A way of interpreting numbers into music is called a *music representation*, and I'll be using this word over and over again throughout the course, because the decisions about music representation have a profound impact on the music that a musical system produces.\n" ] }, { "cell_type": "markdown", "metadata": { "id": "fNq7yfsMfS24", "colab_type": "text" }, "source": [ "## Notebook Setup\n", "First we have to install a few software packages. Don't worry about the specifics of the two code cells below. Just know that we are installing some software packages that we need in order to make sound in Python and then importing them into our current notebook session. \n", "\n", "* Warning: you may see a bunch of text when you execute these cells. Don't worry, it's normal.\n", "* Important: you must run these setup cells everytime you start a new notebook session." ] }, { "cell_type": "code", "metadata": { "id": "PEvFSb0KeN_d", "colab_type": "code", "cellView": "both", "colab": {} }, "source": [ "# install software repositories\n", "from IPython.display import clear_output\n", "!pip install -qq git+https://github.com/davidkant/mai#egg=mai\n", "!apt-get -qq update\n", "!apt-get -qq install -y libfluidsynth1\n", "clear_output()" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "zWbdkTb3eS2W", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "outputId": "157a52da-1073-4e42-eb44-c13536e84c6d" }, "source": [ "# import packages into our notebook session\n", "import mai\n", "import matplotlib.pyplot as plt" ], "execution_count": 2, "outputs": [ { "output_type": "stream", "text": [ "Using TensorFlow backend.\n" ], "name": "stderr" } ] }, { "cell_type": "markdown", "metadata": { "id": "JMF4v1mBfW_a", "colab_type": "text" }, "source": [ "# Representing music as lists of numbers\n", "This is definitely the least inventive thing we could do, but let's start by interpreting a list as a sequence of notes on a piano keyboard. We'll be using a convention for mapping integers to piano keys called [General MIDI](https://en.wikipedia.org/wiki/General_MIDI). In General MIDI, the key middle C on a piano keyboad is mapped to the value `60`. \n" ] }, { "cell_type": "markdown", "metadata": { "id": "Oq5EH0q9z523", "colab_type": "text" }, "source": [ "The course code package contains a function `mai.make_music()` which will get us started. Don't worry about the code syntax in the following cells — we'll learn about functions later. However, try to understand the music representation. That is, how numbers and lists are being interpreted into music." ] }, { "cell_type": "code", "metadata": { "id": "otAj0PGDy213", "colab_type": "code", "outputId": "b5a702c2-66b1-44b8-9c87-9caf78b32086", "colab": { "base_uri": "https://localhost:8080/", "height": 62 } }, "source": [ "# a list of numbers\n", "my_music = [30, 50, 42, 61, 75, 2, 33]\n", "\n", "# list interpreted into music\n", "mai.make_music(my_music)" ], "execution_count": 3, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 3 } ] }, { "cell_type": "markdown", "metadata": { "id": "9wagWfIH7bd4", "colab_type": "text" }, "source": [ "## Visual Representations\n", "I also find it useful to use look at a visual representation. Here's a simple *line plot*.\n", "\n" ] }, { "cell_type": "code", "metadata": { "id": "goYotiQg7Tj0", "colab_type": "code", "outputId": "9b50c212-ae7c-4fe5-91d2-93018319cf8c", "colab": { "base_uri": "https://localhost:8080/", "height": 211 } }, "source": [ "# line plot\n", "plt.figure(figsize=(9,3))\n", "plt.plot(my_music)\n", "plt.show()" ], "execution_count": 4, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "cc8QKluCaGCq", "colab_type": "text" }, "source": [ "Musicians are generally more familiar with something called *piano roll*, which looks more like this. The horizontal axis represents time (in this case, in seconds) and the vertical axis represents pitch." ] }, { "cell_type": "code", "metadata": { "id": "WGW7tyccaLNJ", "colab_type": "code", "outputId": "a3bc6726-d2f3-4ffc-92b5-6c0fe179e4de", "colab": { "base_uri": "https://localhost:8080/", "height": 211 } }, "source": [ "# music plot\n", "mai.make_music_plot(my_music)" ], "execution_count": 5, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "uty1vVOazqzO", "colab_type": "text" }, "source": [ "## Duration\n", "Let's slow that music down by changing the note **duration** to `1` second. Do this by adding the keyword `durs` inside the parenthesis and giving it the value `1`." ] }, { "cell_type": "code", "metadata": { "id": "YTWfIoKnd8uB", "colab_type": "code", "outputId": "e8c5e69c-dc3d-4626-c1f4-df64f76d1432", "colab": { "base_uri": "https://localhost:8080/", "height": 256 } }, "source": [ "# pitches\n", "my_music = [30, 50, 42, 61, 75, 2, 33]\n", "\n", "# plot it\n", "mai.make_music_plot(my_music, durs=1)\n", "\n", "# play it\n", "mai.make_music(my_music, durs=1)" ], "execution_count": 6, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "execute_result", "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 6 } ] }, { "cell_type": "markdown", "metadata": { "id": "R31iBb3_z1gT", "colab_type": "text" }, "source": [ "Now let's give it a **list of durations** called `my_durs`. I think we just figured out to how represent *rhythm*!" ] }, { "cell_type": "code", "metadata": { "id": "8WNuLFx9zPbE", "colab_type": "code", "outputId": "9e660310-0af8-40d2-e018-b7f960e31208", "colab": { "base_uri": "https://localhost:8080/", "height": 256 } }, "source": [ "# pitches\n", "my_music = [30, 50, 42, 61, 75, 2, 33]\n", "\n", "# durations\n", "my_durs = [0.1, 1.0, 0.3, 0.25, 0.5, 2.0, 0.1]\n", "\n", "# plot it\n", "mai.make_music_plot(my_music, durs=my_durs)\n", "\n", "# play it\n", "mai.make_music(my_music, durs=my_durs)" ], "execution_count": 7, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "execute_result", "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 7 } ] }, { "cell_type": "markdown", "metadata": { "id": "3hp3pG4u0A1I", "colab_type": "text" }, "source": [ "## Instrument\n", "We can change the **instrument** using the the keyword `pgm`. Check out General Midi [Program change events](https://en.wikipedia.org/wiki/General_MIDI#Program_change_events) for a list of instruments and their program numbers `pgm`." ] }, { "cell_type": "code", "metadata": { "id": "zwSV-f5TzfMb", "colab_type": "code", "outputId": "e9e42561-b562-4e32-a214-cc87ffb31c0b", "colab": { "base_uri": "https://localhost:8080/", "height": 62 } }, "source": [ "# pitches\n", "my_music = [30, 50, 42, 61, 75, 2, 33]\n", "\n", "# durations\n", "my_durs = [0.1, 1.0, 0.3, 0.25, 0.5, 2.0, 0.1]\n", "\n", "# play it with MIDI program 39\n", "mai.make_music(my_music, durs=my_durs, pgm=39)" ], "execution_count": 8, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 8 } ] }, { "cell_type": "markdown", "metadata": { "id": "LcJ75xbQ0GhC", "colab_type": "text" }, "source": [ "We can use **drum sounds** instead by setting keyword `is_drums` to `True`. Check out General Midi [Percussion](https://en.wikipedia.org/wiki/General_MIDI#Percussion) for a list of percussion instruments. Change the note values of `my_music` to hear the different percussion sounds." ] }, { "cell_type": "code", "metadata": { "id": "vxEgHv_7zkG2", "colab_type": "code", "outputId": "8743a6f9-261b-497f-d2e0-2691bbb68de3", "colab": { "base_uri": "https://localhost:8080/", "height": 62 } }, "source": [ "# pitches\n", "my_music = [30, 50, 42, 61, 75, 2, 33]\n", "\n", "# durations\n", "my_durs = [0.1, 1.0, 0.3, 0.25, 0.5, 2.0, 0.1]\n", "\n", "# play it with drum sounds\n", "mai.make_music(my_music, durs=my_durs, is_drum=True)" ], "execution_count": 9, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 9 } ] }, { "cell_type": "markdown", "metadata": { "id": "X8s_4cdDzO6k", "colab_type": "text" }, "source": [ "## More Info\n", "If you want to know more (and have some Python experience) you can check out the help file or consult the [github page](https://github.com/davidkant/mai)" ] }, { "cell_type": "code", "metadata": { "id": "ewyO_brJfCXF", "colab_type": "code", "outputId": "3bfcb784-323a-47d7-dd05-a46849d1e3f7", "colab": { "base_uri": "https://localhost:8080/", "height": 693 } }, "source": [ "help(mai.make_music)" ], "execution_count": 10, "outputs": [ { "output_type": "stream", "text": [ "Help on function make_music in module mai.music_makers:\n", "\n", "make_music(pitches=60, durs=0.333, pgm=1, pan=64, is_drum=False, format='inbrowser', sr=16000, resolution=220)\n", " Turn lists of numbers into music.\n", " \n", " Converts pitch and duration values into MIDI and/or audio playback. Uses\n", " `pretty_midi` for MIDI representation handling, fluidsynth for resynthesis,\n", " and `IPython.display.Audio` for browser playback.\n", " \n", " Parameters\n", " ----------\n", " pitches : list or scalar\n", " List of pitches, or scalar if constant pitch. Floating point values are\n", " interpreted as microtonal pitch deviations.\n", " durs: list or scalar\n", " List of durations, or scalar if constant duration.\n", " pgm: number\n", " MIDI program number, in range ``[0, 127]``.\n", " pan: number\n", " Pan value, in range ``[0, 127]``.\n", " is_drum : bool\n", " If True use percussion channel 10.\n", " format : string\n", " Which format to render sound to?\n", " - `'MIDI'` returns MIDI as a `pretty_midi` object\n", " - `'audio'` returns waveforms as a `numpy` nd.array\n", " - `'inbrowser'` returns `IPython.display.Audio` widget\n", " - `'autoplay'` returns `IPython.display.Audio` widget and plays it\n", " \n", " Returns\n", " -------\n", " synthesized: depends on the value of `format`.\n", " \n", " Notes\n", " -----\n", " If len(pitches) and len(durs) do not match, the smaller list is extended to\n", " match the length of the longer list by repeating the last value.\n", "\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "1OxEsZqXg350", "colab_type": "text" }, "source": [ "# A preview of coming attractions: Generating music\n", "\n", "OKTHEN, now the question is: how do we find the right numbers for the music we want to hear? We're going to see many many many different answers to this question throughout the course. Think about it and come to our next class meeting with some initial thoughts." ] }, { "cell_type": "markdown", "metadata": { "id": "mGQ7-whS6uI_", "colab_type": "text" }, "source": [ "Here are some ideas to get you started. The advantage of using a computer is that we don't have to hand-pick all of the notes. Here we use the nifty list comprehension to *procedurally generate* note pitches and durations. Don't worry about the code in these cells, just listen." ] }, { "cell_type": "markdown", "metadata": { "id": "V9CeFvG9fRsq", "colab_type": "text" }, "source": [ "###Ex 1: Duration inverse to pitch\n", "In this example, the value of the note duration is inverse to its pitch value, meaning `duration = 1.0 / pitch`." ] }, { "cell_type": "code", "metadata": { "id": "WuyImAwKxTMC", "colab_type": "code", "outputId": "82e71c42-0ede-4985-f452-77adb3b0d11d", "colab": { "base_uri": "https://localhost:8080/", "height": 256 } }, "source": [ "# pitches\n", "my_music = [x for x in range(48)]\n", "\n", "# durations\n", "my_durs = [1.0/(x+1) for x in range(48)]\n", "\n", "# plot it\n", "mai.make_music_plot(my_music, durs=my_durs)\n", "\n", "# play it\n", "mai.make_music(my_music, durs=my_durs, pgm=1)" ], "execution_count": 11, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\nwllgSJKkwv0/2wbM2UTOIvAAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "execute_result", "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 11 } ] }, { "cell_type": "markdown", "metadata": { "id": "x7BrGAxCOXhI", "colab_type": "text" }, "source": [ "### Ex 2: 100 notes between C and C# (two adjacent keys on the piano)\n", "If you're feeling too confined by the twelve notes of the piano keyboard, floats are interepreted as microtones." ] }, { "cell_type": "code", "metadata": { "id": "s4Y1Nn2dZPsb", "colab_type": "code", "outputId": "1e6a15ef-d44c-4873-db62-9d0d1d566c35", "colab": { "base_uri": "https://localhost:8080/", "height": 256 } }, "source": [ "# pitches\n", "my_music = [60 + x/100.0 for x in range(100)]\n", "\n", "# durations\n", "my_durs = 3.0/100.0\n", "\n", "# plot it\n", "mai.make_music_plot(my_music, durs=my_durs)\n", "\n", "# play it\n", "mai.make_music(my_music, durs=my_durs, pgm=1)" ], "execution_count": 12, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "execute_result", "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 12 } ] }, { "cell_type": "markdown", "metadata": { "id": "cNO4XJ79OizG", "colab_type": "text" }, "source": [ "###Ex 3: Random microtonal pitches\n", "Just some random pitches and durations." ] }, { "cell_type": "code", "metadata": { "id": "mEl8A3TgZj1F", "colab_type": "code", "outputId": "53b904b0-4268-4460-c64a-4af00c6b6a36", "colab": { "base_uri": "https://localhost:8080/", "height": 256 } }, "source": [ "import random\n", "\n", "# pitches\n", "my_music = [random.random() * 60.0 + 30 for x in range(20)]\n", "\n", "# durations\n", "my_durs = [random.random() for x in range(20)]\n", "\n", "# plot it\n", "mai.make_music_plot(my_music, durs=my_durs)\n", "\n", "# play it\n", "mai.make_music(my_music, durs=my_durs, pgm=1)" ], "execution_count": 13, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "execute_result", "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 13 } ] }, { "cell_type": "markdown", "metadata": { "id": "nqaAAdlxOmRe", "colab_type": "text" }, "source": [ "### Ex 4: Using a sine function to generate pitches\n", "In this example, the note pitches follow the curve of a sine function." ] }, { "cell_type": "code", "metadata": { "id": "leEF8PKxZ9eP", "colab_type": "code", "outputId": "0c7db8ef-a1c5-4c53-ca12-9c2dc5b12127", "colab": { "base_uri": "https://localhost:8080/", "height": 256 } }, "source": [ "import math\n", "\n", "# pitches\n", "my_music = [math.sin(0.5*x) * 60.0 + 30 for x in range(100)]\n", "\n", "# durations\n", "my_durs = 0.1\n", "\n", "# plot it\n", "mai.make_music_plot(my_music, durs=my_durs)\n", "\n", "# play it\n", "mai.make_music(my_music, durs=my_durs, pgm=1)" ], "execution_count": 14, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\nYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "execute_result", "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 14 } ] } ] }