home *** CD-ROM | disk | FTP | other *** search
- ===================================
- Dateiformat capella 2.0 / 2.1 / 2.2
- ===================================
-
- Inhalt
-
- 1. Kurzerklaerung
- 2. Elementarformate
- 3. SCORE
- 4. Hilfsformate (alphabetisch)
- 5. Daten der Akkordinformationen
- 6. Grafik- und Textobjekte
- 7. Berechnung der chromatischen Tonhoehe in MIDI-Einheiten:
- 8. Beispieldatei
-
-
- 1. Kurzerklaerung
- ----------------
-
- Die einzelnen Formate sind in einem selbsterklaerenden Pseudocode beschrieben.
- Dabei steht in den einzelnen Zeilen jeweils
-
- ╖ das Teilformat (an anderer Stelle erklaert)
- ╖ evtl. ein Wiederholungsfaktor in eckigen Klammern
- ╖ Beschreibung
-
-
- 2. Elementarformate
- -------------------
-
- BIT einzelne Bits. Treten immer in Achtergruppen (Byte) oder Sechzehner-
- gruppen (Wort) auf. Diese Gruppen werden durch Diagramme dargestellt,
- wobei rechts das nidrigwertigste Bit steht.
- CHAR 1 Byte mit Vorzeichen
- BYTE 1 Byte ohne Vorzichen
- INT 2 Bytes mit Vorzeichen
- BOOL wie INT
- UINT 2 Bytes ohne Vorzichen
- LONG 4 Bytes mit Vorzichen
- DWORD 4 Bytes ohne Vorzichen
-
-
- 3. SCORE
- --------
-
- SCORE (capella 2.0/2.1/2.2 - Partitur)
- LONG Dateikennung; moegliche Werte:
- 0x74B3E289 = V2.0,
- 0x74B3E28A = V2.1 (oder V2.2 ohne Taktnumerierung)
- 0x74B3E28B = V2.2 (mit Taktnumerierung)
- PRINTSETTINGS Druckereinstellungen
- UINT Druckgroesse (7200 * Abstand zweier Notenlinien / Zoll)
- BYTE Druckbilddarstellung
- BYTE Farbdarstellung
- FONT Standard-Text-Font
- if Dateikennung >= V2.1
- INT Anfang fuer Seitenzaehlung
- endif
- if Dateikennung = V2.2 (Taktnumerierung)
- BYTE umrahmte Taktnummern
- BYTE Abstand der Taktnummern vom linken Rand
- BYTE Abstand der Taktnummern ueber dem System
- FONT Font fuer Taktnummern
- endif
- TEXTZEILE Kopfzeile
- TEXTZEILE Fusszeile
- LAYOUT Partiturformat
- INT nSystems
- SYSTEM[nSystems] Beschreibung der Systeme
- INT nMetafiles
- METAFILE[nMetafiles]
- end
-
-
- 4. Hilfsformate (alphabetisch)
- ------------------------------
-
- FONT (56 Bytes)
- UINT nScale
- LOGFONT logfont
- INT nHeight
- UINT reserviert
- end
-
- LAYOUT (Beschreibung der Partitur-Formatvorlage)
- if Dateikennung >= V2.1
- BYTE topDist
- CHAR Ersatzzeichen fuer geschuetztes Leerzeichen ('\0' --> '$')
- BYTE interDist
- CHAR Ersatzzeichen fuer geschuetzten Bindestrich ('\0' --> '#')
- else
- INT topDist
- INT interDist
- endif
- BYTE beamMode
- FONT txtFont
- BYTE txtAlign
- BOOL allaBreve
- UINT tempo
- INT nStaves
- if Dateikennung >= V2.1
- BYTE[16] nSound (Klang fuer Kanal 1 bis 16
- im 1. Byte ist hoechstes Bit gesetzt!)
- BYTE[16] nVolume (Lautstaerke fuer Kanal 1 bis 16)
- else (Version 2.0)
- BYTE[9] nSound (Klang fuer Kanal 1 bis 9)
- BYTE[9] nVolume (Lautstaerke fuer Kanal 1 bis 9)
- endif
- STAFF_LAYOUT[nStaves]
- end
-
- LIEDTEXT
- INT Liedtext_Laenge
- if Liedtext_Laenge > 0
- CHAR[n+1] Liedtext
- FONT (56 Bytes) Liedtext_Font
- INT Abstand_von_Notenzeile
- INT Abstand_zwischen_Strophen
- endif
- end
-
- LOGFONT (Windows-Struktur!)
- INT lfHeight;
- INT lfWidth;
- INT lfEscapement;
- INT lfOrientation;
- INT lfWeight;
- BYTE lfItalic;
- BYTE lfUnderline;
- BYTE lfStrikeOut;
- BYTE lfCharSet;
- BYTE lfOutPrecision;
- BYTE lfClipPrecision;
- BYTE lfQuality;
- BYTE lfPitchAndFamily;
- CHAR lfFaceName[32];
- end
-
- METAFILE (importierte WMF-Grafik)
- INT Type
- LONG[4] left, top, right, bottom
- LONG xProp (Soll-Seitenverhaeltnis)
- LONG yProp
- INT[4] reserviert
- BOOL fMF (in capella 2.0 immer TRUE)
- if fMF
- METAFILEPICT mf
- DWORD size
- CHAR[size] Daten
- endif
- end
-
- METAFILEPICT (Windows-Struktur!)
- INT mm
- INT xExt
- INT yExt
- UINT hMF
- end
-
- PRINTSETTINGS (Teil der Windows-Struktur DEVMODE)
- DWORD dmFields;
- INT dmOrientation;
- INT dmPaperSize;
- INT dmPaperLength;
- INT dmPaperWidth;
- INT dmScale;
- INT dmCopies;
- INT dmDefaultSource;
- INT dmPrintQuality;
- INT dmColor;
- INT dmDuplex;
- INT dmYResolution;
- INT dmTTOption;
- INT oberer Seitenrand
- INT unterer Seitenrand
- INT linker Seitenrand
- INT rechter Seitenrand
- end
-
- STAFF (Notenzeile)
- LIEDTEXT
- BOOL fActiveVoice
- INT Stimme (0 = Einzelzeile, 1 = erste Stimme, 2 = zweite Stimme)
- INT zusaetzlicher Abstand nach oben (in Notenlinien)
- INT zusaetzlicher Abstand nach unten (in Notenlinien)
- BYTE Layout-Zeilennummer
- UINT lg
- CHAR[lg] Akkordinformationen (siehe Abschnitt 5)
- INT n (Anzahl Akkorde+1)
- INT[n+1] Akkordindizes (Indizes der Akkordbeschreibungen in den Daten.
- Beispiel: Akkordindizes[2] = 17 bedeutet, dass die Beschreibung
- des 3. Akkords (Zaehlung ab 0) bei Byte 17 der Akkordinformationen
- beginnt.
-
- end
-
- STAFF_LAYOUT (Format einer Notenzeile)
- INT Abstand nach oben
- INT Abstand nach unten
- BYTE Schluessel
- BOOL fSingleLine
- BOOL irrelevant
- INT baseSound
- INT extSound
- INT transp
- CHAR[3] brackets
- STRINGZ Beschreibung
- STRINGZ Bezeichnung
- STRINGZ Abkuerzung
- end
-
- STRINGZ
- INT len
- CHAR[len+1] Text (Null-terminierter String)
- end
-
- SYSTEM (Notensystem)
- +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
- |5 |4 |3 |2 |1 |
- +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
- (1) BIT fJustification
- (2) BIT fShowMeter
- (3) BIT fFullName
- (4) BIT[5] n1 (Korrektur der Taktzaehlung Teil 1, ab V2.2)
- (5) BYTE nIndent
-
- +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
- |4 |3 |2 |1 |
- +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
- (1) BIT[10] nStaves
- (2) BIT Taktnumerierung auf 1 zuruecksetzen (ab V2.2)
- (3) BIT[4] n2 (Korrektur der Taktzaehlung Teil 2, ab V2.2)
- n = n1 + 32*n2
- if n > 500 then Korrektur := 500-n else Korrektur := n
- (4) BIT fFormFeed (ab V2.2)
-
- STAFF[nStaves] (Beschreibung der Notenzeilen)
- end
-
- TEXTZEILE (fuer Kopf-/Fusszeile)
- INT Laenge
- if Laenge > 0
- CHAR[Laenge+1] Zeile (Null-terminierter String)
- INT Abstand
- FONT Font
- BYTE Ausrichtung
- BYTE auch auf 1. Seite
- endif
- end
-
-
- 5. Daten der Akkordinformationen
- --------------------------------
-
- +---+---+---+---+---+---+---+---+
- |5 |4 |3 |2 |1 |
- +---+---+---+---+---+---+---+---+
- (1) BIT Extras
- (2) BIT fester_Taktstrich_oder_Verschiebung
- (3) BIT Moduswechsel
- (4) BIT Triole_etc
- (5) BIT[4] Anzahl_Noten
-
- if Moduswechsel
- +---+---+---+---+---+---+---+---+
- |3 |2 |1 |
- +---+---+---+---+---+---+---+---+
- BIT[3] Schluesselform (0=G, 1=C, 2=F, 3=Schlagz. 4=kein, 5=unveraendert)
- BIT[3] Schluessel-Linie (0 = oberste Linie, ... , 4 = unterste Linie)
- BIT[2] Schluessel-Oktavierung (0=nach oben, 1=keine, 2= nach unten)
-
- +---+---+---+---+---+---+---+---+
- |2 |1 |
- +---+---+---+---+---+---+---+---+
- (1) BIT[4] Tonart (0=7b ... 7=c-Dur ... 14=7#, 15=unveraendert)
- (2) BIT[4] Taktnenner (0=ganze, 1=halbe, ..., 6=1/64, 15=kein Takt)
-
- BYTE Taktzaehler (255=unveraendert)
- endif
-
- if fester_Taktstrich_oder_Verschiebung
- +---+---+---+---+---+---+---+---+
- |2 |1 |
- +---+---+---+---+---+---+---+---+
- BIT[4] fester_Taktstrich (0..6=einfach, doppelt, Schluss Wdh-Ende,
- Wdh.Anf., Wdh-Ende/Anf)
- BIT[4] Horizontalverschiebung
- endif
-
- if Triole_etc (Beispiele: Triole / Duole)
- +---+---+---+---+---+---+---+---+
- |3 |2 |1 |
- +---+---+---+---+---+---+---+---+
- (1) BIT[4] Zaehler ( 3 / 2 )
- (2) BIT[1] tripartit ( 0 / 1 )
- (3) Bit[3] reserviert (=0)
- endif
-
- if Extras
- BYTE[3] reserviert
- BYTE Anzahl_GrafikObjekte
- GRAFIKOBJEKT[Anzahl_GrafikObjekte]
- endif
-
- +---+---+---+---+---+---+---+---+
- |4 |3 |2 |1 |
- +---+---+---+---+---+---+---+---+
- (1) BIT[4] Notenwert
- (2) BIT[2] Punktierung (0..3 = ohne, einfach doppelt, Zeilenende)
- (3) BIT halbe_Groesse
- (4) BIT ohne_Wert
-
- +---+---+---+---+---+---+---+---+
- |6 |5 |4 |3 |2 |1 | |
- +---+---+---+---+---+---+---+---+
- (1) BIT Balken trennen
- (2) BIT Balken verbinden
- (3) BIT unsichtbar
- (4) BIT Haltebogen
- (5) BIT expl_Vorzeichen
- (6) BIT[3] Kopfform
-
- +---+---+---+---+---+---+---+---+
- |4 |3 |2 |1 |
- +---+---+---+---+---+---+---+---+
- (1) BIT[4] Artikulationszeichen
- (2) BIT[2] Hals
- (3) BIT[1] Pause auch in zweistimmiger Zeile zentriert (ab V2.1)
- (4) BIT[1] Atemzeichen (neu in V2.2)
-
- NOTE[Anzahl_Noten] (die Noten sind immer aufsteigend nach Tonhoehe sortiert!)
- end
-
- NOTE
- +---+---+---+---+---+---+---+---+
- |2 |1 |
- +---+---+---+---+---+---+---+---+
- (1) BIT[6] relative diatonische Hoehe + 32
- (2) BIT[2] Alteration + 2
- end
-
- GRAFIKOBJEKT
- BYTE Typ
- BYTE Laenge_des_Notenbereichs
- case Typ
- 0: BINDEBOGEN
- 1: N_OLENKLAMMER
- 2: DE_CRESCENDO
- 3: NOTENLINIEN
- 4: VOLTENKLAMMER
- 5: TRILLERSCHLANGE
- 6: TEXTOBJEKT
- 7: LINIE
- 8: RECHTECK
- 9: ELLIPSE
- endcase
- end
-
-
- 6. Grafik- und Textobjekte
- --------------------------
-
- BINDEBOGEN (16 Bytes)
- INT x0 (Anfangspunkt der Bezier-Kurve)
- INT y0
- INT x1 (1. Stuetzpunkt der Bezier-Kurve)
- INT y1
- INT x2 (2. Stuetzpunkt der Bezier-Kurve)
- INT y2
- INT x3 (Endpunkt der Bezier-Kurve)
- INT y3
- end
-
- DE_CRESCENDO (8 Bytes)
- INT x0 (Winkelpunkt)
- INT y0
- INT x1 (oberer Endpunkt, anderer ergibt sich aus Symmetrie)
- INT y1
- end
-
- ELLIPSE (10 Bytes) siehe RECHTECK
-
- LINIE (10 Bytes)
- INT x0
- INT y0
- INT x1
- INT y1
-
- +---+---+---+---+---+---+---+---+
- |2 |1 |
- +---+---+---+---+---+---+---+---+
- (1) BIT[4] Linienstaerke
- (2) BIT[4] frei
-
- BYTE frei
-
- N_OLENKLAMMER (10 Bytes)
- INT x0
- INT y0
- INT x1
- INT y1
-
- +---+---+---+---+---+---+---+---+
- |3 |2 |1 |
- +---+---+---+---+---+---+---+---+
- (1) BIT untere Klammer
- (2) BIT Klammer sichtbar
- (3) BIT[6] frei
-
- BYTE Ziffer
- end
-
- NOTENLINIEN (6 Bytes)
- INT y
- INT x0
- INT x1
- end
-
- RECHTECK (10 Bytes)
- INT x0
- INT y0
- INT x1
- INT y1
-
- +---+---+---+---+---+---+---+---+
- |2 |1 |
- +---+---+---+---+---+---+---+---+
- (1) BIT[4] Linienstaerke
- (2) BIT[4] Fuellung
-
- BYTE frei
- end
-
- TEXTOBJEKT
- INT x
- INT y
-
- +---+---+---+---+---+---+---+---+
- |4 |3 |2 |1 |
- +---+---+---+---+---+---+---+---+
- (1) BIT[3] Font_Index (0=Musik, 1=Standard, 2=individuell)
- (2) BIT In sich zentriert
- (3) BIT Auf Seite zentriert
- (4) BIT[3] frei
-
- if Font_Index = 2
- FONT
- endif
- CHAR[] Text (bis zum begrenzenden ASCII-Null-Zeichen)
- end
-
- TRILLERSCHLANGE (7 Bytes)
- INT y
- INT x0
- INT x1
-
- +---+---+---+---+---+---+---+---+
- |2 |1 |
- +---+---+---+---+---+---+---+---+
- (1) BIT mit Tr.
- (2) BIT[7] frei
- end
-
- VOLTENKLAMMER (7 Bytes)
- INT y
- INT x0
- INT x1
- +---+---+---+---+---+---+---+---+
- |3 |2 |1 |
- +---+---+---+---+---+---+---+---+
- (1) BIT[4] Ziffer
- (2) BIT offen
- (3) BIT[3] frei
- end
-
-
- 7. Berechnung der chromatischen Tonhoehe in MIDI-Einheiten:
- ----------------------------------------------------------
-
- Im Byte NOTE ist die relative diatonische Hoehe angegeben.
- Die absolute chromatische Tonhoehe ist abhaengig vom aktuellen Schluessel
- und der aktuellen Tonart und errechnet sich nach folgendem Schema
- (kein capella-Originalcode, capella ist in C++ geschrieben):
-
- function chromatischeTonhoehe (Schluessel_Form, Schluessel_Oktavierung, Tonart,
- relative_diatonische_Hoehe, Alteration: integer)
- : integer;
- (*
- Die ersten drei Parameter ergeben sich aus dem aktuellen Zeilenzustand
- (Zeilenattribut bzw. letzter Moduswechsel),
- die beiden letzten aus der Noteninfo (NOTE)
- *)
- const Dur_Tonleiter: array[0..6] of integer = (0,2,4,5,7,9,11);
- var d, Oktave, relDiatonic, relChromatic, relTonarthoehe: integer;
- begin
- d := relative_diatonische_Hoehe + 42;
- case Schluessel_Form of
- 1: d := d - 7; (* C-Schluessel eine Oktave tiefer *)
- 2: d := d - 14; (* F-Schluessel zwei Oktaven tiefer *)
- end;
- case Schluessel_Oktavierung of
- 0: d := d + 7;
- 2: d := d - 7;
- end;
- Oktave := d div 7;
- relDiatonic := d mod 7;
- relChromatic := 12 * Oktave + Dur_Tonleiter[relDiatonic] + Alteration;
- relTonarthoehe := ((Tonart-7) * 7 + 60) mod 12; (* Quintenzirkel *)
- chromatischeTonhoehe := relChromatic + relTonarthoehe;
- end;
-
-
- 8. Beispieldatei
- ----------------
-
- Die im folgenden aufgeschluesselte Datei besteht aus einer Tonleiter: c d e f g a h c'.
-
- Adr.| Daten | Kommentar
- ----+----------------------------------------+--------
- | |
-
- === Anfang SCORE ======================
- 00: 8AE2 B374 Dateikennung (2.2 ohne Taktnumerierung)
- 0367 0004 0100 0900 0000 0000 PRINTSETTINGS
- 10: 0000 0100 0100 2C01 0100 0100 2C01 0200
- 20: 1400 1400 1400 1400
- F801 Druckgroesse
- 00 Druckbilddarstellung
- 01 Farbdarstellung
- 0000 0000 FONT
- 30: 0000 0000 0000 9001 0000 0000 0000 0110
- 40: 5469 6D65 7320 4E65 7720 526F 6D61 6E00
- 50: 0000 0000 0000 0000 0000 0000 0000 0000
- 60: C0FF 0000
- 0100 Anfang fuer Seitenzaehlung
- 0000 Kopfzeile (Laenge = 0)
- 0000 Fusszeile (Laenge = 0)
- === Anfang LAYOUT: ====================
- 04 topDist (Abstand vor 1. System)
- 24 Ersatzzeichen fuer geschuetztes Leerzeichen ('$')
- 00 interDist (Abstand zwischen Systemen)
- 23 Ersatzzeichen fuer geschuetzten Bindestrich ('#')
- 03 beamMode (globale Balkensetzung)
- 07 FONT txtFont
- 70: 00F2 FF00 0000 0000 0090 0100 0000 0000
- 80: 0001 1054 696D 6573 204E 6577 2052 6F6D
- 90: 616E 0000 0000 0000 0000 0000 0000 0000
- A0: 0000 00C0 FF00 00
- 01 txtAlign
- 0000 allaBreve (nein)
- 7800 tempo (120)
- 0100 nStaves (1 Notenzeilenvorlage)
- 8128 Klang fuer Kanal 1 bis 16 (im 1. Byte ist hoechstes Bit gesetzt!)
- B0: 4944 3818 4734 7502 0304 0506 0708
- 5050 Lautstaerke fuer Kanal 1 bis 16 (alle 80)
- C0: 5050 5050 5050 5050 5050 5050 5050
- === Anfang STAFF_LAYOUT ===============
- 0400 Abstand nach oben
- D0: 0400 Abstand nach unten
- 58 Schluessel
- 00 00 fSingleLine
- 00 00 irrelevant
- 00 00 baseSound
- 00 00 extSound
- 00 00 transp
- 5F 5F5F brackets
- E0: 0900 756E 6265 6E61 6E6E 7400 Beschreibung (9+1 Bytes: " unbenannt")
- 0000 00 Bezeichnung (0 Bytes)
- 00 Abkuerzung (0 Bytes)
- F0: 0000
- --- Ende STAFF_LAYOUT -----------------
- --- Ende LAYOUT -----------------------
- 0100 nSystems (1)
- === Anfang SYSTEM =====================
- 067F = 0111 1111 0000 0110 (Intel: 1. Byte niedrig!)
- 067F = 0000 0110 0111 1111
- 0 fJustification
- 1 fShowMeter
- 1 fFullName
- 0000 0 n1 = 0
- 0000 0110 nIndent = 6
- 0100 = 0000 0000 0000 0001
- 00 0000 0001 nStaves (1 Notenzeile)
- 0 Taktnumerierung auf 1 zuruecksetzen (nein)
- 000 0 n2 = 0
- 0 fFormFeed
- === Anfang STAFF =======================
- 0000 Liedtext_Laenge (0 = kein Liedtext)
- 0100 fActiveVoice (aktive Stimme, nur bei zweistimmigen Notenzeilen relevant)
- 0000 Stimme (0 = Einzelzeile)
- 0000 zusaetzlicher Abstand nach oben
- 100: 0000 zusaetzlicher Abstand nach unten
- 00 Layout-Zeilennummer (0 = 1. Stimme der Vorlage)
- 2C 00 lg = 44
- 10 0200 0099 1002 0000 9A10 45 Bytes Akkordinformationen (siehe Anhang)
- 110: 0200 009B 1002 0000 9C10 0200 009D 1002
- 120: 0000 9E10 0200 009F 1002 0000 A000 3000
- 130: 00
- 09 00 n (Anzahl Akkorde+1) (8 Akkorde)
- 00 00 Akkord 0 --> 0
- 05 00 Akkord 1 --> 5
- 0A 00 Akkord 2 --> 10
- 0F 00 Akkord 3 --> 15
- 14 00 Akkord 4 --> 20
- 19 00 Akkord 5 --> 25
- 1E Akkord 6 --> 30
- 140: 00
- 23 00 Akkord 7 --> 35
- 28 00 Akkord 8 --> 40 (Zeilenende)
- 2C 00 Akkord 9 --> 44 (zur Ermittlung der LΣnge von "Akkord 8")
- --- Ende STAFF ------------------------
- --- Ende SYSTEM -----------------------
- 00 0000 nMetafiles (0)
- --- Ende SCORE ------------------------
-
-
- Aufgliederung der 45 Bytes Akkordinformationen:
- ===============================================
- Akkord 0 (5 Bytes): 10 00010000
- 0000 keine Extras etc.
- 0001 1 Note (untere 4 bit: keine Extras ...)
- 02 00000010
- 0010 Notenwert 2 = 1/4
- 0000 keine Punktierung etc.
- 00 keine Balkentrennung etc.
- 00 keine Artikulationsz. etc.
- 99 10011001 1. Note
- 011001 rel. H÷he = 25 - 32 = -7
- 10 Alteration = 2 - 2 = 0 (keine)
-
- Akkord 1 (5 Bytes): 10 02 00 00 9A dto., rel. H÷he = -6
- Akkord 2 (5 Bytes): 10 02 00 00 9B dto., rel. H÷he = -5
- Akkord 3 (5 Bytes): 10 02 00 00 9C dto., rel. H÷he = -4
- Akkord 4 (5 Bytes): 10 02 00 00 9D dto., rel. H÷he = -3
- Akkord 5 (5 Bytes): 10 02 00 00 9E dto., rel. H÷he = -2
- Akkord 6 (5 Bytes): 10 02 00 00 9F dto., rel. H÷he = -1
- Akkord 7 (5 Bytes): 10 02 00 00 A0 dto., rel. H÷he = 0
- Akkord 8 (4 Bytes): 00 30 00 00 0 Noten, ⁿbrige Bytes irrelevant (Ende der Notenzeile)
-