This article has Japanese translations that need to be checked for correctness and have the Japanese portion removed.

This explains the structure of the SNES Capcom Sequence format / Capcom SPC format. Used by many Capcom games, this document focuses on Mega Man X but older games such as Super Ghouls 'n Ghosts and probably others should be similar if they use the same engine.


Capcom Sequence Format

; song pointer
ff00: dw $b000
; starting point for each track (8ch,7ch,6ch,...)
b000: dw $c000,$c100,$c200,$c300,$c400,$c500,$c600,$c700
; sequence data / 8ch
c000: ; voice cmds to playback...
  • Capcom Sequence format uses big-endian order, keep this in mind.
  • The most important channel is 8ch, it should be processed first as shown in the figure above.



Will it be played on any form of data representation, assembly reveals a pseudo-I. Apart from the above characteristics, I think a very common structure. It feels like the song list, somewhere along in the old and new seems to be slightly different. Is there such as how to distinguish between music and sound effects, for this area is not well investigated.

Voice Bytes


Vbyte Friendly Name Arguments
$00 Toggle Triplet
$01 Toggle Portamento
$02 Set Dot(ted Note)
$03 Toggle 2-Octave Up
$04 Set Triplet / Portamento / 2-Octave Up Directly [xx]
$05 Tempo [xx yy]
$06 Duration Rate [xx]
$07 Volume [xx]
$08 Instrument [xx]
$09 Octave Correction [xx]
$0A Global Transpose [xx]
$0B Per-Voice Transpose [xx]
$0C Tuning [xx]
$0D Portamento Time [xx]
$0E-11 Loop #1-4 [xx yy zz]
$12-15 Loop Break #1-4 [xx yy zz]
$16 Jump [xx yy]
$17 End of Track
$18 Pan [xx]
$19 Main Volume [xx]
$1A LFO Parameter [xx yy]
$1B Echo Parameter [xx yy]
$1C Echo On / Off [xx]
$1D Release Rate [xx]
$1E (Unknown) [xx]
$1F (Unknown) [xx]
$20-FF Note

Note ($20-FF)

  • Vbyte itself means the length and key of the note.
  • • Higher 3-bit is for duration (See the duration table below, also, see $00 and $02 for Triplet and Dotted Note).
  • • Lower 5-bit is for key, means "rest" when it's 0b00000 (to calc actual key for note, see also $03 and $09).
  • • • key = lower5bit + ($03-octUpFlag ? 24 : 0) + ($09-octaveCorrection * 12) + $0a-globalTranspose + $0b-voiceTranspose;
  • "Dotted Note" flag is cleared after it's processed.
  • There's no event just for tie, use portamento vcmd $01 for it.
  • See also $06 for quantize.
1(l64) 2(l32) 3(l16) 4(l8) 5(l4) 6(l2) 7(l1)
Normal 3 6 12 24 48 96 192
Dotted 0 9 18 36 72 144 0
Triplet 2 4 8 10 20 40 80






The length represents the height of the sound itself and the command byte. It's beautiful if you know, strangers are just a little tedious explanation. Mega Man 2 audio data similar to that just because some may want to look this one.

The length of the sound is represented by three bits. Because when 0b000 command, used to note the value of 1 to 7. As stated in the above table, the seven whole notes, half notes ... I have six 64-minute one note. If the notes prior to the emergence of command $02 is the dot with a flag (which is processed at the point with the note is released.) As in the triplet is $00 (which is not clear the flag after processing). If both are specified, the processed first with a point (not that data is not 作Rubeki). Quantization and staccato specified in the $06.

Pitch is represented by the lower 5 bits. Raised one semitone value from 0 to 31, when the rest are 0. It's $03 2 octave correction, $09 octave correction (and transpose) is a plus, you actually pitch.

The command includes not only tie, $01 portamento is meant to express command.

Toggle Triple ($00)



Toggle the triplet flag. See Notes.

Toggle Portamento ($01)



Toggle the portamento flag. The sound was pronounced portamento on the line is encountered when the sound stop process. The subsequent sound is rung only on the pitch without changing the pronunciation again. Tie represents the same sound can be used between.

Set Dot(ted Note) ($02)



Turns the dotted flag on, but not off. See Notes.

Toggle 2-Octave Up ($03)



Reverse the flag rose two octaves. See Notes.

Set Triplet / Portamento / 2-Octave Up Directly ($04)

  |= $08 - 2-Octave up (vcmd $03)
  |= $20 - Triplet     (vcmd $00)
  |= $40 - Portamento  (vcmd $01)



Set the flags at once. Other flag bits should be masked because it does not reflect.

Tempo ($05)

bpm = $xxyy * 60000000 / 196608000 ?
  196608000 = (timer0) 8ms * 48 * 512 (just a guess)



Set the speed of the song playing. The value is specified in two-byte value. The formula appears to approximate as described above.

Duration Rate ($06)

 xx/256 = duration rate



Quantize setting. The more time is reduced to a value less pronounced.

Volume ($07)



Set the volume of the channel.

Instrument ($08)



Set the tone played.

Octave Correction ($09)

xx should be $00-07



The octave correction. See Note. I think the value is kept to a range between 0 and 7.

Global Transpose ($0A)

xx = semitones (signed)



[xx] raises the pitch of all channels playing (can also specify a negative number.)

Per-Voice Transpose ($0B)

xx = semitones (signed)



Increase the pitch plays a single-channel [xx] (can also specify a negative number.)

Tuning ($0C)

xx = signed, make the pitch xx/128 semitones? higher.



Slightly alters the pitch. The semitone is equivalent to perhaps 128 (can also specify a negative number.)

Portamento Time ($0D)



Specifies the portamento time spent, xx. The unit is not clear, but will slowly change the pitch higher.

Loop #1-4 ($0E, $0F, $10, $11) / Loop Break #1-4 ($12, $13, $14, $15)

xx   = count
yyzz = destination address.
"Loop"       = "jump (loop), for xx times".
"Loop Break" = "jump (break), if it's the last time of the loop".
Loop #1 and Loop Break #1 share the repeat count. Loops #2, #3 and #4 as well.



Instruction for repetition. One commands to jump to a specified number one command that is only the final loop jump. The four types that are available means that each counter is independent (not independent per channel.) I think I try to create specifications that trait performance data.

Jump ($16)

xxyy = destination address.



The unconditional jump. Used primarily in the loop of music.

End of Track ($17)



Means the end of the single channel performance data.

Pan ($18)

xx (signed)



Set the location of the sound side. Negative left, center, with 0 being a positive right.

Main Volume ($19)



Specifies the volume of the entire song played.

LFO Parameter ($1A)

xx = type
yy = value
Type Description
$00 Vibrato Depth (Pitch Modulation)
$01 Tremolo Depth (Volume Modulation)
$02 LFO Speed
$03 Reset LFO Per Note (Non-Zero = yes, Zero = no)




Sets the LFO. Vibrato or tremolo used to take out.

$03 set in flags, for example, Mega Man X music has been used in previous Sigma (separate note, not by applying a slow tremolo, crescendo and Dekureshendo perform repeat play.)

Echo Parameter ($1B)

xx = ignored?
yy = preset #



Set the main echo. By specifying a preset number, MVOL, EVOL, ESA, EDL, EFB, FIR is set. If you do not particularly think that the state take over the song had been played before. Mega Man X music of this story, not of this command, the command has only appeared in the first Capcom logo.

Echo Toggle ($1C)

xx = Non-Zero for Echo On, Zero for Echo Off (just works for current channel).



Specifies whether a single channel echo.

Release Rate ($1D)

xx = $ 00 - $ 1f (GAIN exponential decrease parameter)



Specifies the time after the attenuation of sound pronunciation. The lower the sound lasts.

(Unknown) ($1E)

Does nothing in Mega Man X or Super Ghouls 'n Ghosts.



The command is meaningless game, the game seems to be code. However, do not seem to rarely used.

(Unknown) ($1F)

Does nothing in Mega Man X or Super Ghouls 'n Ghosts.



The command is meaningless game, the game seems to be code. However, do not seem to rarely used.

Translated and expanded upon from