#19 [ Feature Request #4627 ] Capella import

after final release
open
nobody
4
2015-02-09
2011-10-31
No

Date: 2009-May-25 08:10
Sender: andreas_schn
Logged In: YES
user_id=24154
Browser: Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.9) Gecko/2009050519 Iceweasel/3.0.6
(Debian-3.0.6-1)

As I have used Capella for a long time and therefor
have many Capella score files lying around, it would be
great to have an import filter for Canorus. Also many
Capella files can be found on the internet.
The good news is: The file format is documented! For
Capella 2.x, there was a file called interna.txt on the
installation disk which holds a description of the file
format; the same file was available on the internet
under the name c2format.txt. I have attached the
contents of this file below.
Since Capella 3.0 (2000), the file format changed. The
new format is also documented, see
http://www.capella.de/download/mehr/Fundgrube/entwicklerpaket.zip

===================================
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]
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)

Discussion


Log in to post a comment.

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks