╔══════════════════════════════════════════════════╗ ║ ║ ║ T H E C F T F I L E F O R M A T ║ ║ ════════════════════════════════════════════ ║ ╚══════════════════════════════════════════════════╝ ┌────────────────────────────────────────┐ │ <shft> F1 = Toggle to regular window │ └────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────┐ │ │ │ If you are reading this document for the first time and │ │ are unfamiliar with the commands for scrolling the text, you │ │ should be aware that <ctrl> ▲ (hold down the <ctrl> key and │ │ push the cursor UP key) will scroll the text UP and <ctrl> ▼ │ │ will scroll the text DOWN. You can also use the PageUp and │ │ PageDown keys to scroll quickly through the document. │ │ │ └──────────────────────────────────────────────────────────────────┘ 1.1 A CFT file is a compression of a musical data set. A musical data set may consist of (1) a single MPG file representing a single page of musical notation, (2) a directory containing one or more MPG files, or (3) a set of directories, each containing one or more MPG files. 1.2 There are two advantages to having a compressed format for musical data sets. (1) Size. A typical MPG file representing a full page page of musical notation averages about 30,000 bytes in size. The MPG representation of a full score of a work such as J.S. Bach's B-minor Mass, for example, requires about 9.3 megabytes. The CFT compression of the same work takes about 1.77 megabytes, making the compression ratio between the two formats in this case about 5.2 to 1. Transmitting large data sets in the CFT format takes about one fifth the time required to transmit the same information in MPG file format. (2) Simplicity. A musical data set in MPG format could have as many as two hundred directories and more than one thousand separate MPG files. Regardless of its size or complexity, the CFT compression of a data set is always just one large file. When storing or transmitting information, it is much easier to deal with one large file than with many smaller files. 1.3 For purposes of displaying and printing music, it is just as easy to work from a CFT file as from a set of MPG files. The only reason to expand a CFT into its MPG component files is for the purpose of editing the files (i.e., modifying the musical notation). A CFT file cannot be edited, because the compression algorithm itself is content dependent. Likewise, CFT files cannot be subdivided or merged with other CFT files. 1.4 Dmuse provides utilities for both compressing (to CFT format) and expanding (to MPG format) musical data sets. This means that you can store your musical data efficiently (in CFT format) and can also edit your musical data (in MPG format). You may also use the editor to create new MPG files and later compress them to CFT format. In this way, you can become an originator or source of CFT files for publication on the internet. ────────────────────────────────────────────────────────────────── 2.1 Under normal circumstances, you would never have a reason to examine the contents of a CFT file. Since a CFT file is not an ASCII (character based) file, you can only view it in HEX format. For those people interested, however, we include a brief description of how a CFT file is organized. ┌───────────────────────┐ │ CFT file organization │ └═══════════════════════┘ I. Title and Offset information Field 1: (8 bytes) Source of file e.g., CCARH Field 2: (4 bytes) Version number (compression technique, etc) Field 3: (4 bytes) Checksum number (for file varification) Field 4: (4 bytes) Byte offset to File Organization section Field 5: (4 bytes) Byte offset to Data Group offsets II. Header information (byte offset = 24 bytes) Field 1: byte 1: length of field in bytes (up to 100) bytes 2..: composer Field 2: byte 1: length of field in bytes (up to 100) bytes 2..: work Field 3: byte 1: length of field in bytes (up to 50) bytes 2..: type of representation e.g., Full Score Complete Parts Violin I Field 4: byte 1: length of field in bytes (up to 50) bytes 2..: resolution e.g., 300 dots/inch III. File Organization (offset contained in bytes 17..20 of file) A CFT file may be one of three types. 1. It may be a compression of a single file (generally not used) 2. It may be a compression of a set of MPG page files from a single directory. e.g., the full score of a work with only one movement. 3. It may be a compression of <n> directories, each containing a set of MPG files. e.g., the full score of a work with <n> movements. the set of parts for <n> instruments. the part for one instrument, divided into <n> movements. Field 1: (one byte) 0 = case 1 1 = case 2 2 = case 3 Case 1: Field 2: (one byte) 0x00 Field 3: (one byte) 0x00 Field 4: byte 1: length (up to 100) bytes 2..: sub-divsion name (optional) e.g. Movement 1 e.g. Violine I Field 5: byte 1: length (up to 40) bytes 2..: note size e.g. 14 dots per staff line 21 dots per staff line 14 and 21 mixed Field 6: (one byte) 0x00 Field 7: (one byte) <page number of this MPG file> Field 8: (two bytes) 0x0002 Case 2: Field 2: byte 1: length (up to 13) bytes 2..: name of default path (directory) for expansion Field 3: (one byte) 0x00 = single sub-division name 0x01 = multiple sub-division names 0x02 = single sub-division name plus a CONTENTS file Field 4: (case 0x00) byte 1: length (up to 100) bytes 2..: sub-divsion name (optional) e.g. Movement 1 e.g. Violine I (case 0x01) bytes 1-2: <n> = number of sub-division names bytes 3-4: sequence number of CONTENTS file (zero = no CONTENTS file) bytes 5-6: length of data string bytes 7..: data string data string = <n> repetitions of: byte: <k> = length of name k-bytes: name (case 0x02) bytes 1-2: sequence number of CONTENTS file byte 3: length (up to 100) bytes 4..: sub-divsion name (optional) e.g. Movement 1 e.g. Violine I Field 5: byte 1: length (up to 40) bytes 2..: note size e.g. 14 dots per staff line 21 dots per staff line 14 and 21 mixed Field 6: (one byte) <p> pages (high order byte) Field 7: (one byte) <p> pages (low order byte) Field 8: (two bytes) 0x0002 Case 3: Field 2: byte 1: length (up to 13) bytes 2..: name of default path (directory) for expansion Field 3: (one byte) <n> (1 to 255) number of sub-directories Fields 4..8: are repeated <n> times Field 4: byte 1: length (up to 100) bytes 2..: sub-divsion name e.g. Movement 1 e.g. Violine I Field 5: byte 1: length (up to 40) bytes 2..: note size e.g. 14 dots per staff line 21 dots per staff line 14 and 21 mixed Field 6: byte 1: length (up to 13) bytes 2..: name of default path (sub-directory) for expansion Field 7: (one byte) <p> pages Field 8: (two bytes) data group number of first page IV. Data group offsets and lengths (offset contained in bytes 21..24 of file) Each offset/length pair is stored in two 4-byte groups. Offsets are measured from the beginning of the file. Case 1: There are only only 2 data groups: i.e. the compression key and the page data Case 2: There are <p> + 1 data groups: i.e the compression key, and data for <p> pages Case 3: There are \ <n> SUM | <p(i)> + 1 data groups: /i = 1 i.e., the compression key, and the sum of all of the pages from all of the sub-directories V. Data groups The first data group is always the cypher. Each subsequent data group represents a page of music. Each page data group begins with three header fields. Field 1: byte 1: byte length of field bytes 2..: name of file (for expansion purposes) Field 2: 4 bytes: number of data records in file Field 3: 4 bytes: length of data in bits. This field is required, because the compression is binary. If this description of the CFT format seems confusing, don't worry about it. We repeat what we said earlier; you probably will never have recourse to look inside one of these files. ──────────────────────────────────────────────────────────────────