microbug
meckerbug
olafp schrieb:( wenn ich das neulich mal richtig recherchiert habe ist sysex auch garnicht in der midi spec eindeutig geregelt ?)
Ja und nein.
Geregelt ist der Rahmen. MIDI Sysex Daten beginnen immer mit F0h <herstellerID> und enden auf F7h. Wie überall bei MIDI darf das 7. Bit bei den Datenbytes nie gesetzt sein, auch innerhalb eines Sysex-Strings nicht.
Das Byte der Hersteller-ID kennt allerdings folgende Sonderformen:
7Dh ("Universal Non-Comercial")
7Eh ("Universal Non-Realtime")
7Fh ("Universal Realtime")
00h (3 Byte ID)
Die ersten 2 waren für Hersteller vorgesehen, die keine Kennung beantragt hatten bzw für Eigenbauprojekte. So haben die MIDITemp PMM-88/44 zB noch nicht die spätere MIDITemp-ID (die unter die mit den 3 Bytes fällt), sondern nutzt als Kennung das Byte 7Eh.
Eine Hersteller ID 00 bedeutet, daß eine 2byte ID folgt, die den Hersteller kennzeichnet. Man hatte anfangs gedacht, mit Hersteller IDs im Bereich von 1-127 auszukommen, was sich aber als falsch herausstellte, insofern wurde diese Erweiterung nötig. Novation zB hat eine solche ID, die 00 20 29 lautet.
F0 7F aber ist zB für MIDI Timecode reserviert.
Soweit der Rahmen. Innerhalb dieses Rahmens dagegen ist der Hersteller allerdings völlig frei, was die Struktur der Daten angeht, solange die Grundregel, pro Byte immer das 7. Bit nicht zu setzen (was einem Maximalbereich von 0-127 entspricht) eingehalten wird. Diese Freiheiten haben die Hersteller auch wirklich ausgenutzt, teilweise immer aufs Neue kreativ, besonders beim Übertragen von 8/16Bit Werten in 7 Bits. Selbst die Sache mit dem 7. Bit wurde durch einen Hersteller nicht eingehalten. Wer's genauer wissen will, welcher Wildwuchs da herrscht, schaue sich das Sounddiver Programming Manual zB.bei deepsonic.ch an. Manche Hersteller haben schon sowas wie ein Standardformat für ihre Geräte, manche dagegen bei jedem Gerät ein Anderes. löbliche Ausnahme ist Roland, die seit ihren Digitalsynthis ein für alle ihre Geräte standardisiertes Datenformat benutzen, welches sich nur in GerateID, Datenlänge und der Zuordnung der Daten zu den Funktionen unterscheidet - das Format selbst ist immer gleich.
Eine weitere Grundregel bei Sysex lautet: ein solcher Dump darf niemals unterbrochen werden! kommen also Noten- und Controllerevents während eines Sysex Dumps an, müssen diese gepuffert werden und dürfen erst nach dem Ende des Sysex Dumps verarbeitet werden. Oder der Dump muß gepuffert werden, das braucht Speicher im Interface. Offenbar ist genau das auch das Problem des Alesis: man hat da einen Prozessor mit zuwenig Speicher gewählt, sodaß bei CoreMIDI, welches offenbar selbst Pufferspeicher auf der Hardwareseite voraussetzt, keiner mehr zum Puffern vom Sysexdaten vorhanden ist.