Skip to content
Tool for importing, exporting and editing music to/from Sonic 1 SMPS format
Branch: master
Clone or download
Latest commit 0bc0286 Apr 28, 2019

README.md

Sonic 1 Music Gen

Tool for importing and exporting Sonic 1 SMPS music files, as well as ideally composing new music. No playback features are planned.

Sonic 1 stores its music in a format which has been labeled by romhackers as "SMPS", Sample Music Playback System. This format contains the following information:

  • A general song header
  • Specifics about which channels are in use. These channels are:
    • 6x FM (frequency modulation) and DAC (PCM playback?) on Yamaha YM2612
    • 3x PSG (Programmable Sound Generator) on SN76489
  • Header for each channel
  • Pattern information, much like in most music tracker formats
  • FM voice synthesis table data

Details about the format can be found in the following places:

Compiling

  • Get Qt Creator, version 5 or later
  • Get a working modern compiler
    • qmake sonic1_music_gen.pro && make
    • alternatively open the .pro with Qt Creator, run qmake, compile

Notes on usage

There are limitations as I haven't bothered coding full SMPS support

  • FM pattern 1 must be a DAC channel. If you don't need it, write a single F2 coordinate flag in that pattern. When importing, this is done by default if FM channel 1 is empty.
  • Hex code meanings in the patterns are in the file hex.md
  • The FM voice parameters are complicated to use unless you are familiar with FM synthesis (I'm not). I recommend using Deflemask for creating instruments and then copying the instrument settings into this tool. However, since SMPS formats differ, there a few caveats:
    • Deflemask uses the format where operators are ordered 1,2,3,4 while Sonic 1 SMPS uses 1,3,2,4. So when copying FM voice settings from Deflemask into this tool, flip operators 2 and 3.
    • The FMS setting does a vibrato, which is currently not supported
    • AMS setting is not supported (not sure what this is)
    • See the below image to see Deflemesk mappings into this tool. The unlinked controls aren't supported

Deflemask mappings

You can’t perform that action at this time.