Date: Wed, 9 Mar 94 16:14:20 PST
From: awiggins@sdcc5.UCSD.EDU (Adam Wiggins)
Subject: Re: Need CMF format
Newsgroups: rec.games.programmer

>  I need the format of CMF files, particularly the FM instruments part.
>Thanks in advance.

CMF consists of 3 different block structures: header block, instrument block
and a music block.

                        Header Block.

Offset         Description

00-03          File ID'CTMF'
04-05          Version # (currently 1.10)
06-07          Offset of instrument block from start of file
08-09          Offset of music block from start of file
0A-0B          Ticks per quarter note (default=120)
0C-0D          Clock ticks per second (default=96)
0E-0F          Offset of music title from start of file (0=none)
10-11          Offset of composer name (0=none)
12-13          Offset of remarks (0=none)
14-23          Channel-in-use table (16 bytes long)
24-25          # of instruments used
26-27          Basic tempo
28-            Title, composer and/or remarks


                Instrument Block

Each instrument block is 16 bytes long. 

Offset         Description

00             Modulator characteristic
01             Carrier characteristic
                   bit 7    Pitch Vibrato
                       6    Amplitude Vibrato
                       5    Sustaining Sound
                       4    Envelope Scaling
                       3-0  Frequency Multiplier
02             Modulator Scaling/Output Level
03             Carrier Scaling/Output Level
                  bit 7-6  Level Scaling
                      5-0  Output Level
04             Modulator Attack/Delay
05             Carrier Attack/Delay
                   bit 7-4 Attack Rate 
                       3-0 Delay Rate
06             Modulator Sustain Level/Release Rate
07             Carrier Sustain Level/Release Rate
                   bit 7-4  Sustain Level
                       3-0  Release Rate
08             Modulator Wave Select
09             Carrier Wave Select
                   bit 7-2 (all cleared)
                       0-1 Wave Select
0A             Feedback/Connection
                   bit 7-4 (cleared)
                       3-1 Modulator Feedback   
                       0   Connection
0B-0F          Not used (Reserved)

  
                        Music Block

The music block is single track, polyphonic, with a max of 16 channels.
It adheres to the Standard Midi File format. It is like: 
 
 Music block = <delta time> <Midi event> <delta time> <Midi event>...

 where:       Delta time = amount of time before Midi event (in ticks)

              Midi event = any Midi channel message

Here is where the book gets foggy. Some Midi events are Control Change events
but it doesn't say if all are like that. These are the only ones discussed:

Control Number       Control Data
   66h               1-127 (Used as markers in music)
   67h               0-Melody mode
                     1-Rhythm mode

I don't know of the 0 or 1 are bits or follow the Control Number but it
appears that there will be a 66h then a number between 1 and 127 
designating seminote length (1 seminote = 1/128 of a tick or something)
or a 67h and a 0 or 1 to determine the mode. In Rhythm mode, the last 
5 channels are:

Channel      Rhythm
12           Bass Drum
13           Snare
14           Tom-tom
15           Top-cymbal
16           High-hat

Control Number      Control Data
   68h                0-127 (Changes pitch upward by the # of 1/128 seminotes.
                             0=Cancel pitch change)

   69h                0-127 (Changes pitch downward by the # of 1/128 
                             seminotes. 0=Cancel pitch change)


Sorry about the ^M's.

...Boone

�