Mix und Arrangement sichtbar gemacht

Ich habe kürzlich mit den gleichen Freunden, mit denen ich vor 10 Jahren die Dino-Songs CD aufgenommen hatte, einen neuen Song aufgenommen: "10 chlini Rägetropfe", so quasi als 10 Jahre Dino-Songs Jubiläums-Aktion. Der Song hat eine grosse Dynamik und ein abwechslungseriches Arrangement und es ist gar nicht so einfach rauszuhören, wann welche Instrumente ein- oder aussetzen. So kam ich auf die Idee, das für die Hörer in einem Video sichtbar zu machen! Nachfolgend erkläre ich kurz, wie ich das gemacht habe:

Spuren
Der Song besteht aus 9 Tonspuren: Gesang, 3 Gitarren-Spuren, Bass, Akkordeon, Klavier, Mundharmonika und Schlagzeug. Genau genommen handelt es sich beim Schlagzeug-Track um einen sogenannten Gruppen-Track, welcher wiederum aus mehreren einzelnen Spuren (Bass Drum, Snare usw) sowie zusätzlichen Perkussions-Spuren (Tambourin etc) besteht. Diese sind der Einfachheit halber (und weil sie sich bei einem akustischen Schlagzeug auch gar nicht sauber separiert aufnehmen lassen) zu einer einzelnen Spur zusammengefasst.
Spur-Analyse
In einem ersten Schritt habe ich die Lautstärke-Informationen (RMS-Werte) aus den einzelnen Spuren berechnet, da ich die später für die Animation brauche. Das sieht so aus:

Im Diagramm sieht man für jede Tonspur über die Dauer des ganzen Songs, wann sie wie laut im Mix vorhanden ist. Jeder Tonspur habe ich zudem ein passendes Instrumenten-Bild zugeordnet (dem Gesang: ein Mikrofon). Für jede Spur bracht es noch Koordinaten, an welchen das Instrumenten-Bild angezeigt werden soll. Da ich als Video-Hintergrund die Cover-Illustration mit der Wolke und den Regentropfen verwende, habe ich die Instrumente gleich auf einzelene "Regentropfen" verteilt. Instrumente, die beim Anhören in Stereo / mit Kopfhörern eher links zu hören sind, erhalten die Koordinaten von Regentropfen auf der linken Seite. Schlagzeug und Bass sind in der Mitte. Der Gesang ebenfalls.
Bilder generieren
Im nächsten Schritt erzeuge ich die Bilder. Ein Video besteht im Grunde genommen einfach aus einzelnen Bilder, die so schnell nacheinander angezeigt werden, dass das Gehirn sie nicht mehr als einzelne Bilder wahrnehmen kann. Typisch ist eine Frame-Rate von 25, als 25 Bilder pro Sekunde. Für den ganzen Song mit einer Dauer von 231 Sekunden brauche ich rund 5800 Bilder. Diese werden also collage-mässig einzeln "zusammengesetzt", wobei die Grösse der Instrumente zum gegebenen Zeitpunkt der "Lautstärke", also quasi dem "Ausschlag" im obigen Spuren-Plot entsprechen soll. Die einzelnen Instrumenten-Bilder sollen eine gegebene quadratische Maximalgrösse nicht überschreiten dürfen, damit sie sich nicht zu sehr überlappen. Hat ein Bild z.B. seine maximale Breite erreicht, darf es in der anderen Dimension (Höhe) noch weiter wachsen, bis es eine quadratische Form erreicht hat. Das ist z.B. bei der Bass-Gitarre gut zu sehen, die bei lauten Tönen nicht mehr länger, aber dicker wird. Die 5800 Bilder werden durchnummeriert abgespeichert. Hier als Beispiel das 3000. Bild (welches unter dem Namen frame_03000.jpg abgespeichert wird und der Song-Position 2 Minuten 0 Sekunden, also 120s entspricht, weil 120 Sekunden * 25 Bilder = 3000stes Bild).

Damit man ganz am Anfang des Songs (während das Schlagzeug noch leise Wind- und Regengeräusche macht), kurz alle Instrumente sehen kann, habe ich die Bilder der ersten zwei Sekunden noch durch eine kleine "Instrumenten-Schrumpf-Animation" ersetzt.
Video erzeugen
Im letzten Schritt musste ich nun einfach noch die 5800 Bilder zusammen mit der fertig abgemischten Song-Tonspur in ein mp4-Video umwandeln. Das Resultat sieht dann so aus: YouTube
Programm-Code
Du möchtest ganz genau wissen, wie ich das gemacht habe? Hier findest Du den Programm-Code: github: VideoGeneratorForMultiTrackAudio

Post

Einfluss des Blauen Dinos auf die Bewegungsmotivation und das Aktivitätsverhalten von Degus

Nein, es geht hier nicht um Balmu, die geliebte Rennmaus von Roboter Beni, sondern um die Degus bei Gschichtefritz zuhause. In diesem Blog-Beitrag erfahrt ihr etwas über unsere Haustiere, über die neueste Erfindung von Gschichtefritz (Fitness-Tracker für Nager) und was passiert, wenn die Degus Kindergeschichten vom Blauen Dino hören.

Degus
Degus sind tagaktive Nager aus der Gattung der Strauchratten. Sie brauchen einen grossen Käfig und viel Bewegung. Wir haben drei Degus, und die Tiere haben neben diversen Klettermöglichkeiten auch ein Laufrad und zwei Drehteller in ihrem dreistöckigen Käfig.
Ein Fitness-Tracker für Nagetiere
Sind sie wirklich nur am Tag aktiv? Wann und wieviel bewegen sie sich? Ich wollte es genau wissen und habe deshalb in ihr Laufrad und in ihre beiden Drehteller, auf denen sie täglich ihre Runden rennen, Sensoren eingebaut. Die Sensoren habe ich mit einem Microcontroller verbunden und diesen so programmiert, dass er die Umdrehungs-Daten an meinen Server schickt, welcher Diagramme aufbereitet, die ich von überall her anschauen kann. So weiss ich, wann sie ihre Runden rennen - und wieviele Runden es sind. Tönt absurd? Geht so. Viele Leute tracken ihre Fitness mit Schrittzählern und ähnlichen Geräten. Obwohl sie doch selber schon recht gut wissen sollten, wie weit sie gelaufen sind, denn sie machen die Schritte ja mit den eigenen Beinen. Bei Haustieren ist das anders. Was treiben die eigentlich, während all den Stunden, die ich bei der Arbeit verbringe oder schlafe? Keine Ahnung. Könnte also interessant sein, nicht? Im Diagramm sieht man eine Gruppierung nach Tageszeit. Zwischen 21 Uhr abends und 7 Uhr morgens wird also tatsächlich geschlafen. Tagsüber und insbesondere am frühen Abend wird ziemlich viel gerannt. In den vergangenen 30 Tagen sind die Tiere übrigens als 200'000 Runden gerannt.

Während den letzten Herbstferien waren die Degus (bis auf kurze "Fütter-Besuche" der Nachbarin) alleine zuhause. Das folgende Diagramm zeigt die Anzahl Runden pro Tag. Die Tiere waren während unserer Abwesenheit, in der Zeit vom 7.-12. Oktober viel weniger aktiv als zuvor. War es wegen dem Licht, weil es dunkler war in der Wohnung? Wir hatten die Fensterläden halb geschlossen. Bei der nächsten Gelegenheit habe ich es mit mehr Licht probiert, aber auch dann waren die Degus viel passiver, wenn sie alleine zuhause waren.
Eine Gschichtefritz-Hörstation für Degus
Die nächste Hypothese war demzufolge: je ruhiger es in der Wohnung ist, desto weniger aktiv sind die Degus. Um das zu überprüfen, musste also eine Installation her, welche die Degus während der zweiten Ferienwoche zu einer bestimmten Tageszeit "beschallt". Dazu braucht es ein Gerät, das automatisch mit Abspielen beginnt, sobald es über eine Zeitschaltuhr mit Strom versorgt wird.
            (Foto: Regenbogen Bio Reformhaus Schwyz)
Die Gschichtefritz-Hörstationen erfüllen diese Anforderung. Also: schnell eine Hörstation an einen Verstärker anschliessen, beides mit einer Zeitschaltuhr verbinden und diese so einstellen, dass am Morgen von ca 7-8 Uhr und am Abend von ca. 18-19:30 Uhr neben dem Degu-Käfig Geschichten vom Blauen Dino abgespielt werden. Es gibt auch einen Grund, wieso die Degus nur zu diesen Randzeiten Geschichten hören durften: Während der zweiten Ferienwoche sollte noch irgendwann der Hauswart in der Wohnung aufkreuzen und einen defekten Rollladen reparieren. Der hätte uns wohl für komplett durchgeknallt gehalten, wenn während seiner Anwesenheit in der Wohnung neben dem Degu-Käfig plötzlich Kindergeschichten vom Blauen Dino abgespielt worden wären...
Läuft der Blaue Dino, dann wird gerannt
Die folgenden drei Diagramme zeigen, wie viele Runden die Degus in den darauffolgenden Tagen zu welcher Tageszeit gerannt sind. Der erste Tag: Bis zur Inbetriebnahme der Installation am Mittag waren die Degus passiv. Als dann am Abend gegen ca. 18 Uhr die Dino-Geschichten abgespielt wurden, rannten die Degus. Und zwar nur so lange, wie die Geschichten ertönten. Der zweite Tag: genau zu den Zeiten, als die Geschichten liefen, waren die Tiere aktiv. Und auch am dritten Tag zeigt sich wieder das gleiche Verhaltensmuster. Ob es nun daran lag, dass sie meine Stimme kannten, oder ob sie auch bei Beethoven oder Rolling Stones gerannt wären, bleibt noch abzuklären...

Post Foto: Wikipedia

Dino-Song zerstampft und neu zusammengeleimt

Da ich ja nicht nur Geschichtenschreiber, sondern auch Informatiker bin (oder vielleicht besser umgekehrt...). Ach, ich fange nochmals an.
Also: Computer aus vorhandenen grossen Datenmengen lernen zu lassen, so dass sie dann aufgrund des Gelernten Entscheidungen treffen können, kurz "Machine Learning", ist zurzeit eines der bedeutendsten Forschungs- und Anwendungsgebiete der Informatik. Insbesondere im Bereich der neuronalen Netze / Deep Learning sind in den letzen Jahren beeindruckende Resultate erzielt worden. So beschäftige auch ich mich seit einiger Zeit mit diesem spannenden Fachbereich.
Grund genug also, einmal "Gschichtefritz" und "Neuronale Netze" zusammenzubringen. Die Maschine soll zum Künstler werden und Gschichtefritz soll die "Maschinen-Kunst" vortragen und so die Grenzen zwischen künstlicher Intelligenz und künstlerischer Intelligenz ausloten.

Das Konzept
Mein Song "Dino Stampf Stampf" mit inzwischen 35 Strophen (aus den Kindergeschichten vom Blauen Dino) muss als "grosse vorhandene Datenmenge" / "Big Data" herhalten.
Der Computer soll also aus diesem Text lernen. Er erhält keine weiteren Informationen über Sprache, Wörter, Grammatik oder so.
Anschliessend soll der Computer selber Text generieren.
Das Resultat
Den erzeugten Text habe ich im Video (siehe oben, bzw. https://www.youtube.com/watch?v=466jykoAUdI ) vorgelesen. Ab und zu wurden Wörter oder kurze Phrasen aus dem Original-Text ausgegeben, dann irgendwelche Wort-Mixes oder komplett neue, aber dennoch schweizerdeutsch klingende Wörter generiert. Das Resultat erinnert mich an Dada und ans Totemügerli von Franz Hohler. Mit dem Unterschied, dass der Text nicht von einem Menschen stammt, sondern in Sekundenschnelle von einem Computer geschrieben wurde.
Wie funktioniert das?
Zum Einsatz kam ein zeichenbasiertes Recurrent Neural Network mit Long Short Term Memory - Zellen, kurz ein "LSTM RNN". Zeichenbasiert bedeutet, dass man dem Computer keine Wörter, sondern einzelne Zeichen als Eingabe "füttert". Da es für die Sprache nicht relevant ist, ob etwas klein oder gross geschrieben wird, habe ich als erstes alle Zeichen in Kleinbuchstaben umgewandelt. Aus "Gmües" wird also "gmües", und der ganze Songtext reduziert sich auf ein Zeichen-Vokabular von 38 verschiedenen Zeichen (Klein-Buchstaben "abcdefh...z", Umlaute "üöä", Satzzeichen, Leerzeichen und Zeilenumbruch). Nun wird das neuronale Netz darauf trainiert, den nächsten Buchstaben vorauszusagen, indem man ihm den aktuellen Text und die richtige Antwort zeichenweise vorlegt. Im Bereich des Machine Learning spricht man hier von "Supervised Learning", das heisst, das Netzwerk erhält beim Training eine Eingabe UND die passende Ausgabe.
Hierzu ein Beispiel, Schritt für Schritt: Das Netzwerk soll aus dem Text "gmües iss ich de ganzi tag" lernen.
TRAINING:
1. Der erste Buchstabe ("g") als Eingabe und die "richtige Antwort", d.h. die erwartete Ausgabe, nämlich der zweite Buchstabe "m" aus dem Wort "gmües", wird ans Netzwerk übergeben. So quasi "Wenn Du das, was ich Dir beibringen will, lernen möchtest, musst Du zuerst mal wissen, dass nach dem 'g' ein 'm' kommen sollte."
2. Der zweite Buchstabe "m" wird als Eingabe und "ü" als erwartete Antwort übergeben. So quasi "Wenn Du ein 'm' siehst und zuvor schon ein 'g' gesehen hast, dann solltest Du ein 'ü' ausgeben. Das Netzwerk muss also in der Lage sein, sich in diesem zweiten Schritt daran zu erinnern, dass es im ersten Schritt ein 'g' als Eingabe erhalten hatte. Daher kommt ein "Recurrent Neural Network" zum Einsatz, denn dieses bietet genau die Möglichkeit, die Ausgabe des aktuellen Schrittes nicht nur von der aktuellen Eingabe, sondern auch von der zuvor erhaltenen Eingabe-Abfolge abhängig zu machen. Zum Speichern dieser Kontext-Information dienen die LSTM-Zellen (Long Short Term Memory).
3. Der dritte Buchstabe "ü" wird als Eingabe und "e" als Ausgabe übergeben
4. Der vierte Buchstabe "e" wird als Eingabe und "s" als Ausgabe übergeben
5. Der fünfte Buchstabe "s" wird als Eingabe und das Leerzeichen " " als Ausgabe übergeben. Das Netzwerk konnte nun also bereits das Wort "gmües" lernen - und dass anschliessend ein Leerzeichen folgen sollte.
Das wird nun mit dem ganzen 6662 Zeichen langen Songtext viele Male wiederholt. Den Refrain des Songs hab ich absichtlich weggelassen.

SAMPLING:
Anschliessend wird dem Neuronalen Netz eine Anfangs-Sequenz vorgelegt (z.B. "wa") und dann wieder und wieder nach dem nächsten Zeichen gefragt. So kommt in Sekundenschnelle ein beliebig langer Text zustande.

Wie gut ein Neuronales Netz ist, wird nicht daran gemessen, wie gut die Eingabe auswendig gelernt wurde. Auswendig lernen ist für einen Computer trivial. Das Ziel ist natürlich, etwas Allgemeines daraus zu lernen, also auch aus noch nie zuvor gesehenen Eingaben eine passende Ausgabe erzeugen zu können. Das muss auch beim Training berücksichtigt werden. Sind die verschiedenen Netzwerk-Einstellungen (Hyperparameter) unpassend und wird nicht ausreichend lang trainiert, dann lernt/generalisiert das Netzwerk zu wenig und erzeugt zufällig aussehende, kurze Zeichenfolgen, z.B. "wai se ee i i snnih ". Das andere Extrem wäre, dass sich das Netzwerk zu viel merken kann und zu lange trainiert wurde. Dann generiert es in grossen Zügen den Original-Text, mit welchem es trainiert wurde.
Beim im Video vorgelesenen Text habe ich einen ausgeglichenen Trainingsstand gefunden. Wer den Song kennt, wird einige Original-Phrasen finden, und dazwischen lustig (aber irgendwie schweizerdeutsch) klingende Wörter wie "nürzs" oder "gmüch". Oder Wort-Abwandlungen wie "furke" statt "gurke". Die "denttergine" muss irgendwas mit einer Aubergine zu tun haben. Und eine "himbeerine" würde bestimmt auch der Blaue Dino gerne mal probieren.
Wo gibts mehr?
Eine maxi-Version des Songs "Dino Stampf Stampf" von Gschichtefritz mit 22 Strophen findest Du auf Spotify, iTunes etc. Oder natürlich hier im Shop, wo es neben der Dino-Songs Lieder-CD auch alle Hörgeschichten vom Blauen Dino und vom Roboter Beni gegen freiwillige Bezahlung nach Gutdünken auf mp3 oder CD gibt.
Andrej Karpathy hat einen grossartigen Blogpost geschrieben: "The Unreasonable Effectiveness of Recurrent Neural Networks"
Video Gschichtefritz