Benötigte Bibliotheken:
- fortyseveneffects/MIDI Library
- knolleary/PubSubClient
- bblanchon/ArduinoJson
[;[l][n]][-][bpm<BPM>] [<INSTRUMENT>] <NOTEN...>
/~<lied Preset>
-...
Ist das allererste Zeichen ein -
, wird der erweiterte Modus aktiviert. Die Noten werden dann so lange gehalten, bis sie zum nächsten Mal erwähnt werden.
... bpm<BPM> ...
Setzt das Tempo des Liedes in beats per minute (BPM). Standardmäßig werden die Lieder mit Tempo 240 wiedergegeben.
Setzt das genutzte Instrument. Liste der verfügbaren Instrumente:
piano
(Klavier)vibes
(Vibraphon)organ
(Orgel)guitar
(Gitarre)brass
(Bläser)- oder Nummer des Midi-Instruments
<Note> [M][Note] [M][Note]...
Es können beliebig viele Noten hintereinander auftauchen. Einzelne Noten werden mit Leerzeichen getrennt. Sollen mehrere Noten zugleich gespielt werden, so werden die Noten ohne Leerzeichen hintereinander geschrieben.
Eine Note setzt sich zusammen aus der Tonhöhe, einem Oktavzeichen (optional), einem Vorzeichen (optional) und dem Notenwert (optional).
Beispiele für Noten sehen folgendermaßen aus: C
oder d''#4
Die Tonhöhe ergibt sich aus den deutschen Notenbezeichnungen (CDEFGAH
) und einem optionalen Vorzeichen, welches nach der Notenbezeichnung steht (#
, b
).
Die Oktave ergibt sich aus bis zu drei Oktavzeichen ('
)
Die Reihenfolge der Oktaven von tief nach hoch sieht folgendermaßen aus:
C''' C'' C' C c c' c'' c'''
.
Die Länge ist eine Ganzzahl und gibt den Kehrwert der Notenlänge an.
- 1 entspricht einer ganzen Note
- 2 entspricht einer halben Note
- 4 entspricht einer Viertelnote
- 8 entspricht einer Achtelnote
- 16 entspricht einer Sechzehntelnote
Folgt der Länge ein Punkt (.
), wird die Note um den anderthalbfachen Wert verlängert (Punktierung).
Mehrere direkt aufeinanderfolgende Töne werden zusammen gespielt.
Beispie: CEGC GHdg FAcf
Mit m
kann der Modus zwischen dem "standard" und dem "erweiterten" gewechselt werden.
[Ton]...[s][Ton]...[Länge / k / i]
i<instrument>
Wechselt das aktuelle Instrument für die nachfolgenden Noten.
-organ ... ipiano ...
Mit s
werden alle Noten gestoppt, die zur Zeit klingen.
k<Midikanal>
Mit k
kann der aktuelle Midi-Kanal von 1-16 gewechselt werden, um z.B. mehrere Instrumente gleichzeitig spielen zu können.
-piano A k2 iorgan H 4 s
v<Neue Lautstärke>
Mit v
wird die Lautstärke in dem aktuellen Midi-Kanal geändert (0-127) (Keine Garantie da nicht jeder Midi-Synthesizer diese Funktion unterstützt);
-piano A1 v64 A1
l
Mit l
wird die zuletzt genannte Note gestoppt oder gestartet.
q<neue BPM>
x<neuer Wert>
y<neuer Wert>
j<neuer Wert>
o<neuer Wert>
Wenn der erweiterte Modus aktiv ist, wird ein Ton bis zur nächsten Erwähnung im gleichen Kanal oder bis zum nächsten s
gespielt.
a (a wird gespielt) 4 (a wird gespielt) a (a wird nicht mehr gespielt) und a (a wird wieder gespielt) 4 (a wird gespielt) s (a wird nicht mehr gespielt)
Achtung: Der aktuelle Modus wird nicht beachtet, woduch eine Wiederholung im selben Modus aufhören sollte, wie sie angefangen hat.
Aktiviert/Deaktiviert die Wiederholung
...w<0>w...
→...<0><0>...
Noten die nach dem ersten Spielen gespielt werden
...w<0>n<1>w...
→...<0><1><0>...
u
wird nach n
genutzt um weitere Wiederholungen anzuhängen mit optionalen Noten
...w<0>n<1>u[2]w...
→...<0><1><0>[2]<0>...
...w<0>n<1>u[2]u[3]w...
→...<0><1><0>[2]<0>[3]<0>...
- ...
cw d ew g
→c d e d e g
cw d en fw g
→c d e f d e g
cw d en fu dw g
→c d e f d e d d e g
;...
falls keine unten genannten Pufferaktionen folgen werden folgende Noten in den Puffer geschrieben.
;l...
löscht den Puffer.
;[l]n...
erstellt einen neuen Puffer, folgende Noten werden eingefügt.
0
-118 c4 C'4 mi119 c'2
1
-brass F2 G#2 F4 F8 A#4 F4 D# F2 c2 F4 F8 c# c4 G# F4 c4 f4 F4 D# D#8 C G# F1
-Klavier
Beispielmelodie2
--126 c1 1 1 1 1 1
- Applaus3
- ... - Gravity Falls4
- ... - Vivaldi5
- ... - cowntdown(/Vorhersage/Umfrage Melodie)6
- ... - irgendwas wasd7gr
gemacht hat7
- ... - trinken8
- ... - Ducktales9
- ... - Wenn ich einmal reich wär - Abomelodie10
- ... - Für Elise11
- ... - Sandmann12
- ... - Airwolf
Der Midi-Player reagiert auf den MQTT-topic playmidi
. Dort wird ein einfacher String mit JSON-Daten oder rohen Lieddaten empfangen.
Wenn eine Nachricht vom MQTT-topic killmidi
emfangen wird, wird das aktuelle lied unterbrochen und die play queue wird geleert.
Es handelt sich um ein JSON-Objekt mit folgenden Tags:
laenge
- maximale Liedlängemidi
- Daten des Liedes
optional:
aktiviereBuffer
- falls vorhanden und der Werttrue
ist, wird die Bufferfunktion aktiviert.adminModus
- falls vorhanden und der Werttrue
ist, wird die Adminfunktion aktiviert.
Bei aktiviertem Buffer werden folgende Tags benötigt:
nutzer
- Name des Usersprioritaet
- Priorität endscheidet welche Buffer zuerst gelöscht werden, kleinere Zahlen werden eher gelöscht. z.B.: der Buffer ist mit Priorität 1 gefüllt, dann würde, wenn einer mit Priorität 1 einen Puffer erstellen möchte ein Fehler ausgegeben, einer mit Priorität 2 nicht, da dies einen Buffer mit Priorität 1 überschreibt.maximaleBufferGroesse
- die maximale Größe des Puffers
Bei aktiviertem Adminmodus werden folgende Tags benötigt:
nutzer
- Name des Users
command;[command;...]
Spielt die folgenden Daten. Es können keine weiteren Befehle angehängt werden.
p <noten>
Spielt den Puffer und löscht diesen.
~ <Puffer id>
Spielt den Puffer.
q <Puffer id>
Instrument Optionen
Listet die Instrumente.
il
Setzt die Instrumentnummer des Instrumentes
ii<interne instrument id> <instrument id>
Setzt die msb des Instrumentes
im<interne instrument id> <msb>
Setzt die lsb des Instrumentes
id<interne instrument id> <lsb>
Setzt den Namen des Instrumentes, mit welchen man dies ereicht
in<interne instrument id> <name ohne lerzeichen>
Listet alle Lieder und deren Daten
ll
Setzt die Daten des Liedes. Es können keine weiteren Befehle angehängt werden.
ld<lied id> <noten>
Fügt die folgenden Daten zum Lied hinzu. Es können keine weiteren Befehle angehängt werden.
la<lied id> <noten>
Löscht die Daten des Liedes
lc<lied id>
Listet alle Puffer und deren Besitzer
bl
Setzt die Daten des Puffer. Es können keine weiteren Befehle angehängt werden.
bd<puffer id> <noten>
Fügt die folgenden Daten zum Lied hinzu. Es können keine weiteren Befehle angehängt werden.
ba<puffer id> <noten>
Löscht die Daten des Puffers.
bc<puffer id>
Setzt den Besitzer des Puffers.
bo<puffer id> <neuer Besitzer ohne Leerzeichen>
Listet die Daten des Puffers.
bp<puffer id>