- Werbung -

In diesem zweiteiligen Artikel beschreiben Sighard Schräbler und Dharaha Thanapalasingham ausführlich den Bau und die Programmierung eines Guitarbots, einer einsaitigen, computergesteuerten Gitarre, im Rahmen eines Schülerprojekts. Bevor man hier weiterlist, sollte man unbedingt den ersten Teil des Artikels kennen. Dort findet man auch Bilder und einen Link zu einem Video des fertigen Geräts. Die im Folgenden erwähnten Skripte und MIDI-Dateien zur Ansteuerung des Guitarbot kann man unter diesem Link in ein ZIP-Archiv zusammengefasst herunterladen. (Anm. d. Red.)

Die Darstellung der Musik im Computer: Vom MIDI-File bis zum C-Programm

Musik besteht in einer abstrahierten Darstellung einfach nur aus Zahlenreihen, eine Aussage, die Pythagoras, den Erfin­der des Monochords sicher erfreut hätte. MIDI, das Datenformat für digitale Musikinstrumente, enthält im Wesentlichen (hex 9x) NoteOn- und (hex 8x) NoteOff-Befehle. Im Prinzip ist MIDI-Protokoll einfach ein serieller Datenstrom mit 31.25kBd Datenrate über eine mit Optokoppler potenzialfrei gehaltene Schnittstelle. MIDI-Format ist in sofern praktisch, weil so ziemlich jeder Sequenzer MIDI-Format aufzeichnen, arrangieren und wiedergeben kann. 

Bild 15: Der Sequenzer Logic Express kann MIDI-Format importieren und exportieren oder als Zuspieler für ein externes Gerät via MIDI-Schnittstelle dienen. Hier entsteht die Melodie, die später wiedergegeben wird.

In Dateiform kommt noch eine Zeitachse hinzu, wann ein Ton eingeschaltet oder ausgeschaltet wird. Man unterscheidet drei Ausprägungen SMF0 bis 2, je nachdem, ob  alle Kanäle in einer Spur zusammengefasst sind, ob jeder Kanal seine eigene Spur (Track) hat oder ob verschiedene Tracks auch die gleiche MIDI-Kanalnummer haben.

All dem kann man entnehmen, dass man einen Mikrocontroller zwar sehr wohl mit MIDI-Protokoll, jedoch besser nicht mit MIDI-Dateien füttert, alleine schon um Speicherplatz zu sparen. Der nächste Schritt besteht also darin, MIDI in drei Arrays zu übersetzen: notes[] mit den Tonhöhen und noteon[] und notoff[] mit den Ein- und Ausschaltzeitpunkten. Die Arrays dürfen dabei nur die Stimme enthalten, die der monophone Guitarbot spielen soll.

Sofern man Matlab oder das freie Octave nutzt, bietet sich die readmidi Library von Ken Schutte an, sie ermöglicht das Einlesen von Midi-Spuren, die danach als Arrays in Matlab vorliegen, siehe http://www.kenschutte.com/midi

Bild 16: readmidi von Ken Schutte übersetzt MIDI-Dateien in Arrays, dabei entsprechen die Spalten von Notes der Reihe nach Track-Nummer, Kanal-Nummer, Note, Anschlag-Geschwindigkeit, Beginn in Sekunden, Ende in Sekunden, Nachrichten-Nummer NoteOn und Nachrichten-Nummer NoteOff.

Auf Basis der readmidi Library wandelt das Skript e10.m (s. Anhang) die in der MIDI-Datei enthaltenen NoteOn-Befehle und die zugehörigen Zeitpunkte in C-formatierte Arrays um, die von Hand direkt dem Guitarbot C-Programm hinzugefügt werden. Ausschaltzeitpunkte dürfen vereinfachend weggelassen werden, wenn man die Noten einfach ausklingen lässt, so kommt man auch mit dem vergleichsweise kleinen Speicher des Arduino Redboards zurecht.

Bild 17: Die Arrays notes[] und noteon[] aus Octave werden direkt in das Guitarbot-Programm kopiert. Anzupassen ist nur die maximale Zeit maxtime und die Tabellenlänge maxptr. Außerdem ist es möglich, das Lied nachträglich zu transponieren.

 

Programmierung: Ein ganz einfacher Sequenzer

Bild18: Das eigentliche Sequenzer-Programm. Über die serielle Schnittstelle besteht ein Rückkanal zum Entwicklungsrechner, hier kann die Ansteuerung synchron zum Spiel als Textausgabe verfolgt werden.

Sieht man von den umfangreichen Arrays mit Noten und Einschaltzeitpunkten ab, so ist das eigentliche Pro­gramm ziemlich kurz, es passt ausgedruckt auf eine halbe Seite. Wenn der Zeitpunkt gekommen ist eine Note zu spielen, wird die Note in den darstell­baren Bereich einer Oktave verschoben und der zugehörige Hubmagnet ange­spielt. Wenn eine Zeitspanne von einem Takt verstrichen ist, oder der nächste Ton zu spielen ist, wird der Magnet losgelassen und so weiter bis das Lied zu Ende ist.

Abgleich: Wie findet man die Töne auf der Saite?

Man sieht es dem Guitarbot an: Zu den hohen Tönen hin drängen sich die Hubmagnete auf immer weniger Raum zusammen. Die Positionen der Magnete entsprechen dabei den Positionen der Bundstege einer herkömmlichen Gitarre. Für zwei Töne, Gis und Fis, hat der Platz nicht mehr ganz gereicht, sie werden in der nächsten Oktave abgegriffen. Möchte man Tonsprünge und Umbrüche vermeiden, dann ist es vorteilhaft, das Lied so weit zu transponieren, dass Gis und Fis nicht vorkommen und der tiefste Ton möglichst auf dem ersten Hubmagneten zu liegen kommt.

Mit der Transponierbarkeit gibt es jedoch ein Problem, wenn man die Oktaven frei nach Pythagoras auf ganzzahligen Verhältnissen aufbaut: 5 Oktaven entsprechen dann nicht ganz 12 Quinten, man spricht in der Musik vom Pythagoreischen Komma.

Jede Tonart im Quintenzirkel weiter weg von C würde in reiner Stimmung immer unharmonischer klingen. Man löst dieses Problem, indem man die Tonleiter logarithmisch skaliert. Man kann sich dabei merken, dass eine Oktave höher auch weiterhin einer Halbierung der Saitenlänge entspricht. Alle Zwischentöne sind jedoch ein klein wenig verschoben gegenüber der reinen Stimmung. Man hört den Unterschied rein gegen temperiert nicht so sehr in den Quinten, jedoch deutlich in der Terzen.

Bild 19: Quintenzirkel (Wikimedia) Bild 20: Pythagoras und der Monochord, Musik in reiner Stimmung, die Töne der Tonleiter entsprechen ganzrationalen Verhältnissen der Saitenlänge.

Das hört sich jetzt nicht so an, als ob man die Ton-Positionen unter der Saite mit Taschenrechner und Lineal einfach anzeichnen könnte. In der Praxis ist Messen auch tatsächlich einfacher als Rechnen, denn dafür gibt es kostengünstige, anklemmbare Gitarren-Stimmgeräte, neudeutsch „Clip Tuner“ genannt.

Bild 21: Cliptuner mit Körperschallmikrofon im Klemmfuß (Bild: Eno)

 

Akustik: Von Brüllwürfeln und Lautsprechern

Noch ein Wort zu den verbauten Kleinlautsprechern: Sie klingen nur gut mit einem abgeschlossenen Rückvolumen. Wer schon einmal mit diesen kleinen, quäkigen Lautsprechern gebastelt hat, kennt viel­leicht das Prinzip des Mason-Blasters, einem Druckkammer-Lautsprecher: Sobald das hintere Volumen des Lautsprechers komplett abgeschlossen ist, klingt der Lautsprecher nicht mehr wie hohles Geplärre, sondern liefert einen satten Ton wie man das von seiner Größe erwartet. Das hat akustische Ursachen, denn die rückwärtig abgegebene Welle darf sich nicht mit der nach vorne abgegebenen überlagern, dabei kommt es frequenz- und richtungsabhängig zu Auslöschungen. Dem rechnerischen Idealfall, der Einbettung in eine unendlich ausgedehnte Wand, kommt das rückwärtig abgeschlossene Volumen praktisch am nächsten.

Bild 22: Mason Blaster. Natürlich lassen sich Durchmesser und Qualität eines Lautsprechers durch nichts ersetzen, jedoch kann man die akustischen Eigenschaften eines Lautsprechers nur zur Geltung bringen, wenn er in ein Gehäuse eingebaut wird. Der einfachste Entwurf ist dabei das abgeschlossene Rückvolumen.

Kritik

Die Experimente zeigten schnell, dass die verwendeten Hubmagnete Töne greifen können, ohne dass Bundstege benötigt werden, weil die Kanten am Ende der Hubmagneten selbst perfekte Auflagepunkt darstellen. Aus der Not, nur die zufällig gerade verfügbaren Bauteile zu haben, entstand ein neuartiger Guitarbot, zwar nur mit geringerem Tonumfang von einer Oktave, dafür jedoch ohne das Jaulen der sich einregelnden Tonhöhe.

Das Arduino Redboard als Steuerzentrale ist von seiner Rechenleistung her ausreichend, von der Speichertiefe mit 32kB jedoch unterdimensioniert. Lieder sollten vorteilhafter Weise extern über MIDI zugespielt werden, eine passende Software-Serielle Schnittstelle mit 32kBd ist als Library für Arduino verfügbar. Der Reiz bestand jedoch darin, ein alleinstehendes Gerät zu bauen, das eben nicht erst an einen Computer oder Sequenzer angeschlossen werden muss. Um dieses Ziel zu verwirklichen, wurden Kompromisse eingegangen, dabei auf NoteOff Abschaltzeitpunkte und längere Sequenzen verzichtet.

Der besondere Reiz dieser Praktikumsaufgabe lag darin, dass der Weg nicht vorgezeichnet war. Es gab keine Musterlösung und es war zu Beginn auch nicht bekannt, ob in der kurzen Zeit ein Ergebnis erreicht werden kann. Das ist vom Wesen her die gleiche Situation wie in größeren Entwicklungsprojekten, auch diese gelingen nicht immer und bergen ein gewisses Entwicklungsrisiko.

Ausblick

Interessanter noch als einen weiteren Guitarbot zu bauen, ist vielleicht der Plan, ein Blasinstrument herzustellen. Das ist noch etwas schwieriger, die Saite ist in ihren Anforderungen minimalistischer als eine schwingende Luftsäule. Aus den Erfahrungen mit der Gitarre kommt dabei der Wunsch nach Polyphonie auf. Die ist dann gegeben, wenn es nicht nur eine Flöte, sondern davon mehrere nebeneinander gibt. Im einfachsten Fall ist dies eine Panflöte oder das Register einer Orgel. Man könnte praktisch anfangen mit einer Intonierlade, das ist ein einstellbares Gebläse für eine einzelne Flöte, z.B. mit Winderzeugung aus einem Staubsauger. Für die Flöten kann man sehr gut Flaschen verwenden, die man in der Tonhöhe mit Öl oder Wachsfüllung abgleicht. Unlängst gibt es eine solche Flaschenorgel, sie wurde am Imperial College entwickelt und kling sogar überraschend gut. Dem Problem der Winderzeugung hat man sich hier elegant entzogen, da die Werkstatt über eine Druckluft-Leitung verfügt, zur Ansteuerung kommen handelsübliche Druckluft-Ventile zum Einsatz. Genau hier wird es teuer. An dieser Stelle könnte der 3D-Drucker helfen, Kosten durch Servoventile zu sparen, die im ersten Ansatz so ähnlich wie Drosselklappen funktionieren, jedoch mit Modellbau-Servos aufgebaut werden können.

Bild 23: Flaschenorgel des Imperial College in London (Quelle: selbiges)

Links

MIDI-Protokoll:

http://www.larsrichter-online.de/lmids/midformat.htm
http://de.wikipedia.org/wiki/Musical_Instrument_Digital_Interface

MIDI-Dateiformat:

http://vertex.dreamfall.at/midi/midi.pdf

GNU Octave, ein freier Matlab Clone:

http://www.gnu.org/software/octave/

Matlab Readmidi Library:

http://www.kenschutte.com/midi

Quintenzirkel:

https://de.wikipedia.org/wiki/Quintenzirkel
http://de.wikipedia.org/wiki/Pythagoreisches_Komma

Pythagoras, Monochord:

https://de.wikipedia.org/wiki/Monochord

Cliptuner:

http://de.wikipedia.org/wiki/Stimmgerät

Mason Blaster:

http://coolmaterial.com/roundup/diy-speakers/
http://web.media.mit.edu/~mellis/speakers/