Kurze MIDI -Sequenzen direkt im Sketch ohne SD-Karte abspeichern

Hallo,

ich würde gerne mehrere sehr kurze MIDI-Sequenzen (basierend auf MIDI-Files) direkt im Sketch abspeichern, damit ich diese wie bei einem Sampler auf Abruf "abfeuern" kann. 8)

Wie bewerkstelligt man dies am Besten, ohne hierfür eine SD-Karte zu verwenden?

Gruß Chris

Am besten beim Kompilieren im Flash abspeichern:

http://arduino.cc/en/Reference/PROGMEM

Das ist schon einmal ein guter Hinweis.

Danke hierfür.

Gruß Chris

Mich würde in diesem Zusammenhang noch ganz besonders interessieren, in welcher Form ich die Daten auf dem Chip sinnvollerweise speichern soll. Rein gedanklich bin ich zunächste einmal so weit gekommen:

  1. MIDI_Files am Rechner erstellen
  2. MIDI_Files auf SD_Karte speichern
  3. SD_Karte mit einem zweiten Arduino "auslesen"
  4. Ausgelesene Daten "aufbereiten"
  5. Ausgelesene Daten in den eigentlichen Sketch einbauen

Die Punkte drei bis fünf sind mir momentan noch komplett unklar. Außerdem bin ich mir nicht sicher, ob dies der Königsweg für mein Unterfangen wäre. Der direkte Einsatz einer SD-Karte am Zielgerät ist nicht gewünscht.

Gruß Chris

Chris72622: Die Punkte drei bis fünf sind mir momentan noch komplett unklar.

Du kannst jede Datei als ein "array of byte" verstehen, und dazu kannst Du beispielsweise auf einem Arduino mit SD-Karte (z.B. ein Ethernet-Shield) ein Programm laufen lassen, das mit einer Datei folgendes macht: - Datei öffnen - Byte für Byte auslesen - und dabei die Bytes mit ihrem Wert auf Serial ausgeben, z.B. in der Art:

#define NUM_ELEMENTS 25304
BYTE data[NUM_ELEMENTS]  PROGMEM= {
127, 127, 128, 127, 127, 128, 128, 127, // 0-7
128, 127, 127, 127, 127, 127, 127, 127, // 8-15
...etc...

Aus dem Seriellen Monitor kannst Du die Array-Definition dann herauskopieren und in Deinen Quelltext einfügen.

Es gibt auch PC-Programme, die das können, dann brauchst Du keinen MEGA mit SD-Karte und ein Arduino-Programm, das es macht, sondern kannst den Schritt am PC erledigen.

Und schon hast Du das Array (also die Datei) im Programm. In diesem Fall als Byte-Array. Und so wie Du sonst die Datenbytes aus einer Datei lesen würdest, liest das Programm die Bytes dann aus dem PROGMEM-Speicher.

Die maximal als PROGMEM-Speicher verwendbare Größe beträgt 64 KB, d.h. maximal können Dateien bis zu 64 KB Dateigröße in entsprechend große PROGMEM Byte-Arrays umgewandelt werden.

Wenn Du auf einem MEGA, der mehr als 64 KB Flash-Speicher hat, den gesamten Speicher (mehr als 64 KB für Daten) nutzen möchtest, wird es ein bisschen komplizierter mit der Einbindung des Arrays im Programm.

jurs: Es gibt auch PC-Programme, die das können, dann brauchst Du keinen MEGA mit SD-Karte und ein Arduino-Programm, das es macht, sondern kannst den Schritt am PC erledigen.

Ich hätte zwar noch einen Uno inkl. Ethernet-Shield für diese Aktion hier, aber wenn es auch einfach geht, sehr gerne.

Suche ich im Netz jedoch z.B. nach MIDI-Converter finde ich leider nur haufenweise MIDI_to_MP3_Converter, also suche ich vermutlich falsch. Nach welchen Begriffen würdest Du denn an meiner Stelle suchen?

Hab auch mal eine .mid_File mit dem Texteditor geöffnet.. war nur Müll zu lesen. :~

Gruß Chris

Chris72622:

jurs: Es gibt auch PC-Programme, die das können, dann brauchst Du keinen MEGA mit SD-Karte und ein Arduino-Programm, das es macht, sondern kannst den Schritt am PC erledigen.

Suche ich im Netz jedoch z.B. nach MIDI-Converter finde ich leider nur haufenweise MIDI_to_MP3_Converter, also suche ich vermutlich falsch. Nach welchen Begriffen würdest Du denn an meiner Stelle suchen?

Nein, Du brauchst keinen Konverter speziell für MIDI, sondern einen Konverter, der x-beliebige Daten aus einer Datei liest und die einzelnen Bytes als Array-Daten schreibt. Dezimal oder hexadezimal ist auch egal. Ob das dann WAV, BMP, JPG, MID oder sonstwas für Dateien sind, ist dem Konverter ebenfalls völlig egal.

Du kannst Deine Dateien beispielsweise online direkt im Webbrowser konvertieren: http://fuxx.h1.ru/bin2c/index.en.php

Geheime Daten würde ich aber nicht unbedingt an fremde Server in Russland senden, aber vielleicht sind Deine kurzen Midis nicht so geheim.

Oder wenn Du lieber selbst ein Programm hättest (von mir nicht getestet, nur gegoogelt): https://github.com/tristan2468/Hexy

Ok, jetzt hab ich das denke ich mal so grob verstanden. Muss jetzt nur noch ne passende Software für den Mac finden.

Danke Dir vielmals!

Gruß Chris

Edit: So etwas hier suche ich, oder? http://ridiculousfish.com/hexfiend/

Chris72622: Ok, jetzt hab ich das denke ich mal so grob verstanden. Muss jetzt nur noch ne passende Software für den Mac finden. ... Edit: So etwas hier suche ich, oder? http://ridiculousfish.com/hexfiend/

Ich kenne dieses Programm nicht, aber die Konvertierung in C-Arrays gehört üblicherweise NICHT zum Funktionsumfang eines Hex-Editors. Da das aber auch nicht ausgeschlossen ist, müßtest Du es Dir mal ansehen. Ich kann es Dir nicht sagen.

Hier ist wohl eine Version einer bin2c Software, die unter MAC OS funktioniert: https://github.com/johnhopson/bin2c/blob/master/bin2c Aber Du mußt vorher die Ruby-Programmiersprache auf dem MAC installiert haben, um den Code laufen zu lassen.

Funktioniert!

Danke auch hierfür. ;)

Gruß Chris

Ich habe mittlerweile eine kurze Sequenz erstellen können, welche ich gerne verwenden würde, weiss nun aber nicht wie ich mit den Daten umgehen soll.

Hier mal das erzeugte Array:

unsigned char  bin2c_out[727] = 
{
    0x4d, 0x54, 0x68, 0x64, 0x00, 0x00, 0x00, 0x06,     //  MThd....     0
    0x00, 0x01, 0x00, 0x02, 0x07, 0x80, 0x4d, 0x54,     //  ......MT     8
    0x72, 0x6b, 0x00, 0x00, 0x00, 0x5a, 0x00, 0xff,     //  rk...Z..    16
    0x03, 0x14, 0x4c, 0x69, 0x76, 0x69, 0x6e, 0x67,     //  ..Living    24

    0x20, 0x6f, 0x6e, 0x20, 0x56, 0x69, 0x64, 0x65,     //   on Vide    32
    0x6f, 0x5f, 0x6d, 0x65, 0x6c, 0x6f, 0x00, 0xff,     //  o_melo..    40
    0x51, 0x03, 0x06, 0xc7, 0x25, 0x00, 0xff, 0x58,     //  Q...%..X    48
    0x04, 0x04, 0x02, 0x18, 0x08, 0x00, 0xff, 0x59,     //  .......Y    56

    0x02, 0xfd, 0x01, 0x8f, 0x00, 0xff, 0x51, 0x03,     //  ......Q.    64
    0x06, 0x99, 0x80, 0x8f, 0x00, 0xff, 0x51, 0x03,     //  ......Q.    72
    0x06, 0xf9, 0x75, 0x83, 0x95, 0x00, 0xff, 0x51,     //  ..u....Q    80
    0x03, 0x07, 0x38, 0x2d, 0x8f, 0x00, 0xff, 0x51,     //  ..8-...Q    88

    0x03, 0x07, 0x02, 0x60, 0x8f, 0x00, 0xff, 0x51,     //  ...`...Q    96
    0x03, 0x07, 0x01, 0x11, 0x00, 0xff, 0x2f, 0x00,     //  ....../.   104
    0x4d, 0x54, 0x72, 0x6b, 0x00, 0x00, 0x02, 0x5f,     //  MTrk..._   112
    0x00, 0xff, 0x03, 0x14, 0x4c, 0x69, 0x76, 0x69,     //  ....Livi   120

    0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x56, 0x69,     //  ng on Vi   128
    0x64, 0x65, 0x6f, 0x5f, 0x6d, 0x65, 0x6c, 0x6f,     //  deo_melo   136
    0x87, 0x5b, 0x90, 0x1f, 0x18, 0x86, 0x1c, 0x90,     //  .[......   144
    0x2b, 0x3c, 0x00, 0x80, 0x1f, 0x00, 0x89, 0x36,     //  +<.....6   152

    0x90, 0x1f, 0x10, 0x00, 0x80, 0x2b, 0x00, 0x86,     //  .....+..   160
    0x2e, 0x90, 0x2b, 0x40, 0x00, 0x80, 0x1f, 0x00,     //  ..+@....   168
    0x89, 0x58, 0x90, 0x1a, 0x34, 0x00, 0x80, 0x2b,     //  .X..4..+   176
    0x00, 0x84, 0x58, 0x80, 0x1a, 0x00, 0x00, 0x90,     //  ..X.....   184

    0x26, 0x42, 0x89, 0x1f, 0x90, 0x1b, 0x1e, 0x00,     //  &B......   192
    0x80, 0x26, 0x00, 0x87, 0x11, 0x90, 0x27, 0x4c,     //  .&....'L   200
    0x01, 0x80, 0x1b, 0x00, 0x88, 0x38, 0x80, 0x27,     //  .....8.'   208
    0x00, 0x00, 0x90, 0x1d, 0x35, 0x85, 0x5c, 0x90,     //  ....5.\.   216

    0x29, 0x4f, 0x00, 0x80, 0x1d, 0x00, 0x89, 0x60,     //  )O.....`   224
    0x80, 0x29, 0x00, 0x00, 0x90, 0x1d, 0x30, 0x84,     //  .)....0.   232
    0x6b, 0x80, 0x1d, 0x00, 0x00, 0x90, 0x29, 0x63,     //  k.....)c   240
    0x8a, 0x78, 0x80, 0x29, 0x00, 0x00, 0x90, 0x1d,     //  .x.)....   248

    0x56, 0x85, 0x39, 0x90, 0x29, 0x72, 0x00, 0x80,     //  V.9.)r..   256
    0x1d, 0x00, 0x87, 0x71, 0x80, 0x29, 0x00, 0x27,     //  ...q.).'   264
    0x90, 0x1d, 0x2d, 0x85, 0x79, 0x80, 0x1d, 0x00,     //  ..-.y...   272
    0x39, 0x90, 0x29, 0x7d, 0x87, 0x13, 0x80, 0x29,     //  9.)}...)   280

    0x00, 0x81, 0x5c, 0x90, 0x1f, 0x22, 0x85, 0x02,     //  ..\.."..   288
    0x90, 0x2b, 0x65, 0x3e, 0x80, 0x1f, 0x00, 0x89,     //  .+e>....   296
    0x40, 0x90, 0x1f, 0x50, 0x00, 0x80, 0x2b, 0x00,     //  @..P..+.   304
    0x85, 0x23, 0x90, 0x2b, 0x69, 0x00, 0x80, 0x1f,     //  .#.+i...   312

    0x00, 0x89, 0x01, 0x80, 0x2b, 0x00, 0x01, 0x90,     //  ....+...   320
    0x1a, 0x51, 0x86, 0x7f, 0x90, 0x26, 0x5b, 0x00,     //  .Q...&[.   328
    0x80, 0x1a, 0x00, 0x88, 0x34, 0x90, 0x1b, 0x5b,     //  ....4..[   336
    0x00, 0x80, 0x26, 0x00, 0x86, 0x76, 0x90, 0x27,     //  ..&..v.'   344

    0x63, 0x00, 0x80, 0x1b, 0x00, 0x88, 0x48, 0x90,     //  c.....H.   352
    0x1d, 0x5d, 0x00, 0x80, 0x27, 0x00, 0x85, 0x5c,     //  .]..'..\   360
    0x90, 0x29, 0x4e, 0x00, 0x80, 0x1d, 0x00, 0x89,     //  .)N.....   368
    0x15, 0x90, 0x1d, 0x49, 0x00, 0x80, 0x29, 0x00,     //  ...I..).   376

    0x85, 0x3f, 0x90, 0x29, 0x5c, 0x00, 0x80, 0x1d,     //  .?.)\...   384
    0x00, 0x89, 0x4e, 0x90, 0x1d, 0x45, 0x00, 0x80,     //  ..N..E..   392
    0x29, 0x00, 0x86, 0x20, 0x90, 0x29, 0x60, 0x00,     //  ).. .)`.   400
    0x80, 0x1d, 0x00, 0x88, 0x2b, 0x90, 0x1d, 0x2d,     //  ....+..-   408

    0x00, 0x80, 0x29, 0x00, 0x85, 0x79, 0x90, 0x29,     //  ..)..y.)   416
    0x65, 0x00, 0x80, 0x1d, 0x00, 0x89, 0x28, 0x90,     //  e.....(.   424
    0x1f, 0x22, 0x00, 0x80, 0x29, 0x00, 0x85, 0x40,     //  ."..)..@   432
    0x90, 0x2b, 0x3a, 0x00, 0x80, 0x1f, 0x00, 0x89,     //  .+:.....   440

    0x69, 0x90, 0x1f, 0x10, 0x00, 0x80, 0x2b, 0x00,     //  i.....+.   448
    0x85, 0x2e, 0x90, 0x2b, 0x40, 0x00, 0x80, 0x1f,     //  ...+@...   456
    0x00, 0x89, 0x69, 0x90, 0x1a, 0x34, 0x00, 0x80,     //  ..i..4..   464
    0x2b, 0x00, 0x85, 0x39, 0x90, 0x26, 0x43, 0x00,     //  +..9.&C.   472

    0x80, 0x1a, 0x00, 0x88, 0x3d, 0x90, 0x1b, 0x1d,     //  ....=...   480
    0x00, 0x80, 0x26, 0x00, 0x87, 0x00, 0x90, 0x27,     //  ..&....'   488
    0x4c, 0x00, 0x80, 0x1b, 0x00, 0x88, 0x39, 0x90,     //  L.....9.   496
    0x1d, 0x35, 0x00, 0x80, 0x27, 0x00, 0x85, 0x5c,     //  .5..'..\   504

    0x90, 0x29, 0x4f, 0x00, 0x80, 0x1d, 0x00, 0x89,     //  .)O.....   512
    0x60, 0x90, 0x1d, 0x30, 0x00, 0x80, 0x29, 0x00,     //  `..0..).   520
    0x84, 0x6b, 0x90, 0x29, 0x63, 0x00, 0x80, 0x1d,     //  .k.)c...   528
    0x00, 0x8a, 0x78, 0x90, 0x1d, 0x56, 0x00, 0x80,     //  ..x..V..   536

    0x29, 0x00, 0x85, 0x39, 0x90, 0x29, 0x72, 0x00,     //  )..9.)r.   544
    0x80, 0x1d, 0x00, 0x87, 0x71, 0x80, 0x29, 0x00,     //  ....q.).   552
    0x27, 0x90, 0x1d, 0x2d, 0x85, 0x79, 0x80, 0x1d,     //  '..-.y..   560
    0x00, 0x39, 0x90, 0x29, 0x7d, 0x87, 0x13, 0x80,     //  .9.)}...   568

    0x29, 0x00, 0x81, 0x5c, 0x90, 0x1f, 0x22, 0x84,     //  )..\..".   576
    0x7c, 0x90, 0x2b, 0x65, 0x44, 0x80, 0x1f, 0x00,     //  |.+eD...   584
    0x89, 0x4d, 0x90, 0x1f, 0x4f, 0x00, 0x80, 0x2b,     //  .M..O..+   592
    0x00, 0x85, 0x1a, 0x90, 0x2b, 0x69, 0x00, 0x80,     //  ....+i..   600

    0x1f, 0x00, 0x89, 0x14, 0x90, 0x1a, 0x51, 0x00,     //  ......Q.   608
    0x80, 0x2b, 0x00, 0x86, 0x76, 0x90, 0x26, 0x5b,     //  .+..v.&[   616
    0x00, 0x80, 0x1a, 0x00, 0x88, 0x34, 0x90, 0x1b,     //  .....4..   624
    0x5b, 0x00, 0x80, 0x26, 0x00, 0x86, 0x79, 0x80,     //  [..&..y.   632

    0x1b, 0x00, 0x0a, 0x90, 0x27, 0x63, 0x88, 0x3b,     //  ....'c.;   640
    0x90, 0x1d, 0x5d, 0x00, 0x80, 0x27, 0x00, 0x85,     //  ..]..'..   648
    0x5c, 0x90, 0x29, 0x4e, 0x00, 0x80, 0x1d, 0x00,     //  \.)N....   656
    0x88, 0x6d, 0x90, 0x1d, 0x49, 0x00, 0x80, 0x29,     //  .m..I..)   664

    0x00, 0x85, 0x28, 0x90, 0x29, 0x5c, 0x00, 0x80,     //  ..(.)\..   672
    0x1d, 0x00, 0x89, 0x43, 0x90, 0x1d, 0x44, 0x00,     //  ...C..D.   680
    0x80, 0x29, 0x00, 0x86, 0x27, 0x90, 0x29, 0x60,     //  .)..'.)`   688
    0x00, 0x80, 0x1d, 0x00, 0x88, 0x1d, 0x90, 0x1d,     //  ........   696

    0x2d, 0x00, 0x80, 0x29, 0x00, 0x85, 0x75, 0x90,     //  -..)..u.   704
    0x29, 0x64, 0x00, 0x80, 0x1d, 0x00, 0x88, 0x7e,     //  )d.....~   712
    0x80, 0x29, 0x00, 0x00, 0xff, 0x2f, 0x00            //  .).../.    720
};

Hatte das hier gefunden, jedoch leider nichts für die Mac-Welt: https://code.google.com/p/miditones/

Gruß Chris

Mittlerweile habe ich meine Kenntnisse im Bezug auf Standard-MIDI-Files erweitert und bin nun dabei so ein File zu entschlüsseln.

Hier mal die ersten Zeilen:

unsigned char  bin2c_out[727] = 
{
    0x4d, 0x54, 0x68, 0x64, 0x00, 0x00, 0x00, 0x06,   Header-Chunk

    0x00, 0x01,                               Format

    0x00, 0x02,                               NumTracks

    0x07, 0x80,                               TimeDevision

    0x4d, 0x54, 0x72, 0x6b,                       Track-Chunk

    0x00, 0x00, 0x00, 0x5a,                       Tracklänge

    0x00, 0xff,     //  rk...Z..    16
    0x03, 0x14, 0x4c, 0x69, 0x76, 0x69, 0x6e, 0x67,     //  ..Living    24

    0x20, 0x6f, 0x6e, 0x20, 0x56, 0x69, 0x64, 0x65,     //   on Vide    32
    0x6f, 0x5f, 0x6d, 0x65, 0x6c, 0x6f, 0x00, 0xff,     //  o_melo..    40
    0x51, 0x03, 0x06, 0xc7, 0x25, 0x00, 0xff, 0x58,     //  Q...%..X    48
    0x04, 0x04, 0x02, 0x18, 0x08, 0x00, 0xff, 0x59,     //  .......Y    56

Kann mir jmd. sagen, was es mit der Zeile 0x00, 0xff, nach der Tracklängenzeile auf sich hat?

Gruß Chris

Kann mir jmd. sagen, was es mit der Zeile 0x00, 0xff, nach der Tracklängenzeile auf sich hat?

google und Konsorten ?

Chris72622: Kann mir jmd. sagen, was es mit der Zeile 0x00, 0xff, nach der Tracklängenzeile auf sich hat?

Wenn ich mir die Dateiformatbeschreibung auf http://faydoc.tripod.com/formats/mid.htm#Header_Chunk ansehe, dann steht das für: 0x00 ==> Delta-Time 0 0xFF ==> Meta-Command folgt 0x03 ==> Meta-Command ist "Sequence or Track name" 0x14 ==> Länge des Textes (0x14 =20 Bytes) 0x4c, 0x69, 0x76, 0x69, ..., ..., ..., 0x6d, 0x65, 0x6c, 0x6f, ==> 20 Bytes Text 0x00 ==> Delta-Time 0 0xff ==> Meta-Command folgt 0x51 0x03==> Meta-Command ist "Set tempo" 0x06, 0xc7, 0x25 ==> 0x06c725 = Dauer einer Viertelnote 444197 µs = 0,4442s 0x00, ==> Delta Time 0 0xff ==> Meta-Command folgt 0x58 0x04 ==> Time Signature 0x04 ==> nn numerator of time sig. 0x02 ==> dd denominator of time sig. 0x18, number of ticks in metronome click 0x08, number of 32nd notes to the quarter note 0x00, ==> Delta Time 0 0xff, ==> Meta-Command folgt 0x59, ==> Key signature

und so weiter und so fort...

Weißt Du damit überhaupt etwas anzufangen? Warum möchtest Du mit absolut null Ahnung anfangen, Midi-Dateien in die einzelnen Bytes zu zerlegen?

Was von diesem ganzen Sermon möchtest Du eigentlich wie weiterverarbeiten?

Wenn Du die gesamte Datei nur aus Deinem Programm irgendwohin senden möchtest, dann brauchst Du doch gar nicht wissen, was das im Einzelnen ist, dann sendest Du die Datei und gut?

Und wenn Du gar nicht alles aus der Datei brauchst, sondern Du zum Beispiel nur die Noten in der Datei suchst, dann würde man ja wohl nicht die gesamte Datei in den Sketch packen, sondern nur das, was man braucht. Zum Beispiel die Noten, die man sich vorher mit einem geeigneten Tool aus der Datei gezogen hat.

jurs: Und wenn Du gar nicht alles aus der Datei brauchst, sondern Du zum Beispiel nur die Noten in der Datei suchst, dann würde man ja wohl nicht die gesamte Datei in den Sketch packen, sondern nur das, was man braucht. Zum Beispiel die Noten, die man sich vorher mit einem geeigneten Tool aus der Datei gezogen hat.

Jaaaa, das liest sich jetzt natürlich locker-leicht.

Zum Einen werde ich das Tool sein müssen, dass die Datei "aufbereitet" und zum Anderen ist es für mich nicht nur wichtig dass eine bestimmte Note gespielt wird, sondern auch wann. Das Gleiche gilt im Übrigen für das Loslassen von Tasten.

Also alles doch nicht ganz so einfach. Ohne tiefer gehendere Kenntnisse im Bezug auf MIDI kann man meiner Meinung nach nicht einfach mal kurz die Noten inkl. ihrem zeitlichen Bezug zur ersten gespielten Note rausziehen.

Gruß Chris

Ich lass nicht locker. :stuck_out_tongue:

Mittlerweile kann ich MIDI-Files so weit entschlüsseln, dass ich theoretisch mit ihnen etwas anfangen kann.

Hierzu ein Beispiel:

0x00, 0x90, 0x2b, 0x7f,
0x81, 0x3e, 0x90, 0x37, 0x7f,
0x32, 0x80, 0x2b, 0x00,
0x81, 0x0f, 0x80, 0x37, 0x00,

In diesem Beispiel werden zwei Noten gespielt.

Zuerst kommt immer eine Zeitangabe, welche angibt, wieviel Zeit nach dem letzten Event vergangen sein muss, bis dieses Event aktiviert wird. Ein Event kann z.B. der Beginn einer angeschlagenen Note sein.

Der Übersichtlichkeit halber drösle ich das Ganze hier mal auf:

Zeitangaben:

0x00,
0x81, 0x3e,
0x32,
0x81, 0x0f,

Angaben, ob eine Note neu angeschlagen, oder losgelassen wird (die null steht hierbei für den MIDI-Kanal):

0x90,
0x90,
0x80,
0x80,

Angaben bzgl. der Tonhöhe:

0x2b,
0x37,
0x2b,
0x37,

Angaben bzg. der Anschlag-/Loslassstärke:

0x7f,
0x7f,
0x00,
0x00,

Hier nun mein Plan:

Da für mein geplantes Instrument die Anschlag-/Loslassstärke nicht von Bedeutung ist, werde ich diese zunächst einmal weglassen. Übrig bliebe folglich dann:

0x00, 0x90, 0x2b,
0x81, 0x3e, 0x90, 0x37,
0x32, 0x80, 0x2b,
0x81, 0x0f, 0x80, 0x37,

Nun habe ich mir Folgendes überlegt:

Zunächste einmal muss die nächste Zeitangabe im Array gesucht werden um im Anschluss zum richtigen Zeitpunkt das nächste Event “abzufeuern”.

Da die Zeitangabe eine variable Länge besitzt (Big Endian) suche ich nun eine Möglichkeit, die jeweils nächste Zeitangabe aus dem Array zu extrahieren. Erst dann kann ich ja die Art des nächsten Events ermitteln (Note an/ Note aus).

Wer kann helfen?

Gruß Chris