Back Programming Next

Articles Index

Rotate your screen to landscape mode to view this page.
The CASM is the first Yamaha-chunk in a style file following the MIDI data.

The CASM section holds the Ctab settings and some other settings of the style. Only some of these settings can be done at the keyboard.

In December 1999 I reverse-engineered the original CASM. This was published March 2000.

By the arrival of the first Tyros keyboard the original CASM section format was altered slightly.

These changes were reverse engineered in February 2003. The revised format was published October 25th 2004.

The CASM format was changed radically with the release of Tyros 3 in November 2008. The new format has been applied to later keyboards.

In the following x represents a byte.
No. CASM data Function Hex value       Comment
00 CASM CASM Marker 43 41 53 4d Beginning of CASM Section
01 xxxx CASM Length   Length of the entire CASM section
02 CSEG Section Marker 43 53 45 47 Beginning of CSEG Section within CASM. A CSEG Section holds information about style parts using equal settings.
03 xxxx Section Length   Length of the CSEG section
04 Sdec Parts Marker 53 64 65 63 Beginning of Sdec part within CSEG Section
05 xxxx Parts Length   Length of the Sdec part
06 Main A,Main B etc. Style parts   Style part names of the styles with this setting. Names are separated with commas, but no comma at the end of the part name string.
07 Ctab Channel Marker 43 74 61 62 Beginning of Ctab string
08 xxxx Channel Length   Length of the Ctab string
09 x Source Channel 00 - 0F The source channel in the MIDI part of the style file which holds note information. Valid values are 00 - 0F (= channel 1 - 16).
10 xxxxxxxx Voice Name   Voice name. Always 8 bytes. The voice can be called any name.
11 x Destination Channel 08 - 0F Source channel data must be remapped to a valid destination channel. Valid values are 08 - 0F (= channel 9 - 16).
12 x Editable 00 - 01 01 Channel Read Only - 00 Channel Editable
13 x Note Mute 00 - 0F

1. digit

2. digit

Notes to play (0 = not play)
1.digit = 0 (always)

2.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
     B    1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
     Bb   1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
     A    1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
     G#   1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

3.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
     G    1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
     F#   1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
     F    1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
     E    1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

4.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
     Eb   1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
     D    1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
     C#   1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
     C    1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

Example: 0E A3 means that C C# F G A Bb and B plays. When other notes are pressed the accompaniment is muted.

14 x Note Mute 00 - FF

3. digit

4. digit

15 x Chord Mute 00 - 07

1. digit

2. digit

Chords to play (0 = not play)
1.digit = 0 (always)

2.digit = 3 2 1 0     add 4 if auto start
  1+2+5   1 1 0 0
  sus4    1 0 1 0

3.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
  1+5     1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
  1+8     1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
  7aug    1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
  M7aug   1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

4.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
  7(#9)   1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
  7(b13)  1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
  7(b9)   1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
  7(13)   1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

5.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
  7#11    1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
  7(9)    1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
  7b5     1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
  7sus4   1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

6.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
  7       1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
  dim7    1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
  dim     1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
  m7M(9)  1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

7.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
  mM7     1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
  m7(11)  1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
  m7(9)   1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
  m(9)    1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

8.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
  m7b5    1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
  min7    1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
  min6    1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
  min     1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

9.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
  aug     1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
  6(9)    1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
  M7(9)   1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
  (9)     1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

10.digit= F E D C B A 9 8 7 6 5 4 3 2 1 0
  M7#11   1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
  Maj7    1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
  Maj6    1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
  Maj     1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

Example: 03 FF EF FF F8 means that when playing a Maj chord or a 7sus4 chord the accompaniment is muted.

16 x Chord Mute 00 - FF

3. digit

4. digit

17 x Chord Mute 00 - FF

5. digit

6. digit

18 x Chord Mute 00 - FF

7. digit

8. digit

19 x Chord Mute 00 - FF

9. digit

10. digit

20 x Source Chord 00 - 0B These settings determine the original key of the source pattern (i.e. the key used when recording the pattern). The default, CM7 (the source root is "C" and the source chord type is "M7"), is automatically selected whenever the preset data is deleted prior to recording a new style, regardless of the source root and chord included in the preset data.
Valid Chord Types are: Maj, Maj6, Maj7, M7#11, Madd9, M7(9), M6(9), aug, m, m6, m7, m7b5, m(9), m7(9), m7(11), mM7, mM7(9), dim, dim7, 7, 7sus, 7b5, 7(9), 7(#11), 7(13), 7(b9), 7(b13), 7(#9), M7aug, 7aug, 1+8, 1+5, sus4, 1+2+5
21 x Chord Type 00 - 21
22 x Low / middle limit 00 - 7F Specifies the lowest MIDI note value which is part of the "middle note section". All notes below this note belong to the "low notes section".
If the value of this byte is 0, then the data in the "low notes section" is not used.
23 x Middle / high limit 00 - 7F Specifies the highest MIDI note value which is part of the "middle note section". All notes above this note belong to the "high notes section".
If the value of this byte is 7F, then the data in the "high notes section" is not used.
The following 6 lines are repeated for low, middle and high notes sections.
24 x Note Transposition Rule 00 - 02 NTR specify the transposition rule to be used by the transposition table. Three settings are available:

ROOT TRANS (00): When transposed the pitch relationship between notes is maintained. For example, the notes C3, E3, and G3 in the key of C will become F3, A3, and C4 when transposed to F. Use this setting for parts that contain melodic lines.
ROOT FIXED (01): The note is kept as close as possible to the previous note range. For example, the notes C3, E3, and G3 in the key of C will become C3, F3, and A3 when transposed to F. Use this setting for chordal parts.
GUITAR (02): This is exclusively for transposing guitar accompaniment. Notes are transposed to approximate the chords played with natural guitar fingering.

25 x Note Transposition Table Bass "off":
00 - 0A

Bass "on":
80 - 8A

NTT specify the note transposition table to be used for source pattern transposition. The following table types are available.

BYPASS (00 - 80): No transposition.
MELODY (01 - 81): Suitable for melody line transposition. Use for melody parts such as PHRASE 1 and PHRASE 2.
CHORD (02 - 82): Suitable for chord transposition. Use for the CHORD 1 and CHORD 2 parts when they contain piano or guitar-like chordal parts.
MELODIC MINOR (03 - 83): This table lowers the third scale degree by a semitone when changing from a major to a minor chord, or raises the minor third scale degree a semitone when changing from a minor to a major chord. Other notes are not changed.
MELODIC MINOR 5th Variation (04 - 84)
HARMONIC MINOR (05 - 85): This table lowers the third and sixth scale degrees by a semitone when changing from a major to a minor chord, or raises the minor third and flatted sixth scale degrees a semitone when changing from a minor to a major chord. Other notes are not changed.
HARMONIC MINOR 5th Variation (06 - 86)
NATURAL MINOR (07 - 87)
NATURAL MINOR 5th Variation (08 - 88)
DORIAN (09 -89)
DORIAN 5th Variation (0A - 8A)
ALL-PURPOSE (00 - 80): This table covers both strummed- and arpeggio-played sound.
STROKE (01 - 81): Suitable for stroke-played sound of the guitar. Some notes may sound as if it is muted. This is normal condition when the chord is played on guitar by stroke.
ARPEGGIO (02 - 82): Suitable for arpeggio-played sound of the guitar. Using this table, four notes arpeggio sounds most beautiful.

NOTES
If Bass is "off" values 00 - 0A are used, else if Bass is "on" values 80 - 8A are used. These settings are in the keyboard fingering area.

ALL-PURPOSE; STROKE and ARPEGGIO is only available when NTR (above) is set to GUITAR.

26 x High key 00 - 0B HIGH KEY specify the upper root limit. Chords with a root higher than the specified limit will be played in the octave immediately below the high-key limit. This setting is effective only when the NTR parameter (above) is set to ROOT TRANS.

Example: When HIGH KEY = F.
Root Motion: C C# D F F#
Notes Produced: C3-E3-G3 / C#3-F3-G#3 / D3-F#3-A3 / F3-A3-C4 / F#2-A#2-C#3

27 x Note Low Limit 00 - 7F NOTE LIMIT LOW and HIGH specify the low and high note limits for all notes in the specified part. Notes outside this range are transposed to the nearest octave within the range.

Example: When LOW = C3 and HIGH = D4
Root Motion: C C# D#
Notes Produced: E3-G3-C4 / F3-G#3-C#4 / D#3-G3-A#3

28 x Note High Limit 00 - 7F
29 x Retrigger Rule 00 - 05 RTR (Retrigger Rule) specify how notes held through chord changes will be handled. 6 settings are available:

STOP (00): The note is stopped, and resumes sounding from the next note data.
PITCH SHIFT (01): The pitch of the note will bend without attack to match the type of the new chord.
PITCH SHIFT TO ROOT (02): The pitch of the note will bend without attack to match the root of the new chord.
RETRIGGER (03): The note is retriggered with attack at a new pitch matching the new chord type.
RETRIGGER TO ROOT (04): The note is retriggered with attack at a new pitch matching the new chord root.
NOTE GENERATOR (05): This setting will only be available if programmed in the original style. A designated note is produced with designated pitch, length, and velocity matching the new chord.

... and over from line 24 - 29 for middle notes section; and once more for high notes section.
30*) x 00 or 80 Default value is 00.
If value is 80 there is an extra break voice (like a Crash Cymbal in drum channels) for non-drum channels, when playing the 3- or 4-finger break. The extra break drum voice will sound at time 0 within the break measure.
31*) x 00 or 01 Default value is 00.
If value is 01, then the channel is always a drum channel. In this case lines 33, 34 and 35 have non-00 values and line 30 is always 00.
32*) x 00 Always 00.
33*) x 00 or 18 Default value is 00.
If value is 18, then the channel is always a drum channel. In this case line 31 is 01 and line 34 and 35 has non-00 values.
34*) x Instrument 23 - 50 or 80 Default value is 80.
If line 33 is 18 (= drum channel), then value is in interval 23 - 50. The actual value is the General MIDI Percussion Key Number.
35*) x Volume 00 - 7F Default value is 00.
If line 33 is 18 (= drum channel), then actual value is the volume of the Percussion Instrument, defined in the line above.
36 x End Marker 00 End Marker for this channel
... and over from line 07 for each channel in the CSEG section.
... and now over from line 02 for each CSEG section in CASM
*)
The findings in these lines are still to be verified. In rare cases other values might be present in lines 30, 34 and 35.
This section is from "Style Files - Introduction and Details" by Peter Wierzba and Michael P. Bedesem. The entire document is found here. A must read for style programmers!

If NTR is "Guitar" the following apply

In contrast to other NTRs there is no harmonic relation between source and target notes.

Each source note is mapped to one of the guitar strings. The pitch or harmonic function will be irrelevant.

The mapping of source notes to guitar strings is as follows:
B -> 1st string (high E)
A -> 2nd string (B)
G -> 3rd string (G)
F -> 4th string (D)
E -> 5th string (A)
D -> 6th string (low E)
C# -> a quint above/below
C -> root note

That means you can control exactly which of the six strings should sound at what time.

C and C# will be mapped to the root of an on-bass chord, if parameter BASS is set to on.

It is recommended not to use C, C#, D and E at the same time.

If source notes will be moved by an octave this does not mean that the chord will sound an octave lower/higher.

Rather you can control which chord position on the fretboard will be used:
C2 - B2 -> 1st position
C3 - B3 -> 2nd position
C4 - B4 -> 3rd position
C5 - B5 -> 4th position

As a consequence of the above information, the MIDI channels in the style file having the "Guitar" setting in NTR must be prepared accordingly.
This also means that the style file will not sound right when/if switching between "Guitar" and one of the other NTR settings without editing the MIDI notes.