{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Extracting information from MIDI files\n", "\n", "In our first lesson we want to get to know how to work with datasets so we can\n", "\n", "* parse a dataset\n", "* analyse the dataset and make sure it matches our expectations\n", "* check if errors occured during parsing\n", "\n", "After this is done we want to find out how we can generate new drum patterns from the existing one.\n", "But in order to do this we need to take a look at the quantisation (?) of our patterns.\n", "\n", "In such experiments, the cleaning of the dataset and setting the data up properly takes most of the time. But if we make mistakes here those mistakes will propagate through our system – so it's a good idea to spend some time with this task." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import os\n", "import glob\n", "\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "np.random.seed(42) # makes the randomness deterministic\n", "\n", "%matplotlib inline\n", "# todo: try %matplotlib widget\n", "plt.rcParams['figure.figsize'] = (15, 5)\n", "plt.rcParams['axes.grid'] = True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting the dataset\n", "\n", "As our methods in this machine learning based workshop rely on data, we need a way to obtain such data. This will be on of our first endeavours.\n", "Thankfully there are search engines which help us to find data in the internet easily.\n", "When searching for *\"midi dataset\"*, one search result is [https://colinraffel.com/projects/lmd/](https://colinraffel.com/projects/lmd/).\n", "\n", "> The Lakh MIDI dataset is a collection of 176,581 unique MIDI files, 45,129 of which have been matched and aligned to entries in the Million Song Dataset. [...]\n", "\n", "Of course the cultural bias of such a dataset is a thing we need to be aware of.\n", "What kind of music is transcribable into the MIDI format and what kind of music is transcribed as MIDI at all?\n", "Maybe we can shed some light on the last question by inspecting the dataset.\n", "But before we can do this, we need to download and understand the data.\n", "\n", "We use a function which will check if the files are already downloaded and if not will download and extract the directory." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "midi already downloaded to ../datasets/lmd/lmd_full.tap.gz\n", "json already downloaded to ../datasets/lmd/md5_to_path.json\n" ] } ], "source": [ "import urllib.request\n", "import subprocess\n", "\n", "def download_dataset(download_path: str = \"../datasets/lmd\"):\n", " os.makedirs(download_path, exist_ok=True)\n", " archive_dir = os.path.join(download_path, \"lmd_full\")\n", " \n", " dl_files = {\n", " \"midi\": {\n", " \"path\": os.path.join(download_path, \"lmd_full.tap.gz\"),\n", " \"url\": \"http://hog.ee.columbia.edu/craffel/lmd/lmd_full.tar.gz\"\n", " },\n", " \"json\": {\n", " \"path\": os.path.join(download_path, \"md5_to_path.json\"),\n", " \"url\": \"http://hog.ee.columbia.edu/craffel/lmd/md5_to_paths.json\"\n", " },\n", " }\n", " \n", " for dl_name, dl in dl_files.items():\n", " if os.path.isfile(dl[\"path\"]) or (dl_name == \"midi\" and os.path.isdir(archive_dir)):\n", " print(f\"{dl_name} already downloaded to {dl['path']}\")\n", " continue\n", " print(f\"Start downloading {dl_name} to {dl['path']} - this can take multiple minutes!\")\n", " urllib.request.urlretrieve(dl['url'], dl['path'])\n", " print(f\"Finished downloading\")\n", " \n", " if not os.path.isdir(archive_dir):\n", " print(\"Start extracting the files of archive - this will take some minutes\")\n", " # todo: windows has no tar\n", " subprocess.check_output([\n", " 'tar', '-xzf', dl_files[\"midi\"][\"path\"],\n", " '-C', os.path.join(download_path)\n", " ])\n", " print(\"Finished extracting\")\n", " \n", " if os.path.isfile(dl_files[\"midi\"][\"path\"]):\n", " print(\"Remove archive\")\n", " os.remove(dl_files[\"midi\"][\"path\"])\n", "\n", "download_dataset()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Parsing the dataset\n", "\n", "When working with large sets of files the unix utility [glob](https://en.wikipedia.org/wiki/Glob_(programming)) comes in handy as we can describe the pattern of the file paths we want to match instead of listing all files.\n", "\n", "When we take a quick look at the pattern it seems they all follow a structure like\n", "\n", "```\n", "../datasets/lmd/lmd_full/2/4a0cbb3f083d14d57858c87b26f85873.mid\n", "```\n", "\n", "Soon we will understand why the filename has this cryptic format, but for now we simply want to parse all available files into an array." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 178561 midi files in dataset\n" ] } ], "source": [ "midi_files = glob.glob('../datasets/lmd/lmd_full/*/*.mid')\n", "print(f'Found {len(midi_files)} midi files in dataset')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "array(['../datasets/lmd/lmd_full/4/4a69b1a10e4dbe409ac922de4f6256d8.mid',\n", " '../datasets/lmd/lmd_full/b/b102261b4c27ea58bad4777b5df5be5e.mid',\n", " '../datasets/lmd/lmd_full/3/3a8ccaab480919c35f37fdf08c238e29.mid',\n", " '../datasets/lmd/lmd_full/d/dc6416232e05b3d44fb62007ca84b474.mid',\n", " '../datasets/lmd/lmd_full/4/4fb744a04c1afbb0309b581410b33363.mid'],\n", " dtype='" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pretty_midi as pm\n", "\n", "midi_stream = pm.PrettyMIDI(example_midi_file)\n", "midi_stream" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After we have now loaded a MIDI file with *pretty_midi* we now take a look at how we can access the data.\n", "Therefore the [documentation of pretty_midi](https://craffel.github.io/pretty-midi/) will help us to know how to access the MIDI information." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "189.431068" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_stream.get_end_time()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "will give us the time in seconds of the MIDI file" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.0000000e+00, 1.2500000e-02, 4.4107100e-01, 8.6964200e-01,\n", " 1.2982130e+00, 1.7267840e+00, 2.1553550e+00, 2.5839260e+00,\n", " 3.0124970e+00, 3.4410680e+00, 3.8410680e+00, 4.2410680e+00,\n", " 4.6410680e+00, 5.0410680e+00, 5.4410680e+00, 5.8410680e+00,\n", " 6.2410680e+00, 6.6410680e+00, 7.0410680e+00, 7.4410680e+00,\n", " 7.8410680e+00, 8.2410680e+00, 8.6410680e+00, 9.0410680e+00,\n", " 9.4410680e+00, 9.8410680e+00, 1.0241068e+01, 1.0641068e+01,\n", " 1.1041068e+01, 1.1441068e+01, 1.1841068e+01, 1.2241068e+01,\n", " 1.2641068e+01, 1.3041068e+01, 1.3441068e+01, 1.3841068e+01,\n", " 1.4241068e+01, 1.4641068e+01, 1.5041068e+01, 1.5441068e+01,\n", " 1.5841068e+01, 1.6241068e+01, 1.6641068e+01, 1.7041068e+01,\n", " 1.7441068e+01, 1.7841068e+01, 1.8241068e+01, 1.8641068e+01,\n", " 1.9041068e+01, 1.9441068e+01])" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_stream.get_beats()[0:50] # limit to 50 entries for printing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "will give us the position in secounds of all beats (so any action) in a MIDI file" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([0. , 0.0125 , 3.441068]),\n", " array([120. , 140.00014, 150. ]))" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_stream.get_tempo_changes()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "will tell us any changes in the tempo in bpm.\n", "Keep in mind that we do not have two tempo changes here but that the function returns two arrays - the first one with the mark in seconds where the tempo gets changed and another one to what bpm it changes - for now we are only interested in the second array.\n", "\n", "We should also prepare for the case that the MIDI file does not provide any tempo information." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[TimeSignature(numerator=4, denominator=4, time=0.0125),\n", " TimeSignature(numerator=2, denominator=4, time=21.041068000000003),\n", " TimeSignature(numerator=4, denominator=4, time=21.841068000000003),\n", " TimeSignature(numerator=2, denominator=4, time=36.241068000000006),\n", " TimeSignature(numerator=4, denominator=4, time=37.041068),\n", " TimeSignature(numerator=2, denominator=4, time=51.441068),\n", " TimeSignature(numerator=4, denominator=4, time=52.241068000000006),\n", " TimeSignature(numerator=2, denominator=4, time=66.641068),\n", " TimeSignature(numerator=4, denominator=4, time=67.441068),\n", " TimeSignature(numerator=2, denominator=4, time=107.441068),\n", " TimeSignature(numerator=4, denominator=4, time=108.24106800000001),\n", " TimeSignature(numerator=2, denominator=4, time=122.641068),\n", " TimeSignature(numerator=4, denominator=4, time=123.44106800000002)]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_stream.time_signature_changes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "tells us the time signatures of the MIDI file." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4/4\n" ] } ], "source": [ "time_signature = midi_stream.time_signature_changes[0]\n", "print(f'{time_signature.numerator}/{time_signature.denominator}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As with the tempo we should also prepare for the case that no time signature information is given on the MIDI file." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Instrument(program=62, is_drum=False, name=\"\"),\n", " Instrument(program=34, is_drum=False, name=\"\"),\n", " Instrument(program=25, is_drum=False, name=\"\"),\n", " Instrument(program=28, is_drum=False, name=\"\"),\n", " Instrument(program=25, is_drum=False, name=\"\"),\n", " Instrument(program=30, is_drum=False, name=\"\"),\n", " Instrument(program=26, is_drum=False, name=\"\"),\n", " Instrument(program=18, is_drum=False, name=\"\"),\n", " Instrument(program=0, is_drum=True, name=\"\"),\n", " Instrument(program=0, is_drum=True, name=\"\"),\n", " Instrument(program=0, is_drum=True, name=\"\"),\n", " Instrument(program=0, is_drum=True, name=\"\"),\n", " Instrument(program=0, is_drum=True, name=\"\")]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_stream.instruments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "gives us access to all instruments with its names and if this is a drum track or not." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also take a look at the notes of each instrument" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Note(start=9.834401, end=9.937735, pitch=62, velocity=109),\n", " Note(start=10.037735, end=10.311068, pitch=62, velocity=107),\n", " Note(start=10.437735, end=10.847735, pitch=62, velocity=113),\n", " Note(start=10.834401, end=11.057735, pitch=60, velocity=109),\n", " Note(start=11.034401, end=11.237735, pitch=59, velocity=106),\n", " Note(start=11.237735, end=11.594401, pitch=62, velocity=108),\n", " Note(start=11.627735, end=11.834401, pitch=60, velocity=101),\n", " Note(start=11.827735, end=12.247735, pitch=59, velocity=108),\n", " Note(start=12.224401, end=12.544401, pitch=62, velocity=106),\n", " Note(start=13.024401, end=13.131068, pitch=64, velocity=102)]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_stream.instruments[0].notes[0:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Performance\n", "\n", "Now we know how we can use *pretty_midi* to load a MIDI file and access the information of a single MIDI file.\n", "But the problem is that a loading of a MIDI file is pretty slow in Python - we will do some measurements now to have a quick way to access the information we are interested in.\n", "\n", "We can use a built in tool of *Jupyter* which is `%%timeit` which will do multiple runs of a cell and measure the time it takes for each run." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "186 ms ± 6.59 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" ] } ], "source": [ "%%timeit\n", "\n", "pm.PrettyMIDI(example_midi_file)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course this time to parse the MIDI file depends on the complexity of our MIDI file. But now its time to do some maths.\n", "For the sake of simplicity we will assume that it takes around 100ms to load a MIDI file.\n", "\n", "$$ 0.1 \\frac{\\text{sec}}{\\text{file}} * 178000 \\text{ files} = 17800 \\text{ sec} \\approx 296 \\text{ minutes} \\approx 4 \\text{ hours}$$\n", "\n", "Note that this assumes that we do not process multiple files in paralell, which is possible but also tricky.\n", "Also this is only for the loading of the data, we not have acessed yet any data.\n", "\n", "Maybe there is a file format to which we can store the MIDI files and load them quicker whenever we need them.\n", "[*note_seq*](https://github.com/magenta/note-seq) from the [magenata project](https://magenta.tensorflow.org/) provide such a format called *note sequence* which nicely interacts with *pretty_midi*." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import note_seq" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "14.4 ms ± 381 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], "source": [ "%%timeit\n", "\n", "notes = note_seq.midi_to_note_sequence(midi_stream)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So the conversion of this file is fast compared to the parsing of our MIDI file.\n", "The problem is that we still need the MIDI file parsed and we have not yet taken a look at the saving and loading of a note sequence.\n", "\n", "*note_seq* is using a special kind of format for this which is called [protobuf](https://developers.google.com/protocol-buffers/docs/pythontutorial) - a binary file format to store and exchange files developed by Google.\n", "The advantage is that this is really fast and efficient as it is a binary format and we can exchange the files to other programming languages - think of it like a binary version of JSON but with type safety included.\n", "\n", "We start by saving the note sequence into a protobuf and try loading it again from our harddrive." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "notes = note_seq.midi_to_note_sequence(midi_stream)\n", "\n", "with open('note_seq_test.protobuf', 'wb') as f:\n", " f.write(notes.SerializeToString())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.47 ms ± 97.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], "source": [ "%%timeit\n", "\n", "with open('note_seq_test.protobuf', 'rb') as f:\n", " notes_loaded = note_seq.NoteSequence.FromString(f.read())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lets say it takes about 4 ms to load a protobuf file - now we will do the calculation from before again.\n", "\n", "$$ 0.004 \\frac{\\text{sec}}{\\text{file}} * 178000 \\text{ files} = 712 \\text{ sec} \\approx 11 \\text{ minutes}$$\n", "\n", "which is much more acceptable.\n", "And we have not yet considered any parallelisation of the code." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But before we convert everything to a note sequence as a protobuf we should compare the file size of the two file formats." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "File size of ../datasets/lmd/lmd_full/e/ed05335f8f6c273f506a997137b2805b.mid: 46.6513671875 kbytes\n", "File size of note_seq_test.protobuf: 195.958984375 kbytes\n" ] } ], "source": [ "for f in [example_midi_file, 'note_seq_test.protobuf']:\n", " print(f'File size of {f}: {os.path.getsize(f)/1024} kbytes')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It turns out that we are trading storage in favour of computation power.\n", "\n", "Before we can decide if we really want to trade, we may need to take a look at the file size of our MIDI dataset.\n", "For this we can use a functionality of Jupyter to execute commands in a shell from within Jupyter by appending a `!` in front of the command.\n", "In order to get the size of a dictionary we will use the unix tool [du](https://linux.die.net/man/1/du) with the arguments `s` (sum everything within the path) and `h` (convert number of bytes to a human readable format)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5.9G\t../datasets/lmd/lmd_full\n" ] } ], "source": [ "!du -sh ../datasets/lmd/lmd_full" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have around 6 gigabytes of files here - when we convert them to protobuf we will blow them up by a factor of $\\approx 4$ so we will have about 24 GB of protobuf files. This is still acceptable somehow." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Processing all files\n", "\n", "So after we now know how to load, access and convert the files to a nicer format, we still need to take a look at how we can do this on our 180k files and maybe save some time here by a little bit of programming effort.\n", "\n", "First we will start by programming a function in which we combine everything we did before and return to us all necessary information as a dictionary." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "PROTO_SAVE_PATH = '../datasets/lmd/proto/'\n", "\n", "# make sure that the folder we want to save to actually exists\n", "os.makedirs(PROTO_SAVE_PATH, exist_ok=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from typing import Dict\n", "\n", "from mido import KeySignatureError\n", "\n", "def parse_midi_file(midi_file_path: str, proto_save_path: str=PROTO_SAVE_PATH) -> Dict:\n", " r = {\n", " 'midi_path': midi_file_path,\n", " 'midi_error': True,\n", " }\n", " midi_name = os.path.splitext(midi_file_path.split(os.sep)[-1])[0]\n", " proto_path = os.path.join(PROTO_SAVE_PATH, f'{midi_name}.protobuf')\n", " \n", " r['original_names'] = md5_filenames[midi_name]\n", " \n", " try:\n", " stream = pm.PrettyMIDI(midi_file_path)\n", " r['midi_error'] = False\n", " except (OSError, ValueError, IndexError, KeySignatureError, EOFError, ZeroDivisionError):\n", " return r\n", " \n", " try:\n", " # r['beat_start'] = stream.estimate_beat_start() # omitted b/c adds 200ms to parsing\n", " r['estimate_tempo'] = stream.estimate_tempo()\n", " r['tempi_sec'], r['tempi'] = stream.get_tempo_changes() \n", " r['end_time'] = stream.get_end_time()\n", " r['drums'] = any([i.is_drum for i in stream.instruments])\n", " r['resolution'] = stream.resolution\n", " r['instrument_names'] = [i.name.strip() for i in stream.instruments]\n", " r['num_time_signature_changes'] = len(stream.time_signature_changes)\n", " except ValueError as e:\n", " # ValueError: Can't estimate beat start when there are no notes.\n", " # ValueError: Can't provide a global tempo estimate when there are fewer than two notes.\n", " print(f\"Could not parse MIDI file {midi_file_path}: {e}\")\n", " \n", " notes = note_seq.midi_to_note_sequence(stream)\n", " with open(proto_path, 'wb') as f:\n", " f.write(notes.SerializeToString())\n", " r['proto_path'] = proto_path\n", " \n", " return r" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we want to try out the function on a single MIDI file." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'midi_path': '../datasets/lmd/lmd_full/e/ed05335f8f6c273f506a997137b2805b.mid',\n", " 'midi_error': False,\n", " 'original_names': ['QUALITY MIDI/EClapton-Promises.mid'],\n", " 'estimate_tempo': 159.6553471870248,\n", " 'tempi_sec': array([0. , 0.0125 , 3.441068]),\n", " 'tempi': array([120. , 140.00014, 150. ]),\n", " 'end_time': 189.431068,\n", " 'drums': True,\n", " 'resolution': 120,\n", " 'instrument_names': ['', '', '', '', '', '', '', '', '', '', '', '', ''],\n", " 'num_time_signature_changes': 13,\n", " 'proto_path': '../datasets/lmd/proto/ed05335f8f6c273f506a997137b2805b.protobuf'}" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "parse_midi_file(example_midi_file)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So this works as expected - time to time it as well." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "233 ms ± 10.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" ] } ], "source": [ "%%timeit\n", "\n", "parse_midi_file(example_midi_file)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It seems that accessing the MIDI data via *pretty_midi* does not come for free.\n", "Repeating the calculation from before:\n", "\n", "$$ 0.2 \\frac{\\text{sec}}{\\text{file}} * 178000 \\text{ files} = 35600 \\text{ sec} \\approx 593 \\text{ minutes} \\approx 10 \\text{ hours}$$\n", "\n", "This is not unheard of but we can reduce the time by parallelizing it for which we need to do some tricks into which we will not go detail.\n", "On a recent i9 processor the next step will take around 90 minutes if executed for the first time." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Use cached parquet file midi_files_full.parquet\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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
midi_pathmidi_errorestimate_tempotempi_sectempiend_timedrumsresolutioninstrument_namesnum_time_signature_changesproto_path
81923../datasets/lmd/lmd_full/f/f4b72836981feedb9e1...False175.232953[0.0][82.00003553334874]128.780432True384.0[harmnica, accordn2, drum, acoubass, pianogrd,...1.0../datasets/lmd/proto/f4b72836981feedb9e1046f1...
171833../datasets/lmd/lmd_full/5/5f3eaf75cbc1b2554df...False213.043443[0.0, 297.04290665, 297.1153704, 297.188899816...[69.99998833333528, 69.00001725000433, 67.9999...302.411045True120.0[YO TE AMO;CHAYANE, YO TE AMO;CHAYANE, YO TE A...1.0../datasets/lmd/proto/5f3eaf75cbc1b2554dfa60bd...
161501../datasets/lmd/lmd_full/2/2f02103cfb1764e661d...False170.691458[0.0, 0.004166666666666667, 2.0015625][75.0, 120.0, 75.0]174.718229True384.0[, , , , , , , , , , , , , , , ]1.0../datasets/lmd/proto/2f02103cfb1764e661d54151...
39942../datasets/lmd/lmd_full/6/609b19dde84d2374b7d...False237.529957[0.0, 0.0026041666666666665][120.0, 110.00091667430561]254.776049True384.0[S-File, S-File, S-File, S-File, S-File, S-Fil...1.0../datasets/lmd/proto/609b19dde84d2374b7d19124...
100593../datasets/lmd/lmd_full/d/de4dde0f1e960e41360...False170.384180[0.0, 3.0, 183.33574275, 183.66386775][120.0, 67.00002903334591, 60.0, 49.0000318500...190.137078False192.0[, , , , , ]0.0../datasets/lmd/proto/de4dde0f1e960e413602c493...
44272../datasets/lmd/lmd_full/6/6f74186f4c163863630...False242.119770[0.0][122.00006913337249]228.161756True480.0[drummix, bass, ac piano, Vocal, back voc, ac ...1.0../datasets/lmd/proto/6f74186f4c163863630e8baa...
15131../datasets/lmd/lmd_full/0/0d8e9c4eb761a3e632b...False245.724188[0.0, 3.9344240000000004, 14.843497999999999, ...[122.00006913337249, 121.00018755029072, 123.0...251.814031True96.0[TAKE ME HOME Bextor/Aller/...1.0../datasets/lmd/proto/0d8e9c4eb761a3e632ba4f10...
34735../datasets/lmd/lmd_full/6/6d3149b41d088c63627...False84.000025[0.0, 89.2856875, 89.88351320833333, 90.410473...[42.00001260000378, 46.00002913335179, 51.0000...340.282369False96.0[Voice (Alto), Voice (Alto), Voice (Alto), Pia...6.0../datasets/lmd/proto/6d3149b41d088c6362792faf...
45905../datasets/lmd/lmd_full/1/1a931072e21340f256b...False207.446994[0.0][120.0]280.114583True384.0[A.PIANO 1, FINGERDBAS, A.PIANO 1, PAN FLUTE, ...1.0../datasets/lmd/proto/1a931072e21340f256b96104...
12844../datasets/lmd/lmd_full/0/0a7c38887ba4882921e...False224.582071[0.0][127.96996971377385]193.497545True480.0[CANDOMBE, PARA, GARDEL, http://fberni.tripod....1.0../datasets/lmd/proto/0a7c38887ba4882921ee2c82...
114123../datasets/lmd/lmd_full/4/455fcb4f4c5ad4d10da...False153.020774[0.0, 7.15475625, 7.3302190000000005, 7.506771...[85.95680670463092, 85.48823040787859, 84.9608...100.750126False1024.0[]1.0../datasets/lmd/proto/455fcb4f4c5ad4d10da384b6...
14339../datasets/lmd/lmd_full/0/029c4baa3089eca3817...False199.999987[0.0, 6.461539, 7.961539, 9.790110733333334, 9...[64.99999458333379, 40.0, 69.99998833333528, 6...330.377789True120.0[, Bass, Bass, Strings, Melodia, Slowstrings, ...5.0../datasets/lmd/proto/029c4baa3089eca381772e2b...
131099../datasets/lmd/lmd_full/3/353116ea8d2eb4041c9...False260.000260[0.0][130.00013000013]51.692256True96.0[MIDI Ch. 1, MIDI Ch. 2, MIDI Drums]0.0../datasets/lmd/proto/353116ea8d2eb4041c9f4622...
124606../datasets/lmd/lmd_full/3/3574baf9f9cdfa4c3e1...False207.262310[0.0, 0.16129033333333334, 0.9425403333333333,...[30.999997933333468, 32.0, 32.99999670000033, ...273.626126True120.0[Rhodes Piano, Synth Bass H, Synth Bass L, Aco...1.0../datasets/lmd/proto/3574baf9f9cdfa4c3e1da456...
136078../datasets/lmd/lmd_full/e/eb59c9f6854d897a03a...False193.775528[0.0, 3.5416666666666665][120.0, 109.99990833340973]217.860027True240.0[Bass / Acoustic bass, Piano / Rhodes, Melody ...1.0../datasets/lmd/proto/eb59c9f6854d897a03a3ed78...
\n", "
" ], "text/plain": [ " midi_path midi_error \\\n", "81923 ../datasets/lmd/lmd_full/f/f4b72836981feedb9e1... False \n", "171833 ../datasets/lmd/lmd_full/5/5f3eaf75cbc1b2554df... False \n", "161501 ../datasets/lmd/lmd_full/2/2f02103cfb1764e661d... False \n", "39942 ../datasets/lmd/lmd_full/6/609b19dde84d2374b7d... False \n", "100593 ../datasets/lmd/lmd_full/d/de4dde0f1e960e41360... False \n", "44272 ../datasets/lmd/lmd_full/6/6f74186f4c163863630... False \n", "15131 ../datasets/lmd/lmd_full/0/0d8e9c4eb761a3e632b... False \n", "34735 ../datasets/lmd/lmd_full/6/6d3149b41d088c63627... False \n", "45905 ../datasets/lmd/lmd_full/1/1a931072e21340f256b... False \n", "12844 ../datasets/lmd/lmd_full/0/0a7c38887ba4882921e... False \n", "114123 ../datasets/lmd/lmd_full/4/455fcb4f4c5ad4d10da... False \n", "14339 ../datasets/lmd/lmd_full/0/029c4baa3089eca3817... False \n", "131099 ../datasets/lmd/lmd_full/3/353116ea8d2eb4041c9... False \n", "124606 ../datasets/lmd/lmd_full/3/3574baf9f9cdfa4c3e1... False \n", "136078 ../datasets/lmd/lmd_full/e/eb59c9f6854d897a03a... False \n", "\n", " estimate_tempo tempi_sec \\\n", "81923 175.232953 [0.0] \n", "171833 213.043443 [0.0, 297.04290665, 297.1153704, 297.188899816... \n", "161501 170.691458 [0.0, 0.004166666666666667, 2.0015625] \n", "39942 237.529957 [0.0, 0.0026041666666666665] \n", "100593 170.384180 [0.0, 3.0, 183.33574275, 183.66386775] \n", "44272 242.119770 [0.0] \n", "15131 245.724188 [0.0, 3.9344240000000004, 14.843497999999999, ... \n", "34735 84.000025 [0.0, 89.2856875, 89.88351320833333, 90.410473... \n", "45905 207.446994 [0.0] \n", "12844 224.582071 [0.0] \n", "114123 153.020774 [0.0, 7.15475625, 7.3302190000000005, 7.506771... \n", "14339 199.999987 [0.0, 6.461539, 7.961539, 9.790110733333334, 9... \n", "131099 260.000260 [0.0] \n", "124606 207.262310 [0.0, 0.16129033333333334, 0.9425403333333333,... \n", "136078 193.775528 [0.0, 3.5416666666666665] \n", "\n", " tempi end_time drums \\\n", "81923 [82.00003553334874] 128.780432 True \n", "171833 [69.99998833333528, 69.00001725000433, 67.9999... 302.411045 True \n", "161501 [75.0, 120.0, 75.0] 174.718229 True \n", "39942 [120.0, 110.00091667430561] 254.776049 True \n", "100593 [120.0, 67.00002903334591, 60.0, 49.0000318500... 190.137078 False \n", "44272 [122.00006913337249] 228.161756 True \n", "15131 [122.00006913337249, 121.00018755029072, 123.0... 251.814031 True \n", "34735 [42.00001260000378, 46.00002913335179, 51.0000... 340.282369 False \n", "45905 [120.0] 280.114583 True \n", "12844 [127.96996971377385] 193.497545 True \n", "114123 [85.95680670463092, 85.48823040787859, 84.9608... 100.750126 False \n", "14339 [64.99999458333379, 40.0, 69.99998833333528, 6... 330.377789 True \n", "131099 [130.00013000013] 51.692256 True \n", "124606 [30.999997933333468, 32.0, 32.99999670000033, ... 273.626126 True \n", "136078 [120.0, 109.99990833340973] 217.860027 True \n", "\n", " resolution instrument_names \\\n", "81923 384.0 [harmnica, accordn2, drum, acoubass, pianogrd,... \n", "171833 120.0 [YO TE AMO;CHAYANE, YO TE AMO;CHAYANE, YO TE A... \n", "161501 384.0 [, , , , , , , , , , , , , , , ] \n", "39942 384.0 [S-File, S-File, S-File, S-File, S-File, S-Fil... \n", "100593 192.0 [, , , , , ] \n", "44272 480.0 [drummix, bass, ac piano, Vocal, back voc, ac ... \n", "15131 96.0 [TAKE ME HOME Bextor/Aller/... \n", "34735 96.0 [Voice (Alto), Voice (Alto), Voice (Alto), Pia... \n", "45905 384.0 [A.PIANO 1, FINGERDBAS, A.PIANO 1, PAN FLUTE, ... \n", "12844 480.0 [CANDOMBE, PARA, GARDEL, http://fberni.tripod.... \n", "114123 1024.0 [] \n", "14339 120.0 [, Bass, Bass, Strings, Melodia, Slowstrings, ... \n", "131099 96.0 [MIDI Ch. 1, MIDI Ch. 2, MIDI Drums] \n", "124606 120.0 [Rhodes Piano, Synth Bass H, Synth Bass L, Aco... \n", "136078 240.0 [Bass / Acoustic bass, Piano / Rhodes, Melody ... \n", "\n", " num_time_signature_changes \\\n", "81923 1.0 \n", "171833 1.0 \n", "161501 1.0 \n", "39942 1.0 \n", "100593 0.0 \n", "44272 1.0 \n", "15131 1.0 \n", "34735 6.0 \n", "45905 1.0 \n", "12844 1.0 \n", "114123 1.0 \n", "14339 5.0 \n", "131099 0.0 \n", "124606 1.0 \n", "136078 1.0 \n", "\n", " proto_path \n", "81923 ../datasets/lmd/proto/f4b72836981feedb9e1046f1... \n", "171833 ../datasets/lmd/proto/5f3eaf75cbc1b2554dfa60bd... \n", "161501 ../datasets/lmd/proto/2f02103cfb1764e661d54151... \n", "39942 ../datasets/lmd/proto/609b19dde84d2374b7d19124... \n", "100593 ../datasets/lmd/proto/de4dde0f1e960e413602c493... \n", "44272 ../datasets/lmd/proto/6f74186f4c163863630e8baa... \n", "15131 ../datasets/lmd/proto/0d8e9c4eb761a3e632ba4f10... \n", "34735 ../datasets/lmd/proto/6d3149b41d088c6362792faf... \n", "45905 ../datasets/lmd/proto/1a931072e21340f256b96104... \n", "12844 ../datasets/lmd/proto/0a7c38887ba4882921ee2c82... \n", "114123 ../datasets/lmd/proto/455fcb4f4c5ad4d10da384b6... \n", "14339 ../datasets/lmd/proto/029c4baa3089eca381772e2b... \n", "131099 ../datasets/lmd/proto/353116ea8d2eb4041c9f4622... \n", "124606 ../datasets/lmd/proto/3574baf9f9cdfa4c3e1da456... \n", "136078 ../datasets/lmd/proto/eb59c9f6854d897a03a3ed78... " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import math\n", "import multiprocessing\n", "from typing import Optional\n", "\n", "from helpers.helpers import *\n", "\n", "def load_midi_files(parquet_path: str = 'midi_files_{}.parquet', limit: Optional[int] = None) -> pd.DataFrame:\n", " parquet_path = parquet_path.format(limit if limit else 'full')\n", " \n", " if os.path.isfile(parquet_path):\n", " print(f'Use cached parquet file {parquet_path}')\n", " return pd.read_parquet(parquet_path)\n", " \n", " midi_files = glob.glob('../datasets/lmd/lmd_full/*/*.mid')\n", " if limit:\n", " print(f'Limit to {limit} files')\n", " midi_files = np.random.choice(midi_files, limit)\n", " print(f'Parse {len(midi_files)} midi files')\n", " \n", " cpu_count = math.ceil(multiprocessing.cpu_count()*3/4)\n", " with multiprocessing.Pool(cpu_count, maxtasksperchild=5) as p:\n", " midi_meta = p.map(parse_midi_file_async, midi_files, chunksize=255)\n", " print(f'Finished parsing midi files')\n", " \n", " midi_meta = pd.DataFrame(midi_meta)\n", " midi_meta.to_parquet(parquet_path)\n", " \n", " return midi_meta\n", "\n", "# if you want to work with a random subset set the limit argument to num of files as a limit\n", "midi_df = load_midi_files(limit=None)\n", "\n", "midi_df.sample(15)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now also add the original file names from the md5 json file to our dataframe." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "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", " \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", " \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", " \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", " \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", "
midi_pathmidi_errorestimate_tempotempi_sectempiend_timedrumsresolutioninstrument_namesnum_time_signature_changesproto_pathoriginal_files
31900../datasets/lmd/lmd_full/7/745f66980de9ca27fe0...False169.981663[0.0][151.00037750094376]141.733917True96.0[Acc Bass, Piano, Melody, Sax, Solo, E.Guitar,...1.0../datasets/lmd/proto/745f66980de9ca27fe055cc6...[BonJovi/Runaway3.mid, MikeDoyle/MyLittleRunAw...
33585../datasets/lmd/lmd_full/6/68b145d7ffdf4c43e1f...False204.472843[0.0][99.99999999999999]163.656250True96.0[Remelexo, Remelexo, Remelexo, Remelexo, Remel...2.0../datasets/lmd/proto/68b145d7ffdf4c43e1f5f59c...[C/Cesar E Paulinho - Remelexo.mid, Midis Româ...
67436../datasets/lmd/lmd_full/a/a373ed7cd11fb80fac3...False159.432272[0.0][159.0002067002687]154.150743True192.0[Crash Cymbal, Ride Cymbal, Open HiHat, Closed...1.0../datasets/lmd/proto/a373ed7cd11fb80fac3dca06...[t/trust_me.mid, T/trust_me.mid]
142153../datasets/lmd/lmd_full/e/ec2fff2c295943aedf4...False194.483086[0.0][88.70005632453577]259.977287True120.0[You Can Leave Your Hat On, You Can Leave Your...1.0../datasets/lmd/proto/ec2fff2c295943aedf4797c3...[Y/You Can Leave Your Hat on Pm L.mid, Y/You C...
127493../datasets/lmd/lmd_full/3/3fae950c18f739286ec...False160.190137[0.0][160.0]100.425000True480.0[Sax, Sax, French Horn, Piano, Bass, Drums]1.0../datasets/lmd/proto/3fae950c18f739286ec42107...[2009 MIDI/barbra_Ann2-Regents-F160.mid]
138301../datasets/lmd/lmd_full/e/ec16ec22a846e4d4d91...False164.382517[0.0, 186.66648][162.000162000162, 120.0]186.666480True120.0[Vocal, ElecGtr 1, ElecGtr 2, PickedBass, Orga...1.0../datasets/lmd/proto/ec16ec22a846e4d4d91959cc...[c/chaingm.mid, C/chaingm.mid]
83006../datasets/lmd/lmd_full/f/fd8a6fcf912a7ddc602...False160.171123[0.0][80.0]274.525000True120.0[Corazon Partio, Corazon Partio, Corazon Parti...7.0../datasets/lmd/proto/fd8a6fcf912a7ddc60242146...[C/Corazon Partio Pm L.mid, Midis Latinas/Cora...
13575../datasets/lmd/lmd_full/0/0dff276c070ccc16e2b...False203.014003[0.0][190.0002850004275]48.976900True96.0[Bop on the Rocks, Bop on the Rocks, Bop on th...3.0../datasets/lmd/proto/0dff276c070ccc16e2bd6fa1...[Jazz/Bop on.mid, b/bop-on.mid, Jazz/BOP_ON.MI...
134536../datasets/lmd/lmd_full/e/ed793dadf58b913ea24...False192.000192[0.0][140.00014000014]6.861600False96.0[z3ta+ (MIDI)]0.0../datasets/lmd/proto/ed793dadf58b913ea2460ad1...[M/Machinehead - Headwave (Zatox Mix).mid, M/M...
116286../datasets/lmd/lmd_full/4/4c4d48e046e6f5a2fc2...False255.499940[0.0][145.9999659333413]6.575344False96.0[MIDI out]0.0../datasets/lmd/proto/4c4d48e046e6f5a2fc2f89cb...[J/jan_johnston__flesh__tilt_remix__bamford.mi...
126553../datasets/lmd/lmd_full/3/312b4e4b6f9bbd3abe3...False192.617363[0.0][96.0]87.500000True384.0[ACOU BASS, A.PIANO 1, A.PIANO 1, JAZZ GTR, SL...2.0../datasets/lmd/proto/312b4e4b6f9bbd3abe3af2bb...[Diversen/Strike-Up-The-Band.mid, DIVERSEN/STR...
150997../datasets/lmd/lmd_full/b/bf3f61d4bf0c7a99c7c...False196.007331[0.0][98.0036653370836]364.744011True384.0[SHOUT, SHOUT, SHOUT, SHOUT, SHOUT, SHOUT, SHO...1.0../datasets/lmd/proto/bf3f61d4bf0c7a99c7c5dded...[080/Shout.mid, 080/Shout.mid]
66108../datasets/lmd/lmd_full/8/80fd25fb1ff70896ed8...False180.717774[0.0, 0.008333333333333333, 11.500865666666666...[60.0, 67.00002903334591, 65.99999340000066, 6...109.561609False120.0[English (open lyrics window), French (open ly...16.0../datasets/lmd/proto/80fd25fb1ff70896ed8b1115...[R/Ravel Maurice Chanson Des Cueilleuses De Le...
5427../datasets/lmd/lmd_full/9/91100d1888462c59031...False246.623850[0.0][120.0]32.005208False480.0[Nylon-Str. Gt., Bass, *Piano, Warm Pad, Strings]1.0../datasets/lmd/proto/91100d1888462c5903132be8...[COREL COLLECTION/MOOD_06.MID]
78360../datasets/lmd/lmd_full/f/f577f833d678672ef3b...False194.594595[0.0][120.0]200.916667True384.0[Snare / Tom/cymbal, Snare / Tom/cymbal, Snare...3.0../datasets/lmd/proto/f577f833d678672ef3b2787c...[D/Double Vision.mid, D/Double Vision.mid, D/D...
\n", "
" ], "text/plain": [ " midi_path midi_error \\\n", "31900 ../datasets/lmd/lmd_full/7/745f66980de9ca27fe0... False \n", "33585 ../datasets/lmd/lmd_full/6/68b145d7ffdf4c43e1f... False \n", "67436 ../datasets/lmd/lmd_full/a/a373ed7cd11fb80fac3... False \n", "142153 ../datasets/lmd/lmd_full/e/ec2fff2c295943aedf4... False \n", "127493 ../datasets/lmd/lmd_full/3/3fae950c18f739286ec... False \n", "138301 ../datasets/lmd/lmd_full/e/ec16ec22a846e4d4d91... False \n", "83006 ../datasets/lmd/lmd_full/f/fd8a6fcf912a7ddc602... False \n", "13575 ../datasets/lmd/lmd_full/0/0dff276c070ccc16e2b... False \n", "134536 ../datasets/lmd/lmd_full/e/ed793dadf58b913ea24... False \n", "116286 ../datasets/lmd/lmd_full/4/4c4d48e046e6f5a2fc2... False \n", "126553 ../datasets/lmd/lmd_full/3/312b4e4b6f9bbd3abe3... False \n", "150997 ../datasets/lmd/lmd_full/b/bf3f61d4bf0c7a99c7c... False \n", "66108 ../datasets/lmd/lmd_full/8/80fd25fb1ff70896ed8... False \n", "5427 ../datasets/lmd/lmd_full/9/91100d1888462c59031... False \n", "78360 ../datasets/lmd/lmd_full/f/f577f833d678672ef3b... False \n", "\n", " estimate_tempo tempi_sec \\\n", "31900 169.981663 [0.0] \n", "33585 204.472843 [0.0] \n", "67436 159.432272 [0.0] \n", "142153 194.483086 [0.0] \n", "127493 160.190137 [0.0] \n", "138301 164.382517 [0.0, 186.66648] \n", "83006 160.171123 [0.0] \n", "13575 203.014003 [0.0] \n", "134536 192.000192 [0.0] \n", "116286 255.499940 [0.0] \n", "126553 192.617363 [0.0] \n", "150997 196.007331 [0.0] \n", "66108 180.717774 [0.0, 0.008333333333333333, 11.500865666666666... \n", "5427 246.623850 [0.0] \n", "78360 194.594595 [0.0] \n", "\n", " tempi end_time drums \\\n", "31900 [151.00037750094376] 141.733917 True \n", "33585 [99.99999999999999] 163.656250 True \n", "67436 [159.0002067002687] 154.150743 True \n", "142153 [88.70005632453577] 259.977287 True \n", "127493 [160.0] 100.425000 True \n", "138301 [162.000162000162, 120.0] 186.666480 True \n", "83006 [80.0] 274.525000 True \n", "13575 [190.0002850004275] 48.976900 True \n", "134536 [140.00014000014] 6.861600 False \n", "116286 [145.9999659333413] 6.575344 False \n", "126553 [96.0] 87.500000 True \n", "150997 [98.0036653370836] 364.744011 True \n", "66108 [60.0, 67.00002903334591, 65.99999340000066, 6... 109.561609 False \n", "5427 [120.0] 32.005208 False \n", "78360 [120.0] 200.916667 True \n", "\n", " resolution instrument_names \\\n", "31900 96.0 [Acc Bass, Piano, Melody, Sax, Solo, E.Guitar,... \n", "33585 96.0 [Remelexo, Remelexo, Remelexo, Remelexo, Remel... \n", "67436 192.0 [Crash Cymbal, Ride Cymbal, Open HiHat, Closed... \n", "142153 120.0 [You Can Leave Your Hat On, You Can Leave Your... \n", "127493 480.0 [Sax, Sax, French Horn, Piano, Bass, Drums] \n", "138301 120.0 [Vocal, ElecGtr 1, ElecGtr 2, PickedBass, Orga... \n", "83006 120.0 [Corazon Partio, Corazon Partio, Corazon Parti... \n", "13575 96.0 [Bop on the Rocks, Bop on the Rocks, Bop on th... \n", "134536 96.0 [z3ta+ (MIDI)] \n", "116286 96.0 [MIDI out] \n", "126553 384.0 [ACOU BASS, A.PIANO 1, A.PIANO 1, JAZZ GTR, SL... \n", "150997 384.0 [SHOUT, SHOUT, SHOUT, SHOUT, SHOUT, SHOUT, SHO... \n", "66108 120.0 [English (open lyrics window), French (open ly... \n", "5427 480.0 [Nylon-Str. Gt., Bass, *Piano, Warm Pad, Strings] \n", "78360 384.0 [Snare / Tom/cymbal, Snare / Tom/cymbal, Snare... \n", "\n", " num_time_signature_changes \\\n", "31900 1.0 \n", "33585 2.0 \n", "67436 1.0 \n", "142153 1.0 \n", "127493 1.0 \n", "138301 1.0 \n", "83006 7.0 \n", "13575 3.0 \n", "134536 0.0 \n", "116286 0.0 \n", "126553 2.0 \n", "150997 1.0 \n", "66108 16.0 \n", "5427 1.0 \n", "78360 3.0 \n", "\n", " proto_path \\\n", "31900 ../datasets/lmd/proto/745f66980de9ca27fe055cc6... \n", "33585 ../datasets/lmd/proto/68b145d7ffdf4c43e1f5f59c... \n", "67436 ../datasets/lmd/proto/a373ed7cd11fb80fac3dca06... \n", "142153 ../datasets/lmd/proto/ec2fff2c295943aedf4797c3... \n", "127493 ../datasets/lmd/proto/3fae950c18f739286ec42107... \n", "138301 ../datasets/lmd/proto/ec16ec22a846e4d4d91959cc... \n", "83006 ../datasets/lmd/proto/fd8a6fcf912a7ddc60242146... \n", "13575 ../datasets/lmd/proto/0dff276c070ccc16e2bd6fa1... \n", "134536 ../datasets/lmd/proto/ed793dadf58b913ea2460ad1... \n", "116286 ../datasets/lmd/proto/4c4d48e046e6f5a2fc2f89cb... \n", "126553 ../datasets/lmd/proto/312b4e4b6f9bbd3abe3af2bb... \n", "150997 ../datasets/lmd/proto/bf3f61d4bf0c7a99c7c5dded... \n", "66108 ../datasets/lmd/proto/80fd25fb1ff70896ed8b1115... \n", "5427 ../datasets/lmd/proto/91100d1888462c5903132be8... \n", "78360 ../datasets/lmd/proto/f577f833d678672ef3b2787c... \n", "\n", " original_files \n", "31900 [BonJovi/Runaway3.mid, MikeDoyle/MyLittleRunAw... \n", "33585 [C/Cesar E Paulinho - Remelexo.mid, Midis Româ... \n", "67436 [t/trust_me.mid, T/trust_me.mid] \n", "142153 [Y/You Can Leave Your Hat on Pm L.mid, Y/You C... \n", "127493 [2009 MIDI/barbra_Ann2-Regents-F160.mid] \n", "138301 [c/chaingm.mid, C/chaingm.mid] \n", "83006 [C/Corazon Partio Pm L.mid, Midis Latinas/Cora... \n", "13575 [Jazz/Bop on.mid, b/bop-on.mid, Jazz/BOP_ON.MI... \n", "134536 [M/Machinehead - Headwave (Zatox Mix).mid, M/M... \n", "116286 [J/jan_johnston__flesh__tilt_remix__bamford.mi... \n", "126553 [Diversen/Strike-Up-The-Band.mid, DIVERSEN/STR... \n", "150997 [080/Shout.mid, 080/Shout.mid] \n", "66108 [R/Ravel Maurice Chanson Des Cueilleuses De Le... \n", "5427 [COREL COLLECTION/MOOD_06.MID] \n", "78360 [D/Double Vision.mid, D/Double Vision.mid, D/D... " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "original_files = []\n", "for _, midi_path in midi_df['midi_path'].iteritems():\n", " midi_name = midi_path.split(os.sep)[-1].split('.')[0]\n", " original_files.append(md5_filenames[midi_name])\n", "\n", "midi_df['original_files'] = original_files\n", "\n", "midi_df.sample(15)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analysis of metadata\n", "\n", "Let's examine the extracted metadata of those files.\n", "Before we start plotting it is always a good idea to take a look a the dataframe and its description." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "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", " \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", " \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", " \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", " \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", "
midi_pathmidi_errorestimate_tempotempi_sectempiend_timedrumsresolutioninstrument_namesnum_time_signature_changesproto_pathoriginal_files
160813../datasets/lmd/lmd_full/2/2b03576c2eac6b20c55...False220.504202[0.0][99.99999999999999]200.200000True384.0[Lead, Bass, Guitar, Rhythm guitar, Voice oohs...1.0../datasets/lmd/proto/2b03576c2eac6b20c5537514...[M/Monday Monday.mid]
83189../datasets/lmd/lmd_full/f/fc7280752baa136165c...False149.380190[0.0][160.01024065540196]150.326316True48.0[SYNTH, SYNTH, SYNTH, SYNTH, SYNTH, SYNTH, SYN...1.0../datasets/lmd/proto/fc7280752baa136165c911e0...[e/entreaty.mid]
96858../datasets/lmd/lmd_full/c/cb226a46053507ae8a4...False170.000085[0.0][170.0000850000425]11.294112False96.0[Neo Cortex - Elements (Styles & Breeze Remix)]0.0../datasets/lmd/proto/cb226a46053507ae8a47a16c...[N/Neo Cortex - Elements (Breeze & Styles Remi...
34038../datasets/lmd/lmd_full/6/6d12ce4d832f9c39ca6...False231.914925[0.0, 2.368422, 3.493422, 11.1907935, 11.19735...[151.99993920002433, 80.0, 151.99993920002433,...503.284151False120.0[Primo RH, Primo LH G, Primo LH F, Secondo RH ...1.0../datasets/lmd/proto/6d12ce4d832f9c39ca683d53...[Mendelsonn/Allegro Brillant for Piano 4-hands...
171000../datasets/lmd/lmd_full/5/586c46e8f1c65beff59...False236.159582[0.0][130.0023833770286]91.378132True384.0[ACCORDION, A.PIANO 1, FINGERDBAS, CRYSTAL, DR...1.0../datasets/lmd/proto/586c46e8f1c65beff59afe0b...[Byrd, Charlie/The-Girl-From-Ipanema.mid, BYRD...
103720../datasets/lmd/lmd_full/d/dabbeaf50e6bad0b54d...TrueNaNNoneNoneNaNNoneNaNNoneNaNNone[Sure.Polyphone.Midi/Entertainer.mid, Various ...
71588../datasets/lmd/lmd_full/a/aaf2e0398a707b34bbe...False174.928646[0.0][124.000248000496]131.612640True384.0[ESTCE PR HASARD, ESTCE PR HASARD, ESTCE PR HA...1.0../datasets/lmd/proto/aaf2e0398a707b34bbeaefb9...[E/Est Ce Par Hasard Dave.mid]
139917../datasets/lmd/lmd_full/e/ebc5edd3c533092d324...False196.431974[0.0][85.00028333427778]276.574446True384.0[TORN, TORN, TORN, TORN, TORN, TORN, TORN, TOR...1.0../datasets/lmd/proto/ebc5edd3c533092d32461eee...[X/Xgtorn.mid, 097/XGtorn.mid, 097/XGtorn.mid]
45209../datasets/lmd/lmd_full/1/1450ab4b1e52e25438d...False195.096618[0.0][107.9999136000691]224.166846False96.0[Soprano, Soprano, Soprano, Soprano, Soprano, ...38.0../datasets/lmd/proto/1450ab4b1e52e25438de8e7e...[civilwar2/61sfttobfa.mid]
74319../datasets/lmd/lmd_full/a/aae666057efdbc7268d...False240.000000[0.0][120.0]66.010417False96.0[3xOsc (MIDI), 3xOsc #2 (MIDI), 3xOsc #3 (MIDI...1.0../datasets/lmd/proto/aae666057efdbc7268d62b8f...[K/Kara_Sun_-_Into_The_Sun_(Airbase_Dub_Mix)__...
90199../datasets/lmd/lmd_full/c/c750e5a017155f06e63...False256.000000[0.0][128.0]15.117188False96.0[Sylenth1 4, Sylenth1 3, Sylenth1 1]1.0../datasets/lmd/proto/c750e5a017155f06e63ae69c...[C/Cascada_-_BadBoy__DjMixdOut_20130211014527....
99470../datasets/lmd/lmd_full/c/cc6b412aeeb834e8fec...False275.408685[0.0, 182.14267500000003][140.00014000014, 108.99994368336242]185.995888True120.0[, , , , , , , , , , ]1.0../datasets/lmd/proto/cc6b412aeeb834e8fecfd308...[VerucaSalt/Seether.mid, VerucaSalt/Seether.mi...
175912../datasets/lmd/lmd_full/5/500a1212bae787f7ef8...False240.000000[0.0][120.0]98.494792False384.0[The Flowers, Of The Heath, Sequenced By, Barr...1.0../datasets/lmd/proto/500a1212bae787f7ef8fb099...[h/heath.mid, H/heath.mid]
30403../datasets/lmd/lmd_full/7/7dc2e8000f630ab4e57...False200.644292[0.0, 9.69696, 38.49696, 48.193920000000006, 5...[198.000198000198, 199.99999999999997, 198.000...144.326112True384.0[Drums - Travis, Bass - Mark, Guitar 1 - Tom, ...1.0../datasets/lmd/proto/7dc2e8000f630ab4e57eebd5...[B/blink_182-dumpweed.mid]
108557../datasets/lmd/lmd_full/d/d864a2adc13ad8b9797...False251.560269[0.0][126.99998518333504]205.980339True120.0[The Corrs, \"Breathless\", , ****************, ...1.0../datasets/lmd/proto/d864a2adc13ad8b9797d6be2...[Corrs/The Corrs - Breathless.mid, Various/The...
\n", "
" ], "text/plain": [ " midi_path midi_error \\\n", "160813 ../datasets/lmd/lmd_full/2/2b03576c2eac6b20c55... False \n", "83189 ../datasets/lmd/lmd_full/f/fc7280752baa136165c... False \n", "96858 ../datasets/lmd/lmd_full/c/cb226a46053507ae8a4... False \n", "34038 ../datasets/lmd/lmd_full/6/6d12ce4d832f9c39ca6... False \n", "171000 ../datasets/lmd/lmd_full/5/586c46e8f1c65beff59... False \n", "103720 ../datasets/lmd/lmd_full/d/dabbeaf50e6bad0b54d... True \n", "71588 ../datasets/lmd/lmd_full/a/aaf2e0398a707b34bbe... False \n", "139917 ../datasets/lmd/lmd_full/e/ebc5edd3c533092d324... False \n", "45209 ../datasets/lmd/lmd_full/1/1450ab4b1e52e25438d... False \n", "74319 ../datasets/lmd/lmd_full/a/aae666057efdbc7268d... False \n", "90199 ../datasets/lmd/lmd_full/c/c750e5a017155f06e63... False \n", "99470 ../datasets/lmd/lmd_full/c/cc6b412aeeb834e8fec... False \n", "175912 ../datasets/lmd/lmd_full/5/500a1212bae787f7ef8... False \n", "30403 ../datasets/lmd/lmd_full/7/7dc2e8000f630ab4e57... False \n", "108557 ../datasets/lmd/lmd_full/d/d864a2adc13ad8b9797... False \n", "\n", " estimate_tempo tempi_sec \\\n", "160813 220.504202 [0.0] \n", "83189 149.380190 [0.0] \n", "96858 170.000085 [0.0] \n", "34038 231.914925 [0.0, 2.368422, 3.493422, 11.1907935, 11.19735... \n", "171000 236.159582 [0.0] \n", "103720 NaN None \n", "71588 174.928646 [0.0] \n", "139917 196.431974 [0.0] \n", "45209 195.096618 [0.0] \n", "74319 240.000000 [0.0] \n", "90199 256.000000 [0.0] \n", "99470 275.408685 [0.0, 182.14267500000003] \n", "175912 240.000000 [0.0] \n", "30403 200.644292 [0.0, 9.69696, 38.49696, 48.193920000000006, 5... \n", "108557 251.560269 [0.0] \n", "\n", " tempi end_time drums \\\n", "160813 [99.99999999999999] 200.200000 True \n", "83189 [160.01024065540196] 150.326316 True \n", "96858 [170.0000850000425] 11.294112 False \n", "34038 [151.99993920002433, 80.0, 151.99993920002433,... 503.284151 False \n", "171000 [130.0023833770286] 91.378132 True \n", "103720 None NaN None \n", "71588 [124.000248000496] 131.612640 True \n", "139917 [85.00028333427778] 276.574446 True \n", "45209 [107.9999136000691] 224.166846 False \n", "74319 [120.0] 66.010417 False \n", "90199 [128.0] 15.117188 False \n", "99470 [140.00014000014, 108.99994368336242] 185.995888 True \n", "175912 [120.0] 98.494792 False \n", "30403 [198.000198000198, 199.99999999999997, 198.000... 144.326112 True \n", "108557 [126.99998518333504] 205.980339 True \n", "\n", " resolution instrument_names \\\n", "160813 384.0 [Lead, Bass, Guitar, Rhythm guitar, Voice oohs... \n", "83189 48.0 [SYNTH, SYNTH, SYNTH, SYNTH, SYNTH, SYNTH, SYN... \n", "96858 96.0 [Neo Cortex - Elements (Styles & Breeze Remix)] \n", "34038 120.0 [Primo RH, Primo LH G, Primo LH F, Secondo RH ... \n", "171000 384.0 [ACCORDION, A.PIANO 1, FINGERDBAS, CRYSTAL, DR... \n", "103720 NaN None \n", "71588 384.0 [ESTCE PR HASARD, ESTCE PR HASARD, ESTCE PR HA... \n", "139917 384.0 [TORN, TORN, TORN, TORN, TORN, TORN, TORN, TOR... \n", "45209 96.0 [Soprano, Soprano, Soprano, Soprano, Soprano, ... \n", "74319 96.0 [3xOsc (MIDI), 3xOsc #2 (MIDI), 3xOsc #3 (MIDI... \n", "90199 96.0 [Sylenth1 4, Sylenth1 3, Sylenth1 1] \n", "99470 120.0 [, , , , , , , , , , ] \n", "175912 384.0 [The Flowers, Of The Heath, Sequenced By, Barr... \n", "30403 384.0 [Drums - Travis, Bass - Mark, Guitar 1 - Tom, ... \n", "108557 120.0 [The Corrs, \"Breathless\", , ****************, ... \n", "\n", " num_time_signature_changes \\\n", "160813 1.0 \n", "83189 1.0 \n", "96858 0.0 \n", "34038 1.0 \n", "171000 1.0 \n", "103720 NaN \n", "71588 1.0 \n", "139917 1.0 \n", "45209 38.0 \n", "74319 1.0 \n", "90199 1.0 \n", "99470 1.0 \n", "175912 1.0 \n", "30403 1.0 \n", "108557 1.0 \n", "\n", " proto_path \\\n", "160813 ../datasets/lmd/proto/2b03576c2eac6b20c5537514... \n", "83189 ../datasets/lmd/proto/fc7280752baa136165c911e0... \n", "96858 ../datasets/lmd/proto/cb226a46053507ae8a47a16c... \n", "34038 ../datasets/lmd/proto/6d12ce4d832f9c39ca683d53... \n", "171000 ../datasets/lmd/proto/586c46e8f1c65beff59afe0b... \n", "103720 None \n", "71588 ../datasets/lmd/proto/aaf2e0398a707b34bbeaefb9... \n", "139917 ../datasets/lmd/proto/ebc5edd3c533092d32461eee... \n", "45209 ../datasets/lmd/proto/1450ab4b1e52e25438de8e7e... \n", "74319 ../datasets/lmd/proto/aae666057efdbc7268d62b8f... \n", "90199 ../datasets/lmd/proto/c750e5a017155f06e63ae69c... \n", "99470 ../datasets/lmd/proto/cc6b412aeeb834e8fecfd308... \n", "175912 ../datasets/lmd/proto/500a1212bae787f7ef8fb099... \n", "30403 ../datasets/lmd/proto/7dc2e8000f630ab4e57eebd5... \n", "108557 ../datasets/lmd/proto/d864a2adc13ad8b9797d6be2... \n", "\n", " original_files \n", "160813 [M/Monday Monday.mid] \n", "83189 [e/entreaty.mid] \n", "96858 [N/Neo Cortex - Elements (Breeze & Styles Remi... \n", "34038 [Mendelsonn/Allegro Brillant for Piano 4-hands... \n", "171000 [Byrd, Charlie/The-Girl-From-Ipanema.mid, BYRD... \n", "103720 [Sure.Polyphone.Midi/Entertainer.mid, Various ... \n", "71588 [E/Est Ce Par Hasard Dave.mid] \n", "139917 [X/Xgtorn.mid, 097/XGtorn.mid, 097/XGtorn.mid] \n", "45209 [civilwar2/61sfttobfa.mid] \n", "74319 [K/Kara_Sun_-_Into_The_Sun_(Airbase_Dub_Mix)__... \n", "90199 [C/Cascada_-_BadBoy__DjMixdOut_20130211014527.... \n", "99470 [VerucaSalt/Seether.mid, VerucaSalt/Seether.mi... \n", "175912 [h/heath.mid, H/heath.mid] \n", "30403 [B/blink_182-dumpweed.mid] \n", "108557 [Corrs/The Corrs - Breathless.mid, Various/The... " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_df.sample(15)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 178561 entries, 0 to 178560\n", "Data columns (total 12 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 midi_path 178561 non-null object \n", " 1 midi_error 178561 non-null bool \n", " 2 estimate_tempo 173984 non-null float64\n", " 3 tempi_sec 173984 non-null object \n", " 4 tempi 173984 non-null object \n", " 5 end_time 173984 non-null float64\n", " 6 drums 173984 non-null object \n", " 7 resolution 173984 non-null float64\n", " 8 instrument_names 173984 non-null object \n", " 9 num_time_signature_changes 173984 non-null float64\n", " 10 proto_path 174476 non-null object \n", " 11 original_files 178561 non-null object \n", "dtypes: bool(1), float64(4), object(7)\n", "memory usage: 15.2+ MB\n" ] } ], "source": [ "midi_df.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With a pandas dataframe we can simply aggregate and plot data into different formats.\n", "Let's start by taking a look at our success rate of parsing the MIDI files." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "midi_df['midi_error'].value_counts().plot.pie()\n", "plt.title('Faulty MIDI files');" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4AAAAFOCAYAAADXSXO6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAAAh7UlEQVR4nO3dfbRlZX0n+O/PqmCIL0FEbxBQSKykG62EkWqg2yRTkaiFnQmmx9gwGCDSEifYLyukO+Wkp7VVMposxolrlAy2REgb0dYYGcFBhvHGTk+IorIENbQFYqiSl5EXsVDRMr/54+yKh8qtW3XvrVunqP35rHXW2ee3n2fv59wL555v7ec8p7o7AAAAHPweN+sBAAAAsH8IgAAAACMhAAIAAIyEAAgAADASAiAAAMBICIAAAAAjIQACMHNV9e6qetOMzl1V9YdV9UBVfXI3bd5UVV+rqrv3wfm6qp690uPM0q4/s6r6maq6dWr/HVX187McIwALEwAB+DuGN/D3VtUTpmr/rKrmZzis1fLTSV6Y5OjuPmnXnVX1zCQXJjm+u39kX554pcF3+D19p6qO2KX+2SFoHrvrearq2GHf9uF2T1V9pKpeuMCxdxfiHvUz6+7/3N0/sdznAcD+IwACsDtrkvzLWQ9iqapqzRK7PCvJHd398G72PzPJfd1978pGtmq+nOTMnQ+qan2SH9qLfod19xOT/FSS65J8qKrO3ctz7ulnBsABSgAEYHd+L8lvVtVhu+6Yuoq0dqo2X1X/bNg+t6r+S1W9taoerKrbq+ofDfU7h6uL5+xy2COq6rqq+kZV/VlVPWvq2H9v2Hd/Vd1aVS+f2vfuqrqkqq6pqoeT/NwC431GVV019N9SVa8a6ucl+Q9J/uFwNezf79Lv5zMJR88Y9r97qP+nqrq7qr5eVZ+oqucs9HOY+ln8+QJjOj/JWUn+zXDs/7Oq/nVVfXCXdm+rqt/ftf+UP0py9tTjc5JcsUj7R+nuu7v795O8PslbqmrR9wYL/cyqamNVbd1N+8dV1eaquq2q7quq91fV4cO+H6yq/zjUH6yqT1XV3N6OHYClEwAB2J0bk8wn+c1l9j85yeeSPDXJHye5Msk/SPLsJK9I8r9X1ROn2p+V5I1JjkhyU5L3JMkwDfW64RhPT3JGkndU1fFTff+HJBcleVKSvxO2hnNvTfKMJC9L8jtV9YLufleSVyf5i+5+Yne/brpTd//fSU5L8tVh/7nDro8mWTeM5zM7x7oU3X3p0O93h2P/d0n+Y5JNO0P3ELDPyOKB7oYkT66qvz9c/TxjOM5S/Ukmz2fRqZx7+pkt4J8neWmS/zaTn/8DSd4+7DsnyQ8nOSaT/05eneRbyxg7AHtJAARgMf8uyT+vqqcto++Xu/sPu/t7Sd6XyZv8N3T3I939sSTfySQM7nR1d3+iux9J8tuZXGE6JskvZDLd8A+7e0d3fzbJB5P88lTfD3f3f+nuv+nub08PYjjG85P8Vnd/u7tvyuQK1vRVsyXp7su6+xvDWF+f5Keq6oeXe7yp496V5BP5/nPblORr3f3pPXTdeRXwhUm+mGTbMk7/1eH+8GX0Xcyrk/x2d2+d+nm9bAi3380k+D27u7/X3Z/u7of28fkBmCIAArBb3X1Lko8k2byM7vdMbX9rON6utekrgHdOnXd7kvszuWL0rCQnD1MEH6yqBzO5WvgjC/VdwDOS3N/d35iqfSXJUXv/VL6vqtZU1ZuHKY0PJblj2HXEIt2W4vJMrpBmuP+jvejzR5lcBT03S5j+uYudP4/7l9l/d56VyecLd/7uvpjke0nmMhn3tUmurKqvVtXvVtUP7OPzAzBFAARgT16X5FV5dGDaufjH9GIjK10h85idG8PU0MMzuSp1Z5I/6+7Dpm5P7O7/capvL3LcryY5vKqeNFV7ZpZ3lSyZBK3Tk/x8JtMXj9057OH+4ez9z2Whcf9pkp+squdmcvVzj9NLu/srmSwG85JMpnIuxy8luTfJrXtquER3Jjltl9/fD3b3tu7+bnf/++4+Psk/yuT5LvvKLAB7JgACsKju3pLJFM5/MVX7/zIJUK8Yroi9MsmPrfBUL6mqn66qQzL5LOAN3X1nJlcgf7yqfqWqfmC4/YOq+vt7Of47k/y/Sf6XYdGRn0xyXpb3Oblk8jnDR5Lcl0nQ+51d9t+U5J9U1Q/V5Pv+zlvkWPck+dFdxvvtJB/I5DOPn+zuv97LcZ2X5AVLXZmzquaq6jWZBP3XdvffLKX/XviDJBftXNSnqp5WVacP2z9XVeuHzy4+lMmU0H19fgCmCIAA7I03JHnCLrVXJfnXmQSh52QSslbijzMJIfcnOTHDNMhh6uaLMlnc5KtJ7k7yliSPX8Kxz8zkSt1Xk3woyeuGBV6W44pMppBuS/KFTBZhmfbWTD7feE8m0zkXu4L3riTHD9Mj/3SqfnmS9dm76Z9Jku6+rbtv3Nv2SR4cVk29OZMrh7/c3Zctof/e+v0kVyX5WFV9I5Of18nDvh/JJOw+lMnU0D/LEp4zAEtX3YvNmgEA9reafPn8XyX5EYuiALAvuQIIAAeQ4Xv4fiPJlcIfAPva2j03AQD2h+E7D+/JZIrpphkPB4CDkCmgAAAAI2EKKAAAwEgIgAAAACNx0H0G8Igjjuhjjz121sOAx6yHH344T3jCrqv9A8D+428RrMynP/3pr3X30xbad9AFwGOPPTY33riUr0ECps3Pz2fjxo2zHgYAI+ZvEaxMVX1ld/tMAQUAABgJARAAAGAkBEAAAICREAABAABGQgAEAAAYCQEQAABgJPYYAKvqsqq6t6pumaq9r6puGm53VNVNQ/3YqvrW1L4/mOpzYlXdXFVbquptVVVD/fCquq6qvjTcP2Wo19BuS1V9rqqet8+fPQAAwIjszRXAdyfZNF3o7n/a3Sd09wlJPpjkT6Z237ZzX3e/eqp+SZJXJVk33HYec3OS67t7XZLrh8dJctpU2/OH/gAAACzTHgNgd38iyf0L7Ruu4r08yXsXO0ZVHZnkyd19Q3d3kiuSvHTYfXqSy4fty3epX9ETNyQ5bDgOAAAAy7DSzwD+TJJ7uvtLU7XjquqzVfVnVfUzQ+2oJFun2mwdakky1913Ddt3J5mb6nPnbvoAAACwRGtX2P/MPPrq311Jntnd91XViUn+tKqes7cH6+6uql7qIKrq/EymiWZubi7z8/NLPQQw2L59u/+HAJgpf4tg9Sw7AFbV2iT/JMmJO2vd/UiSR4btT1fVbUl+PMm2JEdPdT96qCXJPVV1ZHffNUzxvHeob0tyzG76PEp3X5rk0iTZsGFDb9y4cblPi/3g2M1Xz3oILOLC9d/LxX/+8KyHwSLuePM/nvUQAFbV/Px8vJ+D1bGSKaA/n+Svuvtvp3ZW1dOqas2w/aOZLOBy+zDF86GqOmX43ODZST48dLsqyTnD9jm71M8eVgM9JcnXp6aKAgAAsER78zUQ703yF0l+oqq2VtV5w64z8ncXf/nZJJ8bvhbiA0le3d07F5D59ST/IcmWJLcl+ehQf3OSF1bVlzIJlW8e6tckuX1o/86hPwAAAMu0xymg3X3mburnLlD7YCZfC7FQ+xuTPHeB+n1JTl2g3kku2NP4AAAA2DsrXQUUAACAxwgBEAAAYCQEQAAAgJEQAAEAAEZCAAQAABgJARAAAGAkBEAAAICREAABAABGQgAEAAAYCQEQAABgJARAAACAkRAAAQAARkIABAAAGAkBEAAAYCQEQAAAgJEQAAEAAEZCAAQAABgJARAAAGAkBEAAAICREAABAABGQgAEAAAYCQEQAABgJARAAACAkRAAAQAARkIABAAAGAkBEAAAYCQEQAAAgJEQAAEAAEZijwGwqi6rqnur6pap2uuraltV3TTcXjK177VVtaWqbq2qF0/VNw21LVW1eap+XFX95VB/X1UdMtQfPzzeMuw/dp89awAAgBHamyuA706yaYH6W7v7hOF2TZJU1fFJzkjynKHPO6pqTVWtSfL2JKclOT7JmUPbJHnLcKxnJ3kgyXlD/bwkDwz1tw7tAAAAWKY9BsDu/kSS+/fyeKcnubK7H+nuLyfZkuSk4balu2/v7u8kuTLJ6VVVSV6Q5AND/8uTvHTqWJcP2x9IcurQHgAAgGVYyWcAX1NVnxumiD5lqB2V5M6pNluH2u7qT03yYHfv2KX+qGMN+78+tAcAAGAZ1i6z3yVJ3pikh/uLk7xyXw1qqarq/CTnJ8nc3Fzm5+dnNRT2woXrd+y5ETMzd6jf0YHOaxxwsNu+fbvXOlglywqA3X3Pzu2qemeSjwwPtyU5Zqrp0UMtu6nfl+Swqlo7XOWbbr/zWFuram2SHx7aLzSeS5NcmiQbNmzojRs3LudpsZ+cu/nqWQ+BRVy4fkcuvnm5/zbE/nDHWRtnPQSAVTU/Px/v52B1LGsKaFUdOfXwl5LsXCH0qiRnDCt4HpdkXZJPJvlUknXDip+HZLJQzFXd3Uk+nuRlQ/9zknx46ljnDNsvS/L/DO0BAABYhj3+M39VvTfJxiRHVNXWJK9LsrGqTshkCugdSX4tSbr781X1/iRfSLIjyQXd/b3hOK9Jcm2SNUku6+7PD6f4rSRXVtWbknw2ybuG+ruS/FFVbclkEZozVvpkAQAAxmyPAbC7z1yg/K4FajvbX5TkogXq1yS5ZoH67ZmsErpr/dtJfnlP4wMAAGDvrGQVUAAAAB5DBEAAAICREAABAABGQgAEAAAYCQEQAABgJARAAACAkRAAAQAARkIABAAAGAkBEAAAYCQEQAAAgJEQAAEAAEZCAAQAABgJARAAAGAkBEAAAICREAABAABGQgAEAAAYCQEQAABgJARAAACAkRAAAQAARkIABAAAGAkBEAAAYCQEQAAAgJEQAAEAAEZCAAQAABgJARAAAGAkBEAAAICREAABAABGQgAEAAAYCQEQAABgJPYYAKvqsqq6t6pumar9XlX9VVV9rqo+VFWHDfVjq+pbVXXTcPuDqT4nVtXNVbWlqt5WVTXUD6+q66rqS8P9U4Z6De22DOd53j5/9gAAACOyN1cA351k0y6165I8t7t/Msl/TfLaqX23dfcJw+3VU/VLkrwqybrhtvOYm5Nc393rklw/PE6S06banj/0BwAAYJn2GAC7+xNJ7t+l9rHu3jE8vCHJ0Ysdo6qOTPLk7r6huzvJFUleOuw+Pcnlw/blu9Sv6Ikbkhw2HAcAAIBlWLsPjvHKJO+benxcVX02yUNJ/m13/+ckRyXZOtVm61BLkrnuvmvYvjvJ3LB9VJI7F+hzV3ZRVedncpUwc3NzmZ+fX8nzYZVduH7HnhsxM3OH+h0d6LzGAQe77du3e62DVbKiAFhVv51kR5L3DKW7kjyzu++rqhOT/GlVPWdvj9fdXVW91HF096VJLk2SDRs29MaNG5d6CPajczdfPeshsIgL1+/IxTfvi38bYrXccdbGWQ8BYFXNz8/H+zlYHct+l1dV5yb5hSSnDtM6092PJHlk2P50Vd2W5MeTbMujp4kePdSS5J6qOrK77xqmeN471LclOWY3fQAAAFiiZX0NRFVtSvJvkvxid39zqv60qlozbP9oJgu43D5M8Xyoqk4ZVv88O8mHh25XJTln2D5nl/rZw2qgpyT5+tRUUQAAAJZoj1cAq+q9STYmOaKqtiZ5XSarfj4+yXXDtzncMKz4+bNJ3lBV303yN0le3d07F5D59UxWFD00yUeHW5K8Ocn7q+q8JF9J8vKhfk2SlyTZkuSbSX51JU8UAABg7PYYALv7zAXK79pN2w8m+eBu9t2Y5LkL1O9LcuoC9U5ywZ7GBwAAwN5Z1hRQAAAAHnsEQAAAgJEQAAEAAEZCAAQAABgJARAAAGAkBEAAAICREAABAABGQgAEAAAYCQEQAABgJARAAACAkRAAAQAARkIABAAAGAkBEAAAYCQEQAAAgJEQAAEAAEZCAAQAABgJARAAAGAkBEAAAICREAABAABGQgAEAAAYCQEQAABgJARAAACAkRAAAQAARkIABAAAGAkBEAAAYCQEQAAAgJEQAAEAAEZCAAQAABiJvQqAVXVZVd1bVbdM1Q6vquuq6kvD/VOGelXV26pqS1V9rqqeN9XnnKH9l6rqnKn6iVV189DnbVVVi50DAACApdvbK4DvTrJpl9rmJNd397ok1w+Pk+S0JOuG2/lJLkkmYS7J65KcnOSkJK+bCnSXJHnVVL9NezgHAAAAS7RXAbC7P5Hk/l3Kpye5fNi+PMlLp+pX9MQNSQ6rqiOTvDjJdd19f3c/kOS6JJuGfU/u7hu6u5NcscuxFjoHAAAAS7R2BX3nuvuuYfvuJHPD9lFJ7pxqt3WoLVbfukB9sXM8SlWdn8nVxszNzWV+fn4ZT4f95cL1O2Y9BBYxd6jf0YHOaxxwsNu+fbvXOlglKwmAf6u7u6p6XxxrOefo7kuTXJokGzZs6I0bN67mUFihczdfPeshsIgL1+/IxTfvk5cGVskdZ22c9RAAVtX8/Hy8n4PVsZJVQO8Zpm9muL93qG9LcsxUu6OH2mL1oxeoL3YOAAAAlmglAfCqJDtX8jwnyYen6mcPq4GekuTrwzTOa5O8qKqeMiz+8qIk1w77HqqqU4bVP8/e5VgLnQMAAIAl2qt5XlX13iQbkxxRVVszWc3zzUneX1XnJflKkpcPza9J8pIkW5J8M8mvJkl3319Vb0zyqaHdG7p758Iyv57JSqOHJvnocMsi5wAAAGCJ9ioAdveZu9l16gJtO8kFuznOZUkuW6B+Y5LnLlC/b6FzAAAAsHQrmQIKAADAY4gACAAAMBICIAAAwEgIgAAAACMhAAIAAIyEAAgAADASAiAAAMBICIAAAAAjIQACAACMhAAIAAAwEgIgAADASAiAAAAAIyEAAgAAjIQACAAAMBICIAAAwEgIgAAAACMhAAIAAIyEAAgAADASAiAAAMBICIAAAAAjIQACAACMhAAIAAAwEgIgAADASAiAAAAAIyEAAgAAjIQACAAAMBICIAAAwEgIgAAAACOx7ABYVT9RVTdN3R6qqn9VVa+vqm1T9ZdM9XltVW2pqlur6sVT9U1DbUtVbZ6qH1dVfznU31dVhyz/qQIAAIzbsgNgd9/a3Sd09wlJTkzyzSQfGna/dee+7r4mSarq+CRnJHlOkk1J3lFVa6pqTZK3JzktyfFJzhzaJslbhmM9O8kDSc5b7ngBAADGbl9NAT01yW3d/ZVF2pye5MrufqS7v5xkS5KThtuW7r69u7+T5Mokp1dVJXlBkg8M/S9P8tJ9NF4AAIDRWbuPjnNGkvdOPX5NVZ2d5MYkF3b3A0mOSnLDVJutQy1J7tylfnKSpyZ5sLt3LND+Uarq/CTnJ8nc3Fzm5+dX9GRYXReu37HnRszM3KF+Rwc6r3HAwW779u1e62CVrDgADp/L+8Ukrx1KlyR5Y5Ie7i9O8sqVnmcx3X1pkkuTZMOGDb1x48bVPB0rdO7mq2c9BBZx4fodufjmffVvQ6yGO87aOOshAKyq+fn5eD8Hq2NfvMs7LclnuvueJNl5nyRV9c4kHxkebktyzFS/o4dadlO/L8lhVbV2uAo43R4AAIAl2hefATwzU9M/q+rIqX2/lOSWYfuqJGdU1eOr6rgk65J8MsmnkqwbVvw8JJPppFd1dyf5eJKXDf3PSfLhfTBeAACAUVrRFcCqekKSFyb5tany71bVCZlMAb1j577u/nxVvT/JF5LsSHJBd39vOM5rklybZE2Sy7r788OxfivJlVX1piSfTfKulYwXAABgzFYUALv74UwWa5mu/coi7S9KctEC9WuSXLNA/fZMVgkFAABghfbV10AAAABwgBMAAQAARkIABAAAGAkBEAAAYCQEQAAAgJEQAAEAAEZCAAQAABgJARAAAGAkBEAAAICREAABAABGQgAEAAAYCQEQAABgJARAAACAkRAAAQAARkIABAAAGAkBEAAAYCQEQAAAgJEQAAEAAEZCAAQAABgJARAAAGAkBEAAAICREAABAABGQgAEAAAYCQEQAABgJARAAACAkRAAAQAARkIABAAAGAkBEAAAYCRWHACr6o6qurmqbqqqG4fa4VV1XVV9abh/ylCvqnpbVW2pqs9V1fOmjnPO0P5LVXXOVP3E4fhbhr610jEDAACM0b66Avhz3X1Cd28YHm9Ocn13r0ty/fA4SU5Lsm64nZ/kkmQSGJO8LsnJSU5K8rqdoXFo86qpfpv20ZgBAABGZbWmgJ6e5PJh+/IkL52qX9ETNyQ5rKqOTPLiJNd19/3d/UCS65JsGvY9ubtv6O5OcsXUsQAAAFiCtfvgGJ3kY1XVSf6P7r40yVx33zXsvzvJ3LB9VJI7p/puHWqL1bcuUH+Uqjo/kyuKmZuby/z8/AqfEqvpwvU7Zj0EFjF3qN/Rgc5rHHCw2759u9c6WCX7IgD+dHdvq6qnJ7muqv5qemd39xAOV80QOi9Nkg0bNvTGjRtX83Ss0Lmbr571EFjEhet35OKb98VLA6vljrM2znoIAKtqfn4+3s/B6ljxFNDu3jbc35vkQ5l8hu+eYfpmhvt7h+bbkhwz1f3oobZY/egF6gAAACzRigJgVT2hqp60czvJi5LckuSqJDtX8jwnyYeH7auSnD2sBnpKkq8PU0WvTfKiqnrKsPjLi5JcO+x7qKpOGVb/PHvqWAAAACzBSud5zSX50PDNDGuT/HF3/19V9akk76+q85J8JcnLh/bXJHlJki1JvpnkV5Oku++vqjcm+dTQ7g3dff+w/etJ3p3k0CQfHW4AAAAs0YoCYHffnuSnFqjfl+TUBeqd5ILdHOuyJJctUL8xyXNXMk4AAABW72sgAAAAOMAIgAAAACMhAAIAAIyEAAgAADASAiAAAMBICIAAAAAjIQACAACMhAAIAAAwEgIgAADASAiAAAAAIyEAAgAAjIQACAAAMBICIAAAwEgIgAAAACMhAAIAAIyEAAgAADASAiAAAMBICIAAAAAjIQACAACMhAAIAAAwEgIgAADASAiAAAAAIyEAAgAAjIQACAAAMBICIAAAwEgIgAAAACMhAAIAAIyEAAgAADASyw6AVXVMVX28qr5QVZ+vqn851F9fVduq6qbh9pKpPq+tqi1VdWtVvXiqvmmobamqzVP146rqL4f6+6rqkOWOFwAAYOxWcgVwR5ILu/v4JKckuaCqjh/2vbW7Txhu1yTJsO+MJM9JsinJO6pqTVWtSfL2JKclOT7JmVPHectwrGcneSDJeSsYLwAAwKgtOwB2913d/Zlh+xtJvpjkqEW6nJ7kyu5+pLu/nGRLkpOG25buvr27v5PkyiSnV1UleUGSDwz9L0/y0uWOFwAAYOzW7ouDVNWxSf6bJH+Z5PlJXlNVZye5MZOrhA9kEg5vmOq2Nd8PjHfuUj85yVOTPNjdOxZov+v5z09yfpLMzc1lfn5+5U+KVXPh+h17bsTMzB3qd3Sg8xoHHOy2b9/utQ5WyYoDYFU9MckHk/yr7n6oqi5J8sYkPdxfnOSVKz3PYrr70iSXJsmGDRt648aNq3k6VujczVfPeggs4sL1O3Lxzfvk34ZYJXectXHWQwBYVfPz8/F+DlbHit7lVdUPZBL+3tPdf5Ik3X3P1P53JvnI8HBbkmOmuh891LKb+n1JDquqtcNVwOn2AAAALNFKVgGtJO9K8sXu/l+n6kdONfulJLcM21clOaOqHl9VxyVZl+STST6VZN2w4uchmSwUc1V3d5KPJ3nZ0P+cJB9e7ngBAADGbiVXAJ+f5FeS3FxVNw21/ymTVTxPyGQK6B1Jfi1JuvvzVfX+JF/IZAXRC7r7e0lSVa9Jcm2SNUku6+7PD8f7rSRXVtWbknw2k8AJAADAMiw7AHb3nyepBXZds0ifi5JctED9moX6dfftmawSCgAAwAqt5HsAAQAAeAwRAAEAAEZCAAQAABgJARAAAGAkBEAAAICREAABAABGQgAEAAAYCQEQAABgJARAAACAkRAAAQAARkIABAAAGAkBEAAAYCQEQAAAgJEQAAEAAEZCAAQAABgJARAAAGAkBEAAAICREAABAABGQgAEAAAYCQEQAABgJARAAACAkRAAAQAARkIABAAAGAkBEAAAYCQEQAAAgJFYO+sBAADsT8duvnrWQ2APLly/I+f6PR2w7njzP571EFgBVwABAABGQgAEAAAYiQM+AFbVpqq6taq2VNXmWY8HAADgseqADoBVtSbJ25OcluT4JGdW1fGzHRUAAMBj0wEdAJOclGRLd9/e3d9JcmWS02c8JgAAgMekAz0AHpXkzqnHW4caAAAAS3RQfA1EVZ2f5Pzh4faqunWW44HHsn+RHJHka7MeB7tXb5n1CABWl79FBzZ/hx4TnrW7HQd6ANyW5Jipx0cPtUfp7kuTXLq/BgUHs6q6sbs3zHocAIyXv0Wweg70KaCfSrKuqo6rqkOSnJHkqhmPCQAA4DHpgL4C2N07quo1Sa5NsibJZd39+RkPCwAA4DHpgA6ASdLd1yS5ZtbjgBExnRqAWfO3CFZJdfesxwAAAMB+cKB/BhAAAIB9RAAEAAAYCQEQAICZqolXVNW/Gx4/s6pOmvW44GAkAAKpqh+qqv+5qt45PF5XVb8w63EBMBrvSPIPk5w5PP5GkrfPbjhw8BIAgST5wySPZPLHN0m2JXnT7IYDwMic3N0XJPl2knT3A0kOme2Q4OAkAAJJ8mPd/btJvpsk3f3NJDXbIQEwIt+tqjVJOkmq6mlJ/ma2Q4KDkwAIJMl3qurQfP8P749lckUQAPaHtyX5UJKnV9VFSf48ye/MdkhwcPI9gECq6oVJ/m2S45N8LMnzk5zb3fOzHBcA41FVfy/JqZnMQLm+u7844yHBQUkABJIkVfXUJKdk8of3hu7+2oyHBMBIVNUzF6p391/v77HAwU4ABFJVz09yU3c/XFWvSPK8JL/f3V+Z8dAAGIGqujmTjyFUkh9MclySW7v7OTMdGByEfAYQSJJLknyzqn4qyW8kuS3JFbMdEgBj0d3ru/snh/t1SU5K8hezHhccjARAIEl29GQ6wOlJ3t7db0/ypBmPCYCR6u7PJDl51uOAg9HaWQ8AOCB8o6pem+QVSX62qh6X5AdmPCYARqKqfmPq4eMy+SjCV2c0HDiouQIIJMk/zeRrH87r7ruTHJ3k92Y7JABG5ElTt8cnuTqTWSnAPmYRGAAAZmb4Avi3dPdvznosMAamgMKIVdU3Mnz5+667knR3P3k/DwmAEamqtd29Y1iNGtgPXAEEAGAmquoz3f28qrokyVFJ/lOSh3fu7+4/mdng4CDlCiDwt6rq6Zl8/1ISX8ALwH7zg0nuS/KCfP/7ADuJAAj7mAAIpKp+McnFSZ6R5N4kz0ryxSS+gBeA1fT0YQXQW/L94LeTaWqwCqwCCiTJG5OckuS/dvdxSU5NcsNshwTACKxJ8sTh9qSp7Z03YB9zBRBIku92931V9biqelx3f7yq/rdZDwqAg95d3f2GWQ8CxkQABJLkwap6YpJPJHlPVd2bqQ/hA8AqqT03AfYlq4DCiFXVM7v7r6vqCUm+lcm08LOS/HCS93T3fTMdIAAHtao6vLvvn/U4YEwEQBixnctvD9sf7O7/ftZjAgBg9VgEBsZteurNj85sFAAA7BcCIIxb72YbAICDkCmgMGJV9b1MFnupJIcm+ebOXUm6u588q7EBALDvCYAAAAAjYQooAADASAiAAAAAIyEAAgAAjIQACAAAMBICIAAAwEj8/zAHDSvgye7EAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "midi_df.midi_error.value_counts().plot.bar()\n", "plt.title(\"Number of faulty MIDI files\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After we know the amount of failed MIDI files we could inspect those further to see if they are indeed corrupted or if our library has a bug." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
midi_pathmidi_errorestimate_tempotempi_sectempiend_timedrumsresolutioninstrument_namesnum_time_signature_changesproto_pathoriginal_files
3../datasets/lmd/lmd_full/9/911cd08fa1fae36e5e0...TrueNaNNaNNaNNaNNaNNaNNaNNaNNaN[s/sou.mid, S/sou.mid]
24../datasets/lmd/lmd_full/9/94862530febd2b295b9...TrueNaNNaNNaNNaNNaNNaNNaNNaNNaN[e/ELVIS_PRESLEY__Dont_Be_Cruel.mid, ElvisPres...
25../datasets/lmd/lmd_full/9/906e72809900e01f919...TrueNaNNaNNaNNaNNaNNaNNaNNaNNaN[dream theater/uagm1.mid]
98../datasets/lmd/lmd_full/9/99e40264f321a4bfc5d...TrueNaNNaNNaNNaNNaNNaNNaNNaNNaN[V/vong_tay_cau_hon.mid]
106../datasets/lmd/lmd_full/9/9f22ccab9572cafafce...TrueNaNNaNNaNNaNNaNNaNNaNNaNNaN[W/Wippenberg - Pong (Tocadisco Remix).mid, W/...
.......................................
178315../datasets/lmd/lmd_full/5/5063a2b400597a372e7...TrueNaNNaNNaNNaNNaNNaNNaNNaNNaN[f/faded.mid, 2009 MIDI/faded_love1-D120patsy_...
178377../datasets/lmd/lmd_full/5/523ce5adc656c872a69...TrueNaNNaNNaNNaNNaNNaNNaNNaNNaN[l/laputa.mid, L/laputa.mid]
178419../datasets/lmd/lmd_full/5/546df09d78a32141369...TrueNaNNaNNaNNaNNaNNaNNaNNaNNaN[h/heraldic.mid, H/heraldic.mid]
178484../datasets/lmd/lmd_full/5/5a4e49112c6cf832341...TrueNaNNaNNaNNaNNaNNaNNaNNaNNaN[w/WESTERN.MID, 2009 MIDI/good_bad_and_ugly4-C...
178525../datasets/lmd/lmd_full/5/5cae276ae00fb1fd464...TrueNaNNaNNaNNaNNaNNaNNaNNaNNaN[soad/Chic_N_Stu.mid]
\n", "

4084 rows × 12 columns

\n", "
" ], "text/plain": [ " midi_path midi_error \\\n", "3 ../datasets/lmd/lmd_full/9/911cd08fa1fae36e5e0... True \n", "24 ../datasets/lmd/lmd_full/9/94862530febd2b295b9... True \n", "25 ../datasets/lmd/lmd_full/9/906e72809900e01f919... True \n", "98 ../datasets/lmd/lmd_full/9/99e40264f321a4bfc5d... True \n", "106 ../datasets/lmd/lmd_full/9/9f22ccab9572cafafce... True \n", "... ... ... \n", "178315 ../datasets/lmd/lmd_full/5/5063a2b400597a372e7... True \n", "178377 ../datasets/lmd/lmd_full/5/523ce5adc656c872a69... True \n", "178419 ../datasets/lmd/lmd_full/5/546df09d78a32141369... True \n", "178484 ../datasets/lmd/lmd_full/5/5a4e49112c6cf832341... True \n", "178525 ../datasets/lmd/lmd_full/5/5cae276ae00fb1fd464... True \n", "\n", " estimate_tempo tempi_sec tempi end_time drums resolution \\\n", "3 NaN NaN NaN NaN NaN NaN \n", "24 NaN NaN NaN NaN NaN NaN \n", "25 NaN NaN NaN NaN NaN NaN \n", "98 NaN NaN NaN NaN NaN NaN \n", "106 NaN NaN NaN NaN NaN NaN \n", "... ... ... ... ... ... ... \n", "178315 NaN NaN NaN NaN NaN NaN \n", "178377 NaN NaN NaN NaN NaN NaN \n", "178419 NaN NaN NaN NaN NaN NaN \n", "178484 NaN NaN NaN NaN NaN NaN \n", "178525 NaN NaN NaN NaN NaN NaN \n", "\n", " instrument_names num_time_signature_changes proto_path \\\n", "3 NaN NaN NaN \n", "24 NaN NaN NaN \n", "25 NaN NaN NaN \n", "98 NaN NaN NaN \n", "106 NaN NaN NaN \n", "... ... ... ... \n", "178315 NaN NaN NaN \n", "178377 NaN NaN NaN \n", "178419 NaN NaN NaN \n", "178484 NaN NaN NaN \n", "178525 NaN NaN NaN \n", "\n", " original_files \n", "3 [s/sou.mid, S/sou.mid] \n", "24 [e/ELVIS_PRESLEY__Dont_Be_Cruel.mid, ElvisPres... \n", "25 [dream theater/uagm1.mid] \n", "98 [V/vong_tay_cau_hon.mid] \n", "106 [W/Wippenberg - Pong (Tocadisco Remix).mid, W/... \n", "... ... \n", "178315 [f/faded.mid, 2009 MIDI/faded_love1-D120patsy_... \n", "178377 [l/laputa.mid, L/laputa.mid] \n", "178419 [h/heraldic.mid, H/heraldic.mid] \n", "178484 [w/WESTERN.MID, 2009 MIDI/good_bad_and_ugly4-C... \n", "178525 [soad/Chic_N_Stu.mid] \n", "\n", "[4084 rows x 12 columns]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_df[midi_df['midi_error'] == True]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For now, we will simply ignore those files and focus on the ones that we could sucessfully parse.\n", "\n", "For our experiments it is important that the MIDI files contain a drum track - only those files that we could parse succssfully and that contain a drum track can be used for training of our model." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "midi_df.drums.value_counts().plot.pie()\n", "plt.title(\"MIDI files that contain drums\");" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "midi_df.drums.value_counts().plot.bar();\n", "plt.title(\"Number of MIDI files that contain drums\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We should verify that the files in which we did not detect any drums have indeed no drums by listening to a random subset of them." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
midi_pathmidi_errorestimate_tempotempi_sectempiend_timedrumsresolutioninstrument_namesnum_time_signature_changesproto_pathoriginal_files
170937../datasets/lmd/lmd_full/5/5c7f00cfbfb1c7a4c8d...False219.517230[0.0, 216.0][80.0, 82.00003553334875]422.539545False480.0[Piano]1.0../datasets/lmd/proto/5c7f00cfbfb1c7a4c8df5cc0...[C/Casablan.MID, C/CASABLAN.MID, C/CASABLAN.MID]
173537../datasets/lmd/lmd_full/5/5ccabab69a29eb49782...False134.749985[0.0, 0.4225350000000001, 2.9225340000000006, ...[71.00003550001773, 72.0000288000115, 68.00007...271.779287False192.0[Flute, Celeste, Harp, Vibes]10.0../datasets/lmd/proto/5ccabab69a29eb49782f7ac2...[A/AS_OP19.MID, A/AS_OP19.MID]
160054../datasets/lmd/lmd_full/2/248de65be7464e72e13...False288.075739[0.0][143.99988480009216]13.333344False96.0[MIDI out]0.0../datasets/lmd/proto/248de65be7464e72e13026ee...[H/Heaven's Cry - I Dont Need This No More.mid...
104986../datasets/lmd/lmd_full/d/d62040c47cc8ccc1256...False230.565249[0.0, 1.1940279999999999, 1.6062414999999999, ...[201.00031155048293, 131.00007641671124, 18.00...418.198189False240.0[Diskant]1.0../datasets/lmd/proto/d62040c47cc8ccc12566150b...[r/raffsonatacl.mid, R/raffsonatacl.mid]
177415../datasets/lmd/lmd_full/5/5d3a4dcffc36dc21507...False183.485497[0.0, 26.052641999999995, 26.252641999999994, ...[75.99996960001218, 75.0, 73.99998273333736, 7...355.954855False96.0[PRIMI MANDOLINI, SECONDI MANDOLINI, MANDOLE, ...3.0../datasets/lmd/proto/5d3a4dcffc36dc21507ef683...[p/primiracconti.mid, P/primiracconti.mid]
25978../datasets/lmd/lmd_full/7/7a6107b2ebe71033dd6...False133.333333[0.0][100.0]46.500000False120.0[, , , ]1.0../datasets/lmd/proto/7a6107b2ebe71033dd6d7a5b...[h/himno442.mid, H/himno442.mid]
17961../datasets/lmd/lmd_full/0/09634cc18ee4b3e3d8e...False224.868701[0.0][132.000132000132]198.167415False192.0[Clarinet, Trumpet, Tuba, Strings, Strings]1.0../datasets/lmd/proto/09634cc18ee4b3e3d8e84072...[a/Airship_Remix.mid, A/Airship_Remix.mid]
34639../datasets/lmd/lmd_full/6/603e957bc609b539948...False100.000000[0.0, 62.5, 65.5, 86.5, 91.5, 112.5, 113.5, 11...[60.0, 30.0, 60.0, 30.0, 60.0, 30.0, 60.0, 30....191.763885False96.0[Soprano, Alto, Tenor, Bass, Piano (hi), Piano...5.0../datasets/lmd/proto/603e957bc609b5399481f26f...[bliss/ppb74mhamt.mid]
161340../datasets/lmd/lmd_full/2/24c247fe99ec2cfb909...False141.750142[0.0][126.00012600012599]63.805492False240.0[Piano, Piano]1.0../datasets/lmd/proto/24c247fe99ec2cfb909c4aa4...[W/waltz_05.mid, brahms/waltz_05.mid]
29071../datasets/lmd/lmd_full/7/7d3cac11d3db19406bb...False106.219130[0.0][91.04496862742124]42.176960False96.0[, , , ]1.0../datasets/lmd/proto/7d3cac11d3db19406bb568a5...[Christian/Inmyhart.mid, Various Artists/inmyh...
\n", "
" ], "text/plain": [ " midi_path midi_error \\\n", "170937 ../datasets/lmd/lmd_full/5/5c7f00cfbfb1c7a4c8d... False \n", "173537 ../datasets/lmd/lmd_full/5/5ccabab69a29eb49782... False \n", "160054 ../datasets/lmd/lmd_full/2/248de65be7464e72e13... False \n", "104986 ../datasets/lmd/lmd_full/d/d62040c47cc8ccc1256... False \n", "177415 ../datasets/lmd/lmd_full/5/5d3a4dcffc36dc21507... False \n", "25978 ../datasets/lmd/lmd_full/7/7a6107b2ebe71033dd6... False \n", "17961 ../datasets/lmd/lmd_full/0/09634cc18ee4b3e3d8e... False \n", "34639 ../datasets/lmd/lmd_full/6/603e957bc609b539948... False \n", "161340 ../datasets/lmd/lmd_full/2/24c247fe99ec2cfb909... False \n", "29071 ../datasets/lmd/lmd_full/7/7d3cac11d3db19406bb... False \n", "\n", " estimate_tempo tempi_sec \\\n", "170937 219.517230 [0.0, 216.0] \n", "173537 134.749985 [0.0, 0.4225350000000001, 2.9225340000000006, ... \n", "160054 288.075739 [0.0] \n", "104986 230.565249 [0.0, 1.1940279999999999, 1.6062414999999999, ... \n", "177415 183.485497 [0.0, 26.052641999999995, 26.252641999999994, ... \n", "25978 133.333333 [0.0] \n", "17961 224.868701 [0.0] \n", "34639 100.000000 [0.0, 62.5, 65.5, 86.5, 91.5, 112.5, 113.5, 11... \n", "161340 141.750142 [0.0] \n", "29071 106.219130 [0.0] \n", "\n", " tempi end_time drums \\\n", "170937 [80.0, 82.00003553334875] 422.539545 False \n", "173537 [71.00003550001773, 72.0000288000115, 68.00007... 271.779287 False \n", "160054 [143.99988480009216] 13.333344 False \n", "104986 [201.00031155048293, 131.00007641671124, 18.00... 418.198189 False \n", "177415 [75.99996960001218, 75.0, 73.99998273333736, 7... 355.954855 False \n", "25978 [100.0] 46.500000 False \n", "17961 [132.000132000132] 198.167415 False \n", "34639 [60.0, 30.0, 60.0, 30.0, 60.0, 30.0, 60.0, 30.... 191.763885 False \n", "161340 [126.00012600012599] 63.805492 False \n", "29071 [91.04496862742124] 42.176960 False \n", "\n", " resolution instrument_names \\\n", "170937 480.0 [Piano] \n", "173537 192.0 [Flute, Celeste, Harp, Vibes] \n", "160054 96.0 [MIDI out] \n", "104986 240.0 [Diskant] \n", "177415 96.0 [PRIMI MANDOLINI, SECONDI MANDOLINI, MANDOLE, ... \n", "25978 120.0 [, , , ] \n", "17961 192.0 [Clarinet, Trumpet, Tuba, Strings, Strings] \n", "34639 96.0 [Soprano, Alto, Tenor, Bass, Piano (hi), Piano... \n", "161340 240.0 [Piano, Piano] \n", "29071 96.0 [, , , ] \n", "\n", " num_time_signature_changes \\\n", "170937 1.0 \n", "173537 10.0 \n", "160054 0.0 \n", "104986 1.0 \n", "177415 3.0 \n", "25978 1.0 \n", "17961 1.0 \n", "34639 5.0 \n", "161340 1.0 \n", "29071 1.0 \n", "\n", " proto_path \\\n", "170937 ../datasets/lmd/proto/5c7f00cfbfb1c7a4c8df5cc0... \n", "173537 ../datasets/lmd/proto/5ccabab69a29eb49782f7ac2... \n", "160054 ../datasets/lmd/proto/248de65be7464e72e13026ee... \n", "104986 ../datasets/lmd/proto/d62040c47cc8ccc12566150b... \n", "177415 ../datasets/lmd/proto/5d3a4dcffc36dc21507ef683... \n", "25978 ../datasets/lmd/proto/7a6107b2ebe71033dd6d7a5b... \n", "17961 ../datasets/lmd/proto/09634cc18ee4b3e3d8e84072... \n", "34639 ../datasets/lmd/proto/603e957bc609b5399481f26f... \n", "161340 ../datasets/lmd/proto/24c247fe99ec2cfb909c4aa4... \n", "29071 ../datasets/lmd/proto/7d3cac11d3db19406bb568a5... \n", "\n", " original_files \n", "170937 [C/Casablan.MID, C/CASABLAN.MID, C/CASABLAN.MID] \n", "173537 [A/AS_OP19.MID, A/AS_OP19.MID] \n", "160054 [H/Heaven's Cry - I Dont Need This No More.mid... \n", "104986 [r/raffsonatacl.mid, R/raffsonatacl.mid] \n", "177415 [p/primiracconti.mid, P/primiracconti.mid] \n", "25978 [h/himno442.mid, H/himno442.mid] \n", "17961 [a/Airship_Remix.mid, A/Airship_Remix.mid] \n", "34639 [bliss/ppb74mhamt.mid] \n", "161340 [W/waltz_05.mid, brahms/waltz_05.mid] \n", "29071 [Christian/Inmyhart.mid, Various Artists/inmyh... " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_df[midi_df['drums']==False].sample(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lets take also a look at the other metadata we have extracted." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "midi_df.explode('tempi')['tempi'].plot.box(vert=False);\n", "plt.title('Boxplot of tempi');" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "midi_df.explode('tempi')['tempi'].plot.hist(bins=5000, xlim=(0, 300));\n", "plt.title('Histogram of tempi');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We notice a big spork at around 120 bpm which is rather interesting and should be inspected what the exact casue of this spike is.\n", "\n", "It is important to get an understanding and feeling for the data.\n", "We have an expectation of our data which can help us to see if it makes sense and if we parsed it correctly. But that can also be problematic because we project certain simplifying expectations on our data.\n", "\n", "Let's count the occurences of tempo changes in each song." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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AwAA6JRABwAA0CmBDgAAoFMCHQAAQKcEOgAAgE4JdAAAAJ0S6AAAADol0AEAAHRKoAMAAOiUQAcAANApgQ4AAKBTAh0AAECnBDoAAIBOCXQAAACdEugAAAA6JdABAAB0SqADAADolEAHAADQKYEOAACgUwIdAABApwQ6AACATgl0AAAAnRLoAAAAOiXQAQAAdEqgAwAA6JRABwAA0CmBDgAAoFMCHQAAQKcEOgAAgE4JdAAAAJ0S6AAAADol0AEAAHRKoAMAAOiUQAcAANApgQ4AAKBTAh0AAECnBDoAAIBOCXQAAACdEui20ClXnrLUVQAAAO7nBDoAAIBOCXQAAACdEugAAAA6JdABAAB0SqADAADolEAHAADQKYEOAACgUwIdAABApwQ6AACATgl0AAAAnRLoAAAAOiXQAQAAdEqgAwAA6JRABwAA0CmBDgAAoFObDXRV1arq9Mn0r1bVq7dprQAAANishVyh+2aSH62q1du6Mj2oqlTVPcY3N6xcuTKnnHJK1q1blzVr1tw9f82aNVm3bt1m97lu3bocfvjh2WmnnXL44YcvqMxCbKvtAgBAT3r+XryQQHdnkrcm+aXZC6rq4Kr6cFVdUlUfqqqHjvPPqao3VdVHq+qKqnrBpMyvVdU/jWVes9WOZDuYCXILtXr16qxYsSJHHHFEzjzzzJx00km58847c/755+f888/PXXfdlZe97GXzfmDWrVuXtWvX5owzzsgdd9yRM844I2vXrr3PH7JttV0AAOhJ79+LF/oM3VuSHF9VD5o1/4wkf9xa+94k5yV502TZfkmenOQ5Sf5XklTVMUkemeTxSb4vyeOq6oe3uPY7sN122y033nhjXve612XDhg3ZZ599cscdd+Sd73xnjj766Bx99NE577zzsscee+S0006bczunnXZazj777Bx11FHZeeedc9RRR+Xss8+et8xCbKvtAgBAT3r/XrxiISu11r5RVecm+YUkt08WPTHJj47jf5Lk9ZNlf9Fa+06SS6tq33HeMePwqXF6zwwB7++n+6uqn07y00my77775sILL1zo8eww7rjjjrTWcthhh+Wb3/xmrrvuuiTJXXfddffx3HXXXbnqqquSZM5j3Lhx4z3KzJTbuHHjfTov22q7vbv11lvv18e/HGnT5UebLk/adfnRpsvPcm3T3r8XLyjQjd6Q5J+TvGOB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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "midi_df.explode('tempi').groupby('midi_path').size().value_counts().plot.box(vert=False);\n", "plt.title('Boxplot of number of time chages per song');" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "midi_path\n", "../datasets/lmd/lmd_full/9/95cf26881a51f376a54e4e3f049f2d48.mid 6597\n", "../datasets/lmd/lmd_full/3/34c04cd56b1087851f79780360f48225.mid 6096\n", "../datasets/lmd/lmd_full/2/2677cf785791e1cfca13a0566aafbc85.mid 6096\n", "../datasets/lmd/lmd_full/3/34a3df2a3a1e2267cf63657984f608cf.mid 5912\n", "../datasets/lmd/lmd_full/c/c615436a609bf4e82c102503ea01d855.mid 5758\n", "../datasets/lmd/lmd_full/1/1e40fd0edc293c8733a9c1b66517890b.mid 5758\n", "../datasets/lmd/lmd_full/6/6662d98153d0c84d93e794d0c2b3940f.mid 5758\n", "../datasets/lmd/lmd_full/8/8d956a0e5ee409a19adda9db287f7108.mid 4301\n", "../datasets/lmd/lmd_full/0/001549d8bc6ba6dc62ade443cf01a51e.mid 4058\n", "../datasets/lmd/lmd_full/0/0b0fdfe28eb0318ea3ac86046053724b.mid 3922\n", "dtype: int64" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_df.explode('tempi').groupby('midi_path').size().sort_values(ascending=False).head(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Its worth to inspect those files in e.g. [MuseScore](https://musescore.org/de) and try to figure out what happens in them." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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AQAASCIgAgAA0AmIAAAAJBEQAQAA6AREAAAAkgiIAAAAdAIiAAAASQREAAAAOgERAACAJAIiAAAAnYAIAABAEgERAACATkAEAAAgiYAIAABAJyACAACQREAEAACgExABAABIIiACAADQCYgAAAAkERABAADoBEQAAACSCIgAAAB0AiIAAABJBEQAAAA6AREAAIAkAiIAAACdgAgAAEASAREAAIBOQAQAACCJgAgAAEAnIAIAAJBEQAQAAKATEAEAAEgiIAIAANAJiAAAACQREAEAAOgERAAAAJIIiAAAAHQCIgAAAEkERAAAADoBEQAAgCQCIgAAAJ2ACAAAQBIBEQAAgE5ABAAAIImACAAAQCcgAgAAkERABAAAoBMQAQAASCIgAgAA0AmIAAAAJBEQAQAA6AREAAAAkgiIAAAAdAIiAAAASQREAAAAOgERAACAJAIiAAAAnYAIAABAEgERAACATkAEAAAgiYAIAABAJyACAACQREAEAACgExABAABIIiACAADQCYgAAAAkERABAADoBEQAAACSCIgAAAB0AiIAAABJBEQAAAA6AREAAIAkAiIAAACdgAgAAEASAREAAIBOQAQAACCJgAgAAEAnIAIAAJBEQAQAAKATEAEAAEgiIAIAANAJiAAAACQREAEAAOgERAAAAJIIiAAAAHQCIgAAAEkERAAAADoBEQAAgCQCIgAAAJ2ACAAAQBIBEQAAgE5ABAAAIImACAAAQCcgAgAAkERABAAAoBMQAQAASCIgAgAA0AmIAAAAJBEQAQAA6AREAAAAkgiIAAAAdAIiAAAASQREAAAAOgERAACAJAIiAAAAnYAIAABAEgERAACATkAEAAAgiYAIAABAt2bUDWB+//D11+ahqX+Xew+9KWedvja3vO7iUTcJAABY4dxBHFNf++sHkyS3v+nZs+MAAADLSUAEAAAgiYAIAABAJyACAACQREAEAACgExABAABIIiACAADQCYgAAAAkERABAADoBMQx8sxnPvOYlquqZW4JAAAwiQREAAAAkgiIAAAAdAIiAAAASQREAAAAOgERAACAJAIiAAAA3bIHxKq6b5F5U1X1L4c+X1hVb13uNp2qqmr2n7iYGZ+UYfXq1Q/7vGHDhuzfv3/22Fx++eVZv359qipr167NYx/72KxevTrbt2/P5Zdfnu3bt2f16tXZsmVLtmzZ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4MGDueiii0bdDE4CtZ4M6jw51HoyqPPkmPRaV9VNrbUL504/6o/UJElr7f1J3j9n8oah+R9I8oE+/rkkTxta7rWLbPfBJN89Z/LBPu/KOcsO7+/KofGbkzzjaH0AAABgcatG3QAAAADGwzHdQXy0qurbkvzqnMmHW2v/6GTsHwAAgKM7KQGxtXZrkiefjH0BAABwYjxiCgAAQBIBEQAAgE5AHCPXXXfdMS3nn7gAAACWg4AIAABAEgERAACATkAEAAAgiYAIAABAJyACAACQREAEAACgExABAABIIiACAADQCYhjbuqKa3LW6WtH3QwAAGACrBl1A5jf7W96dpJnj7oZAADABHEHEQAAgCQCIgAAAJ2ACAAAQBIBEQAAgE5ABAAAIImACAAAQCcgAgAAkERABAAAoBMQAQAASCIgAgAA0AmIAAAAJBEQAQAA6AREAAAAkgiIAAAAdAIiAAAASQREAAAAOgERAACAJAIiAAAAnYAIAABAEgERAACATkAEAAAgiYAIAABAJyACAACQREAEAACgExABAABIIiACAADQCYgAAAAkERABAADoBEQAAACSCIgAAAB0AiIAAABJBEQAAAA6AREAAIAkAiIAAACdgAgAAEASAREAAIBOQAQAACCJgAgAAEAnIAIAAJBEQAQAAKATEAEAAEgiIAIAANAJiAAAACQREAEAAOgERAAAAJIIiAAAAHQCIgAAAEkERAAAADoBEQAAgCQCIgAAAJ2ACAAAQBIBEQAAgE5ABAAAIImACAAAQCcgAgAAkERABAAAoBMQAQAASCIgAgAA0AmIAAAAJBEQAQAA6AREAAAAkgiIAAAAdAIiAAAASQREAAAAOgERAACAJAIiAAAAnYAIAABAEgERAACATkAEAAAgiYAIAABAJyACAACQREAEAACgExABAABIIiACAADQCYgAAAAkERABAADoBEQAAACSCIgAAAB0AiIAAABJBEQAAAA6AREAAIAkAiIAAACdgAgAAEASAREAAIBOQAQAACCJgAgAAEAnIAIAAJBEQAQAAKATEAEAAEgiIAIAANAJiAAAACQREAEAAOgERAAAAJIIiAAAAHQCIgAAAEkERAAAADoBEQAAgCQCIgAAAJ2ACAAAQBIBEQAAgE5ABAAAIImACAAAQCcgAgAAkERABAAAoBMQAQAASCIgAgAA0AmIAAAAJBEQ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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "midi_df['end_time'].plot.box(vert=False);\n", "plt.title('Boxplot of end_time');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that the `end_time` has some extreme values that are probably wrong - let's inspect those examples closer to see if we can see a pattern." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "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", " \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", "
midi_pathmidi_errorestimate_tempotempi_sectempiend_timedrumsresolutioninstrument_namesnum_time_signature_changesproto_pathoriginal_files
84737../datasets/lmd/lmd_full/f/f7b41341a20201f860c...False225.041860[0.0][128.0]31055.625000False120.0[Melody, On the Sun Road, Vivian Lai, Joseph L...2.0../datasets/lmd/proto/f7b41341a20201f860cb375e...[s/sunroad.mid, S/sunroad.mid]
28204../datasets/lmd/lmd_full/7/7abab3566b77073f827...False220.109820[0.0, 1.411764, 67.095876, 129.0154569375, 129...[170.0000850000425, 95.00014250021376, 70.0000...25714.187790True96.0[, , , , , , , ]9.0../datasets/lmd/proto/7abab3566b77073f8274c097...[FErnszt/Olala.mid]
69901../datasets/lmd/lmd_full/a/af6b689cfbb13c302bd...False229.041171[0.0, 5.052624, 40.420992, 94.420992, 118.4209...[95.00014250021376, 190.0002850004275, 80.0, 1...20384.791244True96.0[Acoustic Bass, Brass, Grand piano, Rock Organ...7.0../datasets/lmd/proto/af6b689cfbb13c302bd41b86...[FErnszt/Swingin.mid]
26973../datasets/lmd/lmd_full/7/73f4f536d3d42293bd7...False144.311366[0.0][122.00006913337249]19652.447880True192.0[tk1, tk2, tk3, tk4, tk10, tk11]1.0../datasets/lmd/proto/73f4f536d3d42293bd789b34...[Clapton Eric/Bellbottom Blues.mid, Various Ar...
24515../datasets/lmd/lmd_full/7/7486b07d9a4060fa614...False181.059483[0.0, 0.4829544166666666, 1.9996389166666664, ...[88.00002346667293, 89.00994241056726, 90.0099...19623.803343True192.0[Steel Str.Guitar, Fretless Bass, Piano, Violi...13.0../datasets/lmd/proto/7486b07d9a4060fa6142ac46...[K/Kevin Parent Les Doigts 2.mid]
\n", "
" ], "text/plain": [ " midi_path midi_error \\\n", "84737 ../datasets/lmd/lmd_full/f/f7b41341a20201f860c... False \n", "28204 ../datasets/lmd/lmd_full/7/7abab3566b77073f827... False \n", "69901 ../datasets/lmd/lmd_full/a/af6b689cfbb13c302bd... False \n", "26973 ../datasets/lmd/lmd_full/7/73f4f536d3d42293bd7... False \n", "24515 ../datasets/lmd/lmd_full/7/7486b07d9a4060fa614... False \n", "\n", " estimate_tempo tempi_sec \\\n", "84737 225.041860 [0.0] \n", "28204 220.109820 [0.0, 1.411764, 67.095876, 129.0154569375, 129... \n", "69901 229.041171 [0.0, 5.052624, 40.420992, 94.420992, 118.4209... \n", "26973 144.311366 [0.0] \n", "24515 181.059483 [0.0, 0.4829544166666666, 1.9996389166666664, ... \n", "\n", " tempi end_time drums \\\n", "84737 [128.0] 31055.625000 False \n", "28204 [170.0000850000425, 95.00014250021376, 70.0000... 25714.187790 True \n", "69901 [95.00014250021376, 190.0002850004275, 80.0, 1... 20384.791244 True \n", "26973 [122.00006913337249] 19652.447880 True \n", "24515 [88.00002346667293, 89.00994241056726, 90.0099... 19623.803343 True \n", "\n", " resolution instrument_names \\\n", "84737 120.0 [Melody, On the Sun Road, Vivian Lai, Joseph L... \n", "28204 96.0 [, , , , , , , ] \n", "69901 96.0 [Acoustic Bass, Brass, Grand piano, Rock Organ... \n", "26973 192.0 [tk1, tk2, tk3, tk4, tk10, tk11] \n", "24515 192.0 [Steel Str.Guitar, Fretless Bass, Piano, Violi... \n", "\n", " num_time_signature_changes \\\n", "84737 2.0 \n", "28204 9.0 \n", "69901 7.0 \n", "26973 1.0 \n", "24515 13.0 \n", "\n", " proto_path \\\n", "84737 ../datasets/lmd/proto/f7b41341a20201f860cb375e... \n", "28204 ../datasets/lmd/proto/7abab3566b77073f8274c097... \n", "69901 ../datasets/lmd/proto/af6b689cfbb13c302bd41b86... \n", "26973 ../datasets/lmd/proto/73f4f536d3d42293bd789b34... \n", "24515 ../datasets/lmd/proto/7486b07d9a4060fa6142ac46... \n", "\n", " original_files \n", "84737 [s/sunroad.mid, S/sunroad.mid] \n", "28204 [FErnszt/Olala.mid] \n", "69901 [FErnszt/Swingin.mid] \n", "26973 [Clapton Eric/Bellbottom Blues.mid, Various Ar... \n", "24515 [K/Kevin Parent Les Doigts 2.mid] " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_df.sort_values('end_time', ascending=False).head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Regarding this, it seems we should filter out those really long pieces as those are most probably wrong files.\n", "\n", "Those errors could be caused by our parsing or by the MIDI files itself - but as we have a big enough corpora it is justifiable by not including those outliers." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Resolution corresponds to the [PPQN](https://en.wikipedia.org/wiki/Pulses_per_quarter_note) of the MIDI file.\n", "Everything above 1000 should be suspicious, so let's take a look at those examples." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "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", " \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", "
midi_pathmidi_errorestimate_tempotempi_sectempiend_timedrumsresolutioninstrument_namesnum_time_signature_changesproto_pathoriginal_files
33871../datasets/lmd/lmd_full/6/610987ebaf0a326db40...False239.221606[0.0][120.0]135.368840False25000.0[, , , ]1.0../datasets/lmd/proto/610987ebaf0a326db4089867...[b/beethovenalladanza.mid, B/beethovenalladanz...
45187../datasets/lmd/lmd_full/1/1283eddbc4ab9042dcc...False225.608072[0.0][112.00005973336519]79.280092True24576.0[, , ]1.0../datasets/lmd/proto/1283eddbc4ab9042dccaea09...[Pop_and_Top40/2 Pac - Changes.mid, Pop_and_To...
67351../datasets/lmd/lmd_full/a/a5c6eb45c94d84474cb...False235.213491[0.0][120.0]26.987488False16384.0[, , ]2.0../datasets/lmd/proto/a5c6eb45c94d84474cbe00a3...[a/amigo3.mid, A/amigo3.mid]
159033../datasets/lmd/lmd_full/2/2076f0fa330be484c1c...False236.923314[0.0][140.00014000014]26.999973False15360.0[Main Lead]1.0../datasets/lmd/proto/2076f0fa330be484c1c60242...[M/M.I.D.O.R. - Far East.mid, M/m.i.d.o.r.__fa...
15472../datasets/lmd/lmd_full/0/0c3f038f4eaed7d7f8c...False272.000290[0.0][136.0001450668214]28.014676False15360.0[Melody]1.0../datasets/lmd/proto/0c3f038f4eaed7d7f8c90478...[W/whiteroom__someday_intro__ambia.mid, W/Whit...
\n", "
" ], "text/plain": [ " midi_path midi_error \\\n", "33871 ../datasets/lmd/lmd_full/6/610987ebaf0a326db40... False \n", "45187 ../datasets/lmd/lmd_full/1/1283eddbc4ab9042dcc... False \n", "67351 ../datasets/lmd/lmd_full/a/a5c6eb45c94d84474cb... False \n", "159033 ../datasets/lmd/lmd_full/2/2076f0fa330be484c1c... False \n", "15472 ../datasets/lmd/lmd_full/0/0c3f038f4eaed7d7f8c... False \n", "\n", " estimate_tempo tempi_sec tempi end_time drums \\\n", "33871 239.221606 [0.0] [120.0] 135.368840 False \n", "45187 225.608072 [0.0] [112.00005973336519] 79.280092 True \n", "67351 235.213491 [0.0] [120.0] 26.987488 False \n", "159033 236.923314 [0.0] [140.00014000014] 26.999973 False \n", "15472 272.000290 [0.0] [136.0001450668214] 28.014676 False \n", "\n", " resolution instrument_names num_time_signature_changes \\\n", "33871 25000.0 [, , , ] 1.0 \n", "45187 24576.0 [, , ] 1.0 \n", "67351 16384.0 [, , ] 2.0 \n", "159033 15360.0 [Main Lead] 1.0 \n", "15472 15360.0 [Melody] 1.0 \n", "\n", " proto_path \\\n", "33871 ../datasets/lmd/proto/610987ebaf0a326db4089867... \n", "45187 ../datasets/lmd/proto/1283eddbc4ab9042dccaea09... \n", "67351 ../datasets/lmd/proto/a5c6eb45c94d84474cbe00a3... \n", "159033 ../datasets/lmd/proto/2076f0fa330be484c1c60242... \n", "15472 ../datasets/lmd/proto/0c3f038f4eaed7d7f8c90478... \n", "\n", " original_files \n", "33871 [b/beethovenalladanza.mid, B/beethovenalladanz... \n", "45187 [Pop_and_Top40/2 Pac - Changes.mid, Pop_and_To... \n", "67351 [a/amigo3.mid, A/amigo3.mid] \n", "159033 [M/M.I.D.O.R. - Far East.mid, M/m.i.d.o.r.__fa... \n", "15472 [W/whiteroom__someday_intro__ambia.mid, W/Whit... " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_df.sort_values('resolution', ascending=False).head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another important metric is the number of time signatures.\n", "\n", "If we use a step-sequencer like approach, we will need our data to have one time signature only." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "midi_df['num_time_signature_changes'].plot.box(vert=False);" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "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", " \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", "
midi_pathmidi_errorestimate_tempotempi_sectempiend_timedrumsresolutioninstrument_namesnum_time_signature_changesproto_pathoriginal_files
72284../datasets/lmd/lmd_full/a/a85612fb0992100bded...False222.143725[0.0, 1.54624, 1.6513706666666668, 1.779370666...[194.0190397350993, 190.23944805194805, 195.31...204.310165True48.0[STRAUSS, STRAUSS, STRAUSS, STRAUSS, STRAUSS, ...959.0../datasets/lmd/proto/a85612fb0992100bded76798...[S/STRAUSS.MID, S/STRAUSS.MID]
26776../datasets/lmd/lmd_full/7/7d42a95293cc47bcacf...False199.481296[0.0, 1.6240640000000002, 2.071552, 2.22173866...[160.0922131147541, 134.08180778032036, 133.16...229.441685True48.0[NACHT, NACHT, NACHT, NACHT, NACHT, NACHT, NACHT]782.0../datasets/lmd/proto/7d42a95293cc47bcacfaa568...[Hollands/NACHT.MID]
168045../datasets/lmd/lmd_full/5/5693291bc82548fea37...False242.258977[0.0][136.0001450668214]255.266272True96.0[VIBRA SLAP, VIBRA SLAP, VIBRA SLAP, VIBRA SLA...479.0../datasets/lmd/proto/5693291bc82548fea376ec42...[S/Striving.MID, Midis Diversas/STRIVING.MID, ...
60293../datasets/lmd/lmd_full/8/85b2d4e8637008f6b4e...False218.486679[0.0, 2.5, 73.5, 75.586952, 89.884816, 131.884...[96.0, 240.0, 230.00049833441304, 235.00013708...283.476487False1024.0[, ]424.0../datasets/lmd/proto/85b2d4e8637008f6b4e54e5c...[B/beevar2.mid]
44034../datasets/lmd/lmd_full/6/69df67cd25dd33c1217...False228.828269[0.0, 1.25, 3.65, 102.78041, 105.1804100000000...[96.0, 100.0, 115.0000287500072, 100.0, 115.00...407.079384False1024.0[, ]382.0../datasets/lmd/proto/69df67cd25dd33c12177e159...[Schumann/Schuman Toccata op7.mid, Schumann/Sc...
\n", "
" ], "text/plain": [ " midi_path midi_error \\\n", "72284 ../datasets/lmd/lmd_full/a/a85612fb0992100bded... False \n", "26776 ../datasets/lmd/lmd_full/7/7d42a95293cc47bcacf... False \n", "168045 ../datasets/lmd/lmd_full/5/5693291bc82548fea37... False \n", "60293 ../datasets/lmd/lmd_full/8/85b2d4e8637008f6b4e... False \n", "44034 ../datasets/lmd/lmd_full/6/69df67cd25dd33c1217... False \n", "\n", " estimate_tempo tempi_sec \\\n", "72284 222.143725 [0.0, 1.54624, 1.6513706666666668, 1.779370666... \n", "26776 199.481296 [0.0, 1.6240640000000002, 2.071552, 2.22173866... \n", "168045 242.258977 [0.0] \n", "60293 218.486679 [0.0, 2.5, 73.5, 75.586952, 89.884816, 131.884... \n", "44034 228.828269 [0.0, 1.25, 3.65, 102.78041, 105.1804100000000... \n", "\n", " tempi end_time drums \\\n", "72284 [194.0190397350993, 190.23944805194805, 195.31... 204.310165 True \n", "26776 [160.0922131147541, 134.08180778032036, 133.16... 229.441685 True \n", "168045 [136.0001450668214] 255.266272 True \n", "60293 [96.0, 240.0, 230.00049833441304, 235.00013708... 283.476487 False \n", "44034 [96.0, 100.0, 115.0000287500072, 100.0, 115.00... 407.079384 False \n", "\n", " resolution instrument_names \\\n", "72284 48.0 [STRAUSS, STRAUSS, STRAUSS, STRAUSS, STRAUSS, ... \n", "26776 48.0 [NACHT, NACHT, NACHT, NACHT, NACHT, NACHT, NACHT] \n", "168045 96.0 [VIBRA SLAP, VIBRA SLAP, VIBRA SLAP, VIBRA SLA... \n", "60293 1024.0 [, ] \n", "44034 1024.0 [, ] \n", "\n", " num_time_signature_changes \\\n", "72284 959.0 \n", "26776 782.0 \n", "168045 479.0 \n", "60293 424.0 \n", "44034 382.0 \n", "\n", " proto_path \\\n", "72284 ../datasets/lmd/proto/a85612fb0992100bded76798... \n", "26776 ../datasets/lmd/proto/7d42a95293cc47bcacfaa568... \n", "168045 ../datasets/lmd/proto/5693291bc82548fea376ec42... \n", "60293 ../datasets/lmd/proto/85b2d4e8637008f6b4e54e5c... \n", "44034 ../datasets/lmd/proto/69df67cd25dd33c12177e159... \n", "\n", " original_files \n", "72284 [S/STRAUSS.MID, S/STRAUSS.MID] \n", "26776 [Hollands/NACHT.MID] \n", "168045 [S/Striving.MID, Midis Diversas/STRIVING.MID, ... \n", "60293 [B/beevar2.mid] \n", "44034 [Schumann/Schuman Toccata op7.mid, Schumann/Sc... " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_df.sort_values('num_time_signature_changes', ascending=False).head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's check the amount of files we would loose if we limit our files to exactly one time signature." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "(midi_df.num_time_signature_changes <= 1).value_counts().plot.pie();\n", "plt.title('Tracks without time signature changes');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also take a look at the most common instrument names in our dataset." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " 354676\n", "Bass 29532\n", "Drums 19438\n", "untitled 18471\n", "Piano 16344\n", "Strings 10922\n", "Soprano 10478\n", "Guitar 10126\n", "Alto 9368\n", "Tenor 8987\n", "DRUMS 8013\n", "Melody 6693\n", "WinJammer Demo 6488\n", "Voice 6270\n", "Piano (hi) 4905\n", "Piano (lo) 4900\n", "Italian 4679\n", "STRINGS 4003\n", "bass 3785\n", "MELODY 3775\n", "Name: instrument_names, dtype: int64" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_df.explode('instrument_names').instrument_names.value_counts().head(20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And also take a look at the most common names of our original filenames." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ ":1: FutureWarning: The default value of regex will change from True to False in a future version.\n", " midi_df.explode('original_files').original_files.str.replace('[^a-zA-Z]', ' ').str.lower().str.split(' ').explode().value_counts().head(50)\n" ] }, { "data": { "text/plain": [ " 1091324\n", "mid 570786\n", "midi 56765\n", "various 42479\n", "artists 36610\n", "a 34883\n", "the 34148\n", "l 29181\n", "s 28479\n", "polyphone 24771\n", "sure 23089\n", "i 22765\n", "m 20958\n", "e 20792\n", "t 19164\n", "midis 19014\n", "c 18162\n", "b 17950\n", "d 17712\n", "n 17012\n", "h 15452\n", "o 15425\n", "g 13303\n", "you 13228\n", "p 12267\n", "k 12032\n", "of 11890\n", "poly 11836\n", "in 11073\n", "f 10433\n", "beatles 9696\n", "love 9246\n", "r 8911\n", "me 8901\n", "j 8816\n", "diversen 8643\n", "my 8172\n", "to 7585\n", "divers 7025\n", "w 6894\n", "analisadas 6320\n", "no 6073\n", "de 5601\n", "on 5373\n", "and 5349\n", "midirip 5017\n", "it 4853\n", "bach 4692\n", "classical 4542\n", "unsorted 4419\n", "Name: original_files, dtype: int64" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "midi_df.explode('original_files').original_files.str.replace('[^a-zA-Z]', ' ').str.lower().str.split(' ').explode().value_counts().head(50)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An interesting aspect of this analysis reveals that the most common words in a text corpora do not often contain much information what the text is about. This is because the words that belong to the grammatical structure of the text introduce noise to the dataset.\n", "\n", "There are basic algorithms such as [tf-idf](https://en.wikipedia.org/wiki/Tf%E2%80%93idf) which allows us to filter out the noise by asserting that a word which is common in many documents has little no meaning (e.g. *the* or in our case *midi*) and therefore give it a low score.\n", "Although if a significant subset of our file names contain a word that is not so common in the other file names (e.g. *beatles*) this *token* will receive a high rating.\n", "\n", "For now we don't want to inspect this further, but its always good to know such kind of algorithms as it helps to filter out the relevant data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Its also good to make some sanity checks on our data.\n", "One assumption would be that every file in which we did not detect a drum track also does not contain an instrument with the name *drums*." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
midi_pathmidi_errorestimate_tempotempi_sectempiend_timedrumsresolutioninstrument_namesnum_time_signature_changesproto_pathoriginal_files
0../datasets/lmd/lmd_full/0/0093ffc81428aabfa14...False190.000285[0.0][190.0002850004275]137.151110False192.0Drums1.0../datasets/lmd/proto/0093ffc81428aabfa14aaa13...[M/Martha My Dear 3.mid, Beatles +GeorgeJohnPa...
1../datasets/lmd/lmd_full/0/032e298d9560fdbe954...False120.000180[0.0][190.0002850004275]114.947196False120.0Drums1.0../datasets/lmd/proto/032e298d9560fdbe954d7551...[s/smetmoth.mid, S/smetmoth.mid]
2../datasets/lmd/lmd_full/0/043e1c01e58a4bb4499...False139.999977[0.0, 0.4285715, 7.071422000000001, 39.071422][69.99998833333528, 140.00014000014, 60.0, 69....196.778591False120.0Drums1.0../datasets/lmd/proto/043e1c01e58a4bb44995ee38...[Songs+300/Tunnel_o.mid]
3../datasets/lmd/lmd_full/0/06f86377b1dbad0ebf0...False226.482465[0.0, 1.0, 15.608691999999998][120.0, 115.0000287500072, 120.0]59.483692False192.0DRUMS1.0../datasets/lmd/proto/06f86377b1dbad0ebf08fdcd...[s/seaquest2.mid, S/seaquest2.mid]
4../datasets/lmd/lmd_full/0/078e2cc7c46eb5de726...False204.052854[0.0][98.00014373354414]281.211322False192.0Drums1.0../datasets/lmd/proto/078e2cc7c46eb5de72621329...[Pop/SLEGDEHM.MID, PeterGabriel/Sledgehammer6....
.......................................
148../datasets/lmd/lmd_full/f/f2a97c0f7fa26244a77...False218.459582[0.0][70.00007000007]213.553358False192.0drums1.0../datasets/lmd/proto/f2a97c0f7fa26244a77a8d0f...[u/unchainedmelody3.mid, U/UnchainedMelody3.mid]
149../datasets/lmd/lmd_full/f/f6702b2445a6ce9aa8e...False211.143695[0.0][120.0]21.241667False480.0Drums1.0../datasets/lmd/proto/f6702b2445a6ce9aa8e6cad8...[e/ElectroJam.Mid, E/ElectroJam.Mid]
150../datasets/lmd/lmd_full/f/f8a56c3ebc00bfef70d...False157.793103[0.0][80.0]263.847656False192.0Drums1.0../datasets/lmd/proto/f8a56c3ebc00bfef70d033a8...[t/tearinhand.mid, T/tearinhand.mid]
151../datasets/lmd/lmd_full/f/fa06799e6825c6a4095...False284.928064[0.0][148.99983858350816]383.315852False240.0drums16.0../datasets/lmd/proto/fa06799e6825c6a4095e2934...[l/louder.mid, L/louder.mid]
152../datasets/lmd/lmd_full/f/fd37e5d1258ba97fc0e...False235.685752[0.0][100.0]191.795000False120.0Drums1.0../datasets/lmd/proto/fd37e5d1258ba97fc0ef9779...[Christian/Easyway.mid, Various Artists/easywa...
\n", "

153 rows × 12 columns

\n", "
" ], "text/plain": [ " midi_path midi_error \\\n", "0 ../datasets/lmd/lmd_full/0/0093ffc81428aabfa14... False \n", "1 ../datasets/lmd/lmd_full/0/032e298d9560fdbe954... False \n", "2 ../datasets/lmd/lmd_full/0/043e1c01e58a4bb4499... False \n", "3 ../datasets/lmd/lmd_full/0/06f86377b1dbad0ebf0... False \n", "4 ../datasets/lmd/lmd_full/0/078e2cc7c46eb5de726... False \n", ".. ... ... \n", "148 ../datasets/lmd/lmd_full/f/f2a97c0f7fa26244a77... False \n", "149 ../datasets/lmd/lmd_full/f/f6702b2445a6ce9aa8e... False \n", "150 ../datasets/lmd/lmd_full/f/f8a56c3ebc00bfef70d... False \n", "151 ../datasets/lmd/lmd_full/f/fa06799e6825c6a4095... False \n", "152 ../datasets/lmd/lmd_full/f/fd37e5d1258ba97fc0e... False \n", "\n", " estimate_tempo tempi_sec \\\n", "0 190.000285 [0.0] \n", "1 120.000180 [0.0] \n", "2 139.999977 [0.0, 0.4285715, 7.071422000000001, 39.071422] \n", "3 226.482465 [0.0, 1.0, 15.608691999999998] \n", "4 204.052854 [0.0] \n", ".. ... ... \n", "148 218.459582 [0.0] \n", "149 211.143695 [0.0] \n", "150 157.793103 [0.0] \n", "151 284.928064 [0.0] \n", "152 235.685752 [0.0] \n", "\n", " tempi end_time drums \\\n", "0 [190.0002850004275] 137.151110 False \n", "1 [190.0002850004275] 114.947196 False \n", "2 [69.99998833333528, 140.00014000014, 60.0, 69.... 196.778591 False \n", "3 [120.0, 115.0000287500072, 120.0] 59.483692 False \n", "4 [98.00014373354414] 281.211322 False \n", ".. ... ... ... \n", "148 [70.00007000007] 213.553358 False \n", "149 [120.0] 21.241667 False \n", "150 [80.0] 263.847656 False \n", "151 [148.99983858350816] 383.315852 False \n", "152 [100.0] 191.795000 False \n", "\n", " resolution instrument_names num_time_signature_changes \\\n", "0 192.0 Drums 1.0 \n", "1 120.0 Drums 1.0 \n", "2 120.0 Drums 1.0 \n", "3 192.0 DRUMS 1.0 \n", "4 192.0 Drums 1.0 \n", ".. ... ... ... \n", "148 192.0 drums 1.0 \n", "149 480.0 Drums 1.0 \n", "150 192.0 Drums 1.0 \n", "151 240.0 drums 16.0 \n", "152 120.0 Drums 1.0 \n", "\n", " proto_path \\\n", "0 ../datasets/lmd/proto/0093ffc81428aabfa14aaa13... \n", "1 ../datasets/lmd/proto/032e298d9560fdbe954d7551... \n", "2 ../datasets/lmd/proto/043e1c01e58a4bb44995ee38... \n", "3 ../datasets/lmd/proto/06f86377b1dbad0ebf08fdcd... \n", "4 ../datasets/lmd/proto/078e2cc7c46eb5de72621329... \n", ".. ... \n", "148 ../datasets/lmd/proto/f2a97c0f7fa26244a77a8d0f... \n", "149 ../datasets/lmd/proto/f6702b2445a6ce9aa8e6cad8... \n", "150 ../datasets/lmd/proto/f8a56c3ebc00bfef70d033a8... \n", "151 ../datasets/lmd/proto/fa06799e6825c6a4095e2934... \n", "152 ../datasets/lmd/proto/fd37e5d1258ba97fc0ef9779... \n", "\n", " original_files \n", "0 [M/Martha My Dear 3.mid, Beatles +GeorgeJohnPa... \n", "1 [s/smetmoth.mid, S/smetmoth.mid] \n", "2 [Songs+300/Tunnel_o.mid] \n", "3 [s/seaquest2.mid, S/seaquest2.mid] \n", "4 [Pop/SLEGDEHM.MID, PeterGabriel/Sledgehammer6.... \n", ".. ... \n", "148 [u/unchainedmelody3.mid, U/UnchainedMelody3.mid] \n", "149 [e/ElectroJam.Mid, E/ElectroJam.Mid] \n", "150 [t/tearinhand.mid, T/tearinhand.mid] \n", "151 [l/louder.mid, L/louder.mid] \n", "152 [Christian/Easyway.mid, Various Artists/easywa... \n", "\n", "[153 rows x 12 columns]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "explodeded_df = midi_df.explode('instrument_names')\n", "explodeded_df[\n", " (explodeded_df['instrument_names'].str.lower().isin(['drums', 'drum']))&\n", " (explodeded_df['drums'] == False)\n", "].groupby('midi_path').first().reset_index()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Listening to those examples reveal that some of them use another instrument than drums for their drums - either by artistic choice or by mistake.\n", "As this *only* applies to 153 files we can live with this error and ignore the files were we did not detect the drum track." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Filter and extract the data\n", "\n", "After inspecting all availabe files we should filter out some *noisy* files that are either not interesting to us (they lack a drum track) or the parsing of the MIDI files did not work as expected.\n", "With the analysis above we can verify borders of data we want to allow.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
midi_pathmidi_errorestimate_tempotempi_sectempiend_timedrumsresolutioninstrument_namesnum_time_signature_changesproto_pathoriginal_files
5../datasets/lmd/lmd_full/9/9d30679480d0e55a07b...False224.502048[0.0][115.00002875000717]296.347752True120.0[Piano, Organ, Big Brass, Horns, Horns2, Horns...1.0../datasets/lmd/proto/9d30679480d0e55a07be1414...[S/Smooth .mid]
9../datasets/lmd/lmd_full/9/974f5b2466a5d5670df...False184.213982[0.0, 2.714283, 170.86248999999998, 171.960050...[210.00021000021, 80.99997165000993, 82.000035...225.896259True120.0[, , , , , , , , , ]1.0../datasets/lmd/proto/974f5b2466a5d5670dfddee0...[Sure.Polyphone.Midi/A Winter's Tale.mid, w/wi...
10../datasets/lmd/lmd_full/9/952df587b9fff5adbeb...False265.636110[0.0][144.0023040368646]216.460946True480.0[Track 2, Track 3, Track 4, Track 5, Track 6, ...1.0../datasets/lmd/proto/952df587b9fff5adbeb5f40b...[E/Enola Gay 63.mid, divers midi 3/OMD_-_Enola...
11../datasets/lmd/lmd_full/9/93e2cb3a0c36af361bb...False165.000165[0.0][165.000165000165]310.029993True480.0[Chorus Guitar, Overdrive Guita, Overdrive Gui...1.0../datasets/lmd/proto/93e2cb3a0c36af361bb49c5e...[z/zombie05.mid, Z/zombie05.mid]
12../datasets/lmd/lmd_full/9/97c1f795ffb676dfaa5...False212.877687[0.0][110.00011000011]222.766823True192.0[BASS, E.PIANO, GUITAR, STRINGS, PIANO, New Tr...1.0../datasets/lmd/proto/97c1f795ffb676dfaa5a0202...[J/J. Rivers Poor Side of Town.mid, divers mid...
.......................................
178555../datasets/lmd/lmd_full/5/5bd52f314b616bf50c4...False141.332152[0.0, 183.428388, 186.85695800000002, 241.9283...[70.00007000007, 35.00001458333941, 70.0000700...250.221166True480.0[Track 1, Track 2, Track 3, Track 4, Track 6, ...1.0../datasets/lmd/proto/5bd52f314b616bf50c40104c...[T/taylor_swift-tim_mcgraw.mid]
178556../datasets/lmd/lmd_full/5/5eea68ee369af3ee5cc...False184.252715[0.0, 210.73867815, 210.75516165, 210.77763355...[90.00009000009, 91.00009100009099, 89.0000400...299.296908True240.0[You've Made Me So Very Happy, You've Made Me ...1.0../datasets/lmd/proto/5eea68ee369af3ee5cc577ba...[Y/Youvemad L.mid, Y/YOUVEMAD L.mid, Y/YOUVEMA...
178557../datasets/lmd/lmd_full/5/5309fb3f62bf73780e6...False183.172080[0.0][81.01003309259853]139.390142True120.0[, , , , , , , , , ]1.0../datasets/lmd/proto/5309fb3f62bf73780e61f85b...[R/Roberto Carlos - Propuesta L.mid, Midis Jov...
178559../datasets/lmd/lmd_full/5/5538b0174111bcef760...False274.353398[0.0][142.00007100003546]172.389879True96.0[Std Drums, Jazz Gtr, Muted Gtr (Lead Dbl), Mu...1.0../datasets/lmd/proto/5538b0174111bcef760a5f29...[B/Boys 2.mid, b/boys_2.mid, Beatles +GeorgeJo...
178560../datasets/lmd/lmd_full/5/51e756897765aed30af...False229.821409[0.0][64.99999458333379]293.317332True96.0[, , , , , ]1.0../datasets/lmd/proto/51e756897765aed30af232df...[G/Gerry Boulet Deadline.mid]
\n", "

97848 rows × 12 columns

\n", "
" ], "text/plain": [ " midi_path midi_error \\\n", "5 ../datasets/lmd/lmd_full/9/9d30679480d0e55a07b... False \n", "9 ../datasets/lmd/lmd_full/9/974f5b2466a5d5670df... False \n", "10 ../datasets/lmd/lmd_full/9/952df587b9fff5adbeb... False \n", "11 ../datasets/lmd/lmd_full/9/93e2cb3a0c36af361bb... False \n", "12 ../datasets/lmd/lmd_full/9/97c1f795ffb676dfaa5... False \n", "... ... ... \n", "178555 ../datasets/lmd/lmd_full/5/5bd52f314b616bf50c4... False \n", "178556 ../datasets/lmd/lmd_full/5/5eea68ee369af3ee5cc... False \n", "178557 ../datasets/lmd/lmd_full/5/5309fb3f62bf73780e6... False \n", "178559 ../datasets/lmd/lmd_full/5/5538b0174111bcef760... False \n", "178560 ../datasets/lmd/lmd_full/5/51e756897765aed30af... False \n", "\n", " estimate_tempo tempi_sec \\\n", "5 224.502048 [0.0] \n", "9 184.213982 [0.0, 2.714283, 170.86248999999998, 171.960050... \n", "10 265.636110 [0.0] \n", "11 165.000165 [0.0] \n", "12 212.877687 [0.0] \n", "... ... ... \n", "178555 141.332152 [0.0, 183.428388, 186.85695800000002, 241.9283... \n", "178556 184.252715 [0.0, 210.73867815, 210.75516165, 210.77763355... \n", "178557 183.172080 [0.0] \n", "178559 274.353398 [0.0] \n", "178560 229.821409 [0.0] \n", "\n", " tempi end_time drums \\\n", "5 [115.00002875000717] 296.347752 True \n", "9 [210.00021000021, 80.99997165000993, 82.000035... 225.896259 True \n", "10 [144.0023040368646] 216.460946 True \n", "11 [165.000165000165] 310.029993 True \n", "12 [110.00011000011] 222.766823 True \n", "... ... ... ... \n", "178555 [70.00007000007, 35.00001458333941, 70.0000700... 250.221166 True \n", "178556 [90.00009000009, 91.00009100009099, 89.0000400... 299.296908 True \n", "178557 [81.01003309259853] 139.390142 True \n", "178559 [142.00007100003546] 172.389879 True \n", "178560 [64.99999458333379] 293.317332 True \n", "\n", " resolution instrument_names \\\n", "5 120.0 [Piano, Organ, Big Brass, Horns, Horns2, Horns... \n", "9 120.0 [, , , , , , , , , ] \n", "10 480.0 [Track 2, Track 3, Track 4, Track 5, Track 6, ... \n", "11 480.0 [Chorus Guitar, Overdrive Guita, Overdrive Gui... \n", "12 192.0 [BASS, E.PIANO, GUITAR, STRINGS, PIANO, New Tr... \n", "... ... ... \n", "178555 480.0 [Track 1, Track 2, Track 3, Track 4, Track 6, ... \n", "178556 240.0 [You've Made Me So Very Happy, You've Made Me ... \n", "178557 120.0 [, , , , , , , , , ] \n", "178559 96.0 [Std Drums, Jazz Gtr, Muted Gtr (Lead Dbl), Mu... \n", "178560 96.0 [, , , , , ] \n", "\n", " num_time_signature_changes \\\n", "5 1.0 \n", "9 1.0 \n", "10 1.0 \n", "11 1.0 \n", "12 1.0 \n", "... ... \n", "178555 1.0 \n", "178556 1.0 \n", "178557 1.0 \n", "178559 1.0 \n", "178560 1.0 \n", "\n", " proto_path \\\n", "5 ../datasets/lmd/proto/9d30679480d0e55a07be1414... \n", "9 ../datasets/lmd/proto/974f5b2466a5d5670dfddee0... \n", "10 ../datasets/lmd/proto/952df587b9fff5adbeb5f40b... \n", "11 ../datasets/lmd/proto/93e2cb3a0c36af361bb49c5e... \n", "12 ../datasets/lmd/proto/97c1f795ffb676dfaa5a0202... \n", "... ... \n", "178555 ../datasets/lmd/proto/5bd52f314b616bf50c40104c... \n", "178556 ../datasets/lmd/proto/5eea68ee369af3ee5cc577ba... \n", "178557 ../datasets/lmd/proto/5309fb3f62bf73780e61f85b... \n", "178559 ../datasets/lmd/proto/5538b0174111bcef760a5f29... \n", "178560 ../datasets/lmd/proto/51e756897765aed30af232df... \n", "\n", " original_files \n", "5 [S/Smooth .mid] \n", "9 [Sure.Polyphone.Midi/A Winter's Tale.mid, w/wi... \n", "10 [E/Enola Gay 63.mid, divers midi 3/OMD_-_Enola... \n", "11 [z/zombie05.mid, Z/zombie05.mid] \n", "12 [J/J. Rivers Poor Side of Town.mid, divers mid... \n", "... ... \n", "178555 [T/taylor_swift-tim_mcgraw.mid] \n", "178556 [Y/Youvemad L.mid, Y/YOUVEMAD L.mid, Y/YOUVEMA... \n", "178557 [R/Roberto Carlos - Propuesta L.mid, Midis Jov... \n", "178559 [B/Boys 2.mid, b/boys_2.mid, Beatles +GeorgeJo... \n", "178560 [G/Gerry Boulet Deadline.mid] \n", "\n", "[97848 rows x 12 columns]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "filtered_midi_df = midi_df[\n", " (midi_df.drums == True)\n", " & (midi_df.midi_error == False)\n", " & (midi_df.end_time.between(30, 800))\n", " & (midi_df.num_time_signature_changes<=1)\n", "]\n", "filtered_midi_df" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5479696014247232" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(filtered_midi_df)/len(midi_df)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have now filtered half of our available examples, just by looking at the metadata of the MIDI files.\n", "The next step is to transform the drum track of each MIDI file into a mathematical representation. \n", "\n", "The notatation within the MIDI file is bound to time, but in music we often represent the time domain in relation to a tempo which remaps the time measured in seconds.\n", "A common unit for this is *beats per minute* (bpm) where 60 bpm maps each second to a *beat* - if we want to shorten the time between two beats (commonly refered to as *faster*) we increase the *bpm* and vice versa.\n", "\n", "Another instance for the segmentation of events in time is the *time signature* of a track.\n", "\n", "One notation which tries to simplify this notation is in the form of a *step seqencer* in which we snap notes to the nearest step on a grid.\n", "\n", "For this we can use *note_seq* with the function [midi_file_to_drum_track](https://github.com/magenta/note-seq/blob/6631a4299092cd52201e2f4a8e36c1223d76561f/note_seq/drums_lib.py#L269)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion\n", "\n", "We filtered out all noisy examples of our dataset and transformed the drum track into a mathematical, simplified notation.\n", "\n", "In the next step we will start to analyse the drum patterns that we extracted." ] } ], "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" } }, "nbformat": 4, "nbformat_minor": 4 }