Tag 21: Piano-Player
Hinter dem Türchen des 21. Tages finden Sie einen Lautsprecher. In dem heutigen Versuch werden wir damit etwas Musik abspielen. Dazu benötigen wir den folgenden einfachen Aufbau.
In diesem Versuch ist der Lautsprecher an einem der beiden DAC-Ausgänge des Boards angeschlossen. DAC bedeutet Digital/Analog-Converter und ermöglicht es, durch digitale Befehle ein analoges Signal zu erzeugen. In dem heutigen Versuch werden wir damit Töne erzeugen, genauer gesagt Töne wie von einem Piano. Die Noten, Pausen und Tonarten werden dabei per UDP übertragen, und zwar als Array von Zahlen.
Kopieren Sie zunächst den Node-RED-Flow des heutigen Tages in Ihre Umgebung, natürlich nicht, ohne die vorherigen zu deaktivieren. Außerdem müssen Sie noch die IP des UDP-Nodes auf die Broadcast-IP Ihres Boards anpassen. Wählen Sie zudem das Programm des heutigen Tages. Dann können Sie den Flow starten.
Es gibt bereits vordefinierte Songs, die über das Userinterface gestartet werden können. Sie dürfen allerdings auch selbst Songs übersetzen oder komponieren. Dazu gibt es ein Textfeld, in das Sie Ihre Komposition kopieren können.
Die Noten entsprechen dabei dem einfachen Notenschema und werden in der folgenden Form angegeben:
NOTE_C1, NOTE_CS1, NOTE_D1, NOTE_DS1, NOTE_E1, NOTE_F1, NOTE_FS1, NOTE_G1, NOTE_GS1, NOTE_A1, NOTE_AS1, NOTE_B1
Die Zahl hinter der Note entspricht der Oktave. Sie können die 1 durch eine Zahl von 1 bis 7 ersetzen. Außerdem können Sie die Notenlänge mit dem Präfix BEAT angeben, um so halbe, Viertel- oder Achtelnoten daraus zu machen. Das BEAT-Attribut bezieht sich immer auf die davorstehende Note. Standard ist BEAT_1, daher muss es nicht extra vor jeder Note angegeben werden. Es gelten folgende Notenlängen:
BEAT_025, BEAT_05, BEAT_075, BEAT_1, BEAT_125, BEAT_15, BEAT_175, BEAT_2, BEAT_25, BEAT_3, BEAT_4, BEAT_5
Um zum Beispiel den Anfang von Beethovens berühmter 5. Symphonie zu spielen, kann folgender Text in das Fenster eingegeben werden:
NOTE_G5,BEAT_075,NOTE_G5,BEAT_075,NOTE_G5,BEAT_075,NOTE_E5,BEAT_5, NOTE_F5,BEAT_075,NOTE_F5,BEAT_075,NOTE_F5,BEAT_075,NOTE_D5,BEAT_5
Sie müssen allerdings kein Musikgenie sein. Probieren Sie einfach ein paar Noten und Notenlängen aus und komponieren Sie so Ihr eigenes Lied. Oder setzen Sie ein bekanntes Lied in dieses System um. Ihrer Fantasie sind dabei keine Grenzen gesetzt.
Erste Nachforschungen ergaben, dass nach jeden Stück ein neuer Task erzeugt wird und nach dem Stück wieder deleted wird. Der Idle Task sollte den 10k Stack (auf dem Heap) irgendwann eigentlich wieder aufräumen, was er aber nicht tut. Schliesslich wird eine Exception geworfen und rebooted. Workaround: Task nicht deleten sondern nur suspenden resp. resumen und Buffer als globale Variable „übergeben“.
Hier ist das komplette Morgen kommt der Weihnachtsmann:
NOTE_C5,NOTE_C5,NOTE_G5,NOTE_G5,NOTE_A5,NOTE_A5,NOTE_G5,BEAT_2,NOTE_F5,NOTE_F5,NOTE_E5,NOTE_E5,NOTE_D5,BEAT_2,NOTE_C5,BEAT_2,NOTE_G5,NOTE_G5,NOTE_F5,NOTE_F5,NOTE_E5,NOTE_E5,NOTE_D5,BEAT_2,NOTE_G5,NOTE_G5,NOTE_F5,NOTE_F5,NOTE_E5,NOTE_E5,NOTE_D5,BEAT_2,NOTE_C5,NOTE_C5,NOTE_G5,NOTE_G5,NOTE_A5,NOTE_A5,NOTE_G5,BEAT_2,NOTE_F5,NOTE_F5,NOTE_E5,NOTE_E5,NOTE_D5,BEAT_2,NOTE_C5,BEAT_2,SCORE_END
Hab grade bemerkt dass es das gleiche wie „Twinkle Twinkle Star“ ist. UPS!
Meine Erfahrungen:
– Auch mir war es zu leise, aber mit einem kleinen Verstärker, den ich noch in der Bastelkiste hatte, war es dann hinreichend laut.
– Bei diesem Experiment hat der NodeESP häufiger mal rebootet, auch wenn ich jeweils die Broadcast-Adressen durch die direkten Adressen ersetzt habe.
-Es ist wohl ein Fehler im Source-Code, da bei „We Wish You a Merry Christmas“ auch das Lied für „Twinkle Twinkle Star“ hinterlegt war. Falls jemand den Code für „We Wish You a Merry Christmas“ braucht, hier ist er:
NOTE_G4,NOTE_C5,NOTE_C5,BEAT_05,NOTE_D5,BEAT_05,NOTE_C5,BEAT_05,NOTE_B4,BEAT_05,NOTE_A4,NOTE_A4,NOTE_A4,NOTE_D5,NOTE_D5,BEAT_05,NOTE_E5,BEAT_05,NOTE_D5,BEAT_05,NOTE_C5,BEAT_05,NOTE_B4,NOTE_G4,NOTE_G4,NOTE_E5,NOTE_E5,BEAT_05,NOTE_F5,BEAT_05,NOTE_E5,BEAT_05,NOTE_D5,BEAT_05,NOTE_C5,NOTE_A4,NOTE_G4,BEAT_05,NOTE_G4,BEAT_05,NOTE_A4,NOTE_D5,NOTE_B4,NOTE_C5,BEAT_2,NOTE_SILENCE,BEAT_5,SCORE_END
Ich schließe mich meinem Namensvetter und den übrigen Kommentaren an: Leider Reboots, zu geringe Lautstärke und Wundern, warum nicht Tag 22 mit Tag 21 getauscht wurde.
Woher kommen die Reboots? Dürfen wir endlich die Quelltexte der Board-Applikationen einsehen?
Deshalb habe ich, wie man an meinem Foto sieht, den Tag 20 nur soweit zurückgebaut, dass der Tag 21 nicht gestört wird… :-) Die Reboots sind in der Tat nervig und ohne Debug des Board-Programmes kommt man hier nicht weiter. Es wird vermutet, dass es die Quelltexte als Weihnachtsgeschenk zum 24. gibt… :-)
Erweitert
Lieber Paulaner,
kriegst du noch unsere Nachrichten mit? Kannst du uns deinen Flow zukommen lassen? Bitte!
/Äd.
Twinkle Twinkle Star und
We Wish You a Merry Christmas
sind Gleich?
sorry hab was übersehen…
Jetzt funktioniert es bei mir auch.
Wie bekommt man den Ton lauter.
lies die Komentare
Wie passt man nochmal die Broadcast IP an?
Doppelklick auf den Node
aus sehr sehr leise wird so leise!
Hallo,
scheint ein ‚Fehler‘ in dem Code zu sein?
Kann man das Signal mit Boardmitteln verstärken?
Danke
funktioniert wie es soll… endlich , wieder…
leise oder laut?
Geht, doch sehr sehr leise.