Purple Hearts hpmusic

Die Struktur von Style-Dateien

Friday, 05 November 2004
Mit einem YAMAHA Style werden Keyboards alle Informationen übermittelt, die für eine automatische Begleitung (Accompaniment) benötigt werden. Der Musiker spielt mit der rechten Hand die Melodie und greift mit der linken Hand einen dazu passenden Akkord, beispielsweise Fm6. Eine komplexe Funktion identifiziert den Akkord und transformiert die Noten nach den Vorgaben im Styles und erzielt hierdurch eine zur Melodie passende Begleitung. Neben Notensequenzen, und Soundeffekt-Events enthalten Styles einen Stylenamen, z.B. "Swing 1", ein Standard-Tempo und Daten, mit der die Art der Anpassung des Styles an die Akkord-Eingabe festgelegt wird.

Ein Style besteht aus mehreren Komponenten (Parts), die während des Spielens vom Musiker geschaltet werden. Am PSR-8000 sind das "Intro A", "Main A", "Ending A", "Intro B", "Main B", "Ending B", "Fill In AA", "Fill In BB", "Fill In AB" and "Fill In BA". Ältere PSR's haben weniger und neuere mehr Komponenten. Jeder Komponente werden im Style für einen oder mehrere Takte Noten-Sequenzen für mehrere MIDI-Kanäle zugeordnet. Dieses Noten-Material wird beim Spiel geeignet transformiert.

Jedes Keyboard besitzt eine Menge von vorgefertigten Styles (Preset Styles). Zusätzlich besteht aber auch noch die Möglichkeit, eigene Styles zu kreieren und diese oder als Style-Dateien erworbene Styles an bestimmte Plätze zu laden. Diese Styles nennt man Custom-Styles. In der Anwendung gibt es keinen Unterschied zu den Preset-Styles. In den Keyboard-Handbüchern wird die Kreation und der Gebrauch von Styles und Style-Dateien ausführlich beschrieben.

In dem vorliegenden Artikel wird ausschließlich ein Überblick über die interne Struktur von Style-Dateien vermittelt. Zum Verständnis ist eine gewisse Kenntnis der MIDI-Events und der Aufbau von MIDI-Dateien erforderlich. Im Internet gibt es zu diesem Thema eine Reihe von Artikeln, die meisten sind jedoch in englischer Sprache. Siehe "Good Links" auf dieser Website.

Die interne Struktur einer Style-Datei

Eine Style-Datei ist eine MIDI-Datei vom Typ SMF0 mit speziellen Konventionen und Erweiterungen, die jedoch nicht der MIDI-Norm gehorchen. Die Datei-Erweiterung ist .sty. Gibt man einer Style-Datei die Dateierweiterung .mid, so kann diese Datei von Sequenzer-Software geladen und mit jedem MIDI-Player am PC abgespielt werden.

Eine Style-Datei hat vier Sektionen:

  1. Der Style-Header
  2. Die Style-Parts
  3. Der CASM-Chunk
  4. Der MHhd/MHtr-Chunk

Der Style-Header

Der Style-Header beginnt wie bei allen SMF0-Dateien auch mit einem MThd-Chunk-Header und einem MTrk-Header. Das SysEx F0 7E 7F 09 01 F7 :"Turn General Midi System On" ist eines der ersten MIDI-Events, meistens folgt das SysEx F0 43 10 4C 00 00 7E 00 F7: "XG System On". Als interne Kennung einer Style-Datei befinden sich auf dem Zeitpunkt 1:00:000 die zwei Marker-Events "SFF1" und SInt". Time-, Tempo-, Song-Name- und Copyright-Events sind wie allgemein üblich enthalten. Ebenso die die statischen SysEx und Controller-Events.

Die Style-Parts

Die Style-Parts enthalten die Noten-Events der Styles. Jeder Style-Part wird durch einen Marker mit dem Namen des Parts eingeleitet und endet beim nächsten Marker. Für ein Beispiel beginnt der Part "Fill In AA" wie folgt:

4:01:000 Marker: Fill In AA
4:01:000 Note On: Kanal 10, Note B2 Velocity 78

Die Folge der Style-Parts endet mit dem Meta-Event "End of Track" (ff 2f 00).

Der CASM-Chunk

Der CASM-Chunk-Header ist ein Datenblock von 8 Bytes, der unmittelbar danach durch "End of Track" abgeschlossen wird. Die ersten 4 Bytes sind die ASCII-Zeichen "CASM". In den folgenden 4 Bytes wird die Byte-Anzahl des gesamten CASM-Chunk als 32-Bit-Zahl abgelegt.

Der CASM-Chunk ist in mehrere sogenannte CSEG-Blöcke eingeteilt, die jeweils durch einen acht Byte großen CSEG-Header eingeleitet werden.

Der CSEG-Header begint mit den 4 ASCII-Zeichen "CSEG", gefolgt von einer 32-Bit-Zahl, der Datenlänge des CSEG-Blocks. Das Ende des letzten CSEG-Blocks ist gleichzeitig das Ende des CASM-Chunks.

Der CSEG-Block besteht aus mehreren Sdec-Blöcken. Er beginnt mit einem 8 Byte langen Sdec-Header: 4 ASCII's "Sdec", gefolgt von der Länge der Sdec-Daten als 32-Bit-Zahl. Die Sdec-Daten sind eine Sequenz von ASCII-Zeichen, mit denen die Parts der darauffolgenden Ctab-Blöcke festgelegt werden.

Beispiel eines Sdec-Blocks: "Sdec" 00 00 00 1C "Fill In AA,Fill In AB,MAIN A"

Auf den Sdec-Block folgt unmittelbar eine Folge von Ctab-Blöcken. Jeder Ctab-Block enthält Informationen für eine konkreten MIDI-Kanal aus den im Sdec-Block verzeichneten Parts. Der Ctab-Block beginnt mit 8 Byte Ctab-Block-Header: 4 ASCII's "Ctab", gefolgt von der Datenlänge des Ctab-Blocks als 32-Bit-Zahl.

Das erste Byte der Ctab-Daten ist die um 1 kleinere Nummer des MIDI-Kanals. Danach folgen 8 ASCII's, der Voice-Name. Hier finden wir Namen wie "CC-Crash" oder "Pad-Root" an Stelle der bekannten Voices der GM- oder XG-Banks. Mit den anschließenden Bytes wird die Art und Weise der Transformation der Noten aus den gegriffenen Akkorden spezifiziert.

Der MHhd/MHtr-Chunk

Der MHhd-Chunk ist häufig nicht vorhanden. Er beginnt mit zwei Headern von 8 Bytes: MHhd und MHtr. Der MHhd-Header besteht aus den ASCII's "MHhd" und der Zahl 8 als 32-Bit-Zahl. Danach folgt der MHtr-Header: 4 ASCII's "MHtr" und die Anzahl der bis zum Ende des MHhd/MHtr-Chunks folgenden Bytes als 32-Bit-Zahl. Die anschließenden Daten werden durch Marker-Events wie "MAIN A", "Fill In AA",... voneinander getrennt. Zwischen den Markern stehen SysEx-Events wie z.B. f0 nn 43 76 .. .. f7. Die Bedeutung dieser SysEx konnte nicht herausgefunden werden.

Die Struktur einer Style-Datei

Style-Header

Style-Parts

Part 1
Part 2
...
Part n

CASM-Chunk

CSEG

Sdec
Ctab
Ctab
...
Ctab

CSEG

Sdec
Ctab
Ctab
...
Ctab

CSEG

Sdec
Ctab
Ctab
...
Ctab

CSEG

...

Ende des CASM =
Ende des letzten CSEG =
Ende des letzten Ctab

MHhd/MHtr-Chunk (optional)



Software und weitere Artikel

Jørgen Sørensen's CasmEdit ist ein leistungsfähiges Tool zum Programmieren von Styles, Mit seinem anderen Programm midi2style lassen sich sehr komfortabel mit geeigneten Notensequenzen aus MIDI-Dateien Styles generieren, die auch mit Effekten versehen werden können.
Bei Jørgen finden wir außerdem einen wesentlich detaillierteren Artikel und eine Menge von stets aktualisierten Links zu allen Programmen und Fragen, die Styles betreffen.
http://www.jososoft.dk/yamaha/index.htm

CasmEdit von Osenenko ist ein weiteres Programm zum Erzeugen und Modifizieren der CASM-Blöcke von Styles-Dateien:
http://osenenko.chat.ru/Main_eng.htm

Ich habe ein Programm zur Analyse von MIDI- und Style-Dateien programmiert. Es werden alle MIDI-Events und die Struktur einer Style-Datei in lesbarer Form protokolliert. PSRMIDI ist Freeware und kann von dieser Website heruntergeladen werden.

Wenn wir die Dateierweiterung einer Style-Datei von .sty nach .mid verändern, können wir diese Datei mit Cakewalk oder anderen Sequenzer-Programmen laden. Wir können uns zwar die Noten and andere MIDI-Events anschauen, jedoch bleiben alle Anteile des CASM-Chunks unsichtbar. Es lassen sich alle Parts abspielen. Ändern wir jedoch die Datei ab und speichern wir sie zurück, wird der CASM-Chunk vollständig gelöscht.

Ende