[PYTHON] Erkennen Sie allgemeine MIDI-Daten von einer großen Menge von MIDI

TL;DR

Was ist General MIDI?

General MIDI (General Midi) ist ein einheitlicher Standard für MIDI, der grundlegende Tonzuordnungen und Steuerungsänderungen definiert. Abkürzung ist GM. (Aus Wikipedia https://ja.wikipedia.org/wiki/General_MIDI)

GS ist also die Erweiterung dieses Standards von Roland und XG ist die Erweiterung von Yamaha. Zu dieser Zeit war Rolands SC-Serie die meistverkaufte Soundquelle dieser Art, so dass ziemlich viele GS-Daten in Nifty-Foren usw. verteilt wurden. Nostalgisch,,,

Ich möchte eine solche MIDI-Datei im Jahr 2020

Suchen Sie auf dieser reddit-Seite nach GM-, GS- und XG-Daten von 130.000 Songs (https://www.reddit.com/r/WeAreTheMusicMakers/comments/3ajwe4/the_largest_midi_collection_on_the_internet/). Ich habe ein Drehbuch gemacht.

Wie finde ich es?

Bei GM-, GS- und XG-Daten enthält es häufig Informationen zum Konfigurieren des Geräts mit SysEx (wenn Sie die Daten für diese Geräte ordnungsgemäß erstellt haben), also in den MIDI-Daten Ich habe versucht, es mit der Richtlinie zu schaffen, die Sie anhand von SysEx beurteilen sollten.

Was ist SysEx?

Abkürzung für System Exclusive: Diese Seite (https://www.g200kg.com/jp/docs/dic/systemexclusive.html) erklärt Folgendes.

Dies ist eine der Arten von MIDI-Nachrichten und keine für MIDI übliche Funktion, sondern eine Nachricht, mit der Funktionen wie z. B. modellspezifische Effekte der Tonquelle gesteuert werden.

Wenn ich also die SysEx jedes Unternehmens überprüfte, indem ich sagte, dass wenn es MIDI-Daten sind, die eine Funktion von GM, GS, XG verwenden, die entsprechende SysEx enthalten sein sollte, ...

Arten von MIDI-Datenstandards System Exclusive
GM (General MIDI) F0 7E xx 09
GS (Rolands GM-Erweiterung) F0 41 xx 42
XG (Yamaha GM Erweiterung F0 43 xx 4C

Wenn es zu Beginn von SysEx enthalten ist, kann gesagt werden, dass es sich um einen Plan jedes Herstellers handelt. In der obigen Tabelle markiert F0 den Beginn von SysEx. Als nächstes folgt die Hersteller-ID, xx die Geräte-ID (gerätespezifische ID) und die letzte die Modell-ID (Wenn Sie Rolands GS hören, sieht es wie die Modell-ID 42 aus, damit Sie die GS-Tonquelle identifizieren können). Verwenden Sie diese.

Über das Skript

Es gibt eine Bibliothek namens mido (https://mido.readthedocs.io/en/latest/#) für die Verarbeitung von midi in Python, daher verwende ich sie. Der Name des Repositorys wurde auch verwendet, um es zu beherrschen, nicht wahr? Das Mido ist gut gepflegt (wichtig) und kann funktional unterschiedlich sein, daher denke ich, dass es perfekt für den Umgang mit dem Midi ist.

Das Ausführungsergebnis ist eine Datei namens "GMMidiCheck.ipynb". Als ich schrieb, sagte mir mein Freund: "Wenn Sie in .py schreiben, können Sie den Test in CI ausführen", und ich dachte, dass dies der Fall ist, sodass alle Funktionen (immerhin) in midi_utill.py geschrieben sind. Ich habe noch keinen Test geschrieben, aber ...). Daher ist in jeder Zelle von .jpynb

importlib.reload(midi_utill)

Also lade ich midi_utill.py neu. Der Punkt dieser Verarbeitung ist also, dass wir SysEx von MIDI-Dateien vergleichen müssen, also vergleichen wir, nachdem wir alle Midi in Hex mit der folgenden Funktion konvertiert haben.

def getMidiHexData(midifilename):
    import mido
    midi = mido.MidiFile(midifilename)
    MidiData = []
    for i in range(len(midi.tracks)):
        for msg in midi.tracks[i]:
#             print(msg.hex())
            MidiData.append(msg.hex())
    
    return MidiData

Außerdem habe ich viel über den Umgang mit Dateien, Verzeichnissen usw. gelernt, aber da es um Python selbst geht, werde ich es weglassen. Wenn Sie also interessiert sind, lesen Sie bitte das Skript.

Übrigens, bitte geben Sie die folgenden zwei als Variablen in GMMidiCheck.ipynb an.

Es wird davon ausgegangen, dass sich die reddit-Daten im selben Verzeichnis wie "GMMidiCheck.ipynb" befinden. Ebenso wird davon ausgegangen, dass Daten, die als GM-konform eingestuft werden, durch Erstellen eines Verzeichnisses am selben Speicherort ausgeschrieben werden.

Was ist mit dem Ergebnis passiert?

Von den 130.000 Songs (in diesem Skript) wurden 33.000 Songs als "wie GM-, GS-, XG-Daten" abgefangen.

Dies reicht aus, um Quelldaten für maschinelles Lernen zu lernen, nicht wahr? Da die Toninformationen im Fall von GM für die Öffentlichkeit zugänglich sind, ist es außerdem möglich, "Schlagzeug und Percussion", "einzelne Musikinstrumente", "doppelte Musikinstrumente" usw. aus dem Track zu extrahieren (und da sie GM-konform sind, können sie zuverlässig mit Steuerungsänderungsinformationen extrahiert werden. Sollte sicher sein. Ich bin sicher).

Übrigens dauert es ungefähr 5 Stunden, um 130.000 Songs zu überprüfen. Verwenden Sie sie also systematisch.

Recommended Posts

Erkennen Sie allgemeine MIDI-Daten von einer großen Menge von MIDI
Hinweise zum Umgang mit großen Datenmengen mit Python + Pandas
Vorverarbeitung von Wikipedia-Dump-Dateien und gemeinsame Nutzung großer Datenmengen mit MeCab
Erfassung von Pflanzenwachstumsdaten Erfassung von Daten von Sensoren
Übergang von Baseball aus Daten gesehen
Ich möchte Bilder von Katzen von Instagram erkennen
Generieren Sie aus Textdaten ein vertikales Bild eines Romans
DataNitro, Implementierung einer Funktion zum Lesen von Daten aus dem Blatt
[Grundlagen der Datenwissenschaft] Sammeln von Daten aus RSS mit Python