Sonic QX

From Sonic Retro


This page describes an obsolete hacking tool that should not be used for new hacks/projects or with new disassemblies/tools.
This page (and associated files) is being kept for historical purposes only, as it documents and archives the history of the Sonic scene.

Sonic QX
Category: Music editor
System: Microsoft Windows
Supported Games: Sonic 2 Simon Wai prototype
Credits: saxman

Sonic QX is a music editor for the Sonic 2 Simon Wai prototype by saxman. Until the release of this tool, music had not been a big focus in Sonic ROM editing. Sonic QX changes this, making it possible to import General MIDI files, import and modify Yamaha DX and TX voices, and more.

Sonic QX has many tools built into it to allow a user to edit different features of music in the Simon Wai prototype:

  • Voice Manager
  • Voice Editor
  • Channel Setup
  • Drum Editor
  • Track Editor

Among these tools, all of them except the voice editor are accessible directly from the main startup screen. The voice editor is accessed from within the voice manager.

The YM2612 is a Yamaha DX synthesis chip used in the Sega Genesis/Mega-Drive. It is backwards compatible with many of Yamaha's DX synthesizers. Therefore, programming for the YM2612 is very similar to programming for a Yamaha DX11, DX21, DX27, DX27S, DX100 and/or TX81Z.

Download.svg Download Sonic QX
File: Sqxpack.7z (702 kB) (info)
Current version: build 15 + dev pack


Voice Manager

The voice manager allows voices, or instruments, to be imported into the game from an external file called a bank. Voices can be also exported from the game into a YMX bank. The YMX bank is a special bank format designed specifically for Sonic QX. The user can also develop their own voices.

Edit Voice: This tool allows the user to modify the voice selected in the ROM list for the selected song.

Load Bank: This will request an external voice bank. Above this button is a drop-down menu with four choices. These are the bank formats. Which of these is selected will determine what type of bank that can be loaded. The user can load YMX, YM2612 register dump (Genecyst), Genecyst savestate, and Yamaha DX11 / DX21 / DX27 / DX27S / DX100 / TX81Z system exclusive banks.

Save Bank: This will only work correctly if a YMX formatted bank is being used. Changes can be saved to the YMX bank under the same or a different name.

New Bank: A clean YMX bank can be made, with no voices loaded. This is useful for exporting voices from the ROM.

Import: Sonic QX allows a voice from any of the four bank formats supported to be swapped with another voice in the ROM. Simply select the voice from the desired external bank. Then select the voice in the ROM you wish to replace, and click the "Import" button.

Export:You can not only import voices, but you can export them too. Currently, Sonic QX only allows you to export a voice from the ROM to a YMX bank. Simply select the voice in the ROM you wish to put into your YMX bank and click the "Export" button. It will ask you to name the voice. You are allowed a maximum of ten characters. Once you have exported all the voices you want, you will want to save the bank.

Calculate KVS:When this is checked, Sonic QX will read the KVS (keyboard velocity scale) values from the external bank and apply volume changes to each operator in the voice accordingly when the voice is being exported from the external bank to the ROM. KVS values are only available in Yamaha DX11 / DX21 / DX27 / DX27S / DX100 / TX81Z system exclusive banks. "Calculate KVS" will be disabled for all other bank formats.

Voice Editor

The voice editor is a very unique part of Sonic QX. It will enable you to modify the voices by hand. You can also view the envelope generator which contains the information for attacking a note at a specified rate, decaying in amplitude at another rate, and releasing the note. You can use the '+' and '-' buttons to increase and decrease the value that you have clicked on to change.

ALG:"Algorithm" – This is a special arrangement of the YM2612's four operators. The carrier is the operator(s) at the very bottom of the algorithm. Modulators are above the carriers.

FB:"Feedback" – This affects operator 4 only. It tells the operator to continue to feed the output. The higher the value, the more feedback it will produce.

DET:"Detune" – If you want to make a minor change in the pitch of the tone to make it sound more natural, you can sharpen it or flatten it by detuning.

CRS:"Coarse Frequency" – This is known also as the multiplier. It will multiply the frequency of the tone by the specified amount. This is a ratio change. 0.5 will cut the frequency in half, while 1 will allow it to remain unchanged.

RS:"Rate Scale" – To make the voice seem more realistic, rate scaling can be applied. This makes the higher notes play shorter, while the lower notes sustain longer. The higher the rate scale value is, the more it affects the higher notes. This is especially useful for guitar voices.

AR:"Attack Rate" – The attack rate is the time it takes for the note to reach full volume when it begins. Higher values will attack quicker. Take notice that setting the value to 0 will cause problems as it is an infinite loops (the note will never play). This is one way of disabling the operator.

D1R:"Decay 1 Rate" – This will define how fast the note decays from the maximum output to the output of D1L. Higher values will decay quicker.

D1L:"Decay 1 Level" – This defines the end-point of D1R. D1L is ultimately an output value. 15 is the floor, meaning that D1R will continue to decay until there is absolutely no sound and disabling D2R altogether.

D2R:"Decay 2 Rate" – After D1R is finished decaying, D2R will begin. This too simply defines how fast the amplitude decays. It decays from D1L to the sound floor.

RR:"Release Rate" – The descriptions above are all correct, but will only apply if the note is held. When the note is released, a different decay rate comes into play. This is the rate at which the sound decays from the point the note is released, to the sound floor.

AME:"Amplitude Modulation Enable" – When the value is 1, modulating operators will not only affect the frequency of the output, but the amplitude as well.

OUT:"Output" – For carriers, this is the volume of the tone. For modulators, this is the amount of modulation that is applied to the operator that follows it. Output ranges from 0dB to -95.25dB.

Estimated Output:This is simply the RMS voltages of the carriers added. This is simply an estimate and will not 100% accurate.

Init Voice:When this button is clicked, all the values will be set to define what we call the "init voice". This is a voice that is used by many voice programmers to begin constructing a brand new voice. The init voice is thought of as a 'basic setting'.

At the top of the screen, you will notice a graph. This represents the AR, D1R, D1L, and D2R values. It gives information of what the values rates look like. When you move the mouse cursor over the area, it will give you the period (time in seconds) and the output (in decibels) of the region. The graph will only show this information for the operator selected. Where it says "Oscillator 1", you may change this to display the graph for other operators. This information is known as the envelope generator (EG).

You will also see a drop-down menu with the options Registers and Descriptions. "Registers" is what you want it on to modify values. If you forget what something is, you can move it to "Descriptions" to see what everything is.

Channel Setup

The channel setup is a nice feature that will allow you to 'mix' the channels. In addition you can also transpose the key of a track, and you can modify the tempo of the song. Remember that the voices that a channel plays will affect the output, so mix the sound carefully. Simply click on the value you want to change and use the '+' and '-' buttons to modify it.

Middle C: This is the 'nominal' note. Changing this will transpose the track into a different key. Each number represents a half tone. 0 is assumed to be 'C', so 1 is 'C#', 2 is 'D', etc.

Volume: This is the total output of the sound. 0dB will make the voice play as loud as its total output volume is defined.

Tempo: If you're not familiar with music terms, tempo is simply the speed of the music. Higher tempo values will make the music play faster.

Drum Editor

The drum editor allows you to export the DAC samples (drum samples) from the ROM to external WAV files. Although it may take a while to export them, it does an accurate job. The drum editor cannot properly import WAV files into the game. For now, only use it for purposes of exporting samples.

Import:This attempts to import the WAV file in the text box below, but because it doesn't do an accurate job, it is recommended that you leave this button alone.

Read:Before exporting a sample, you must first have Sonic QX read the information. Select the sample you want to have it read from the drop-down menu below this button. Then click the button and it will begin reading.

Save:Once the sample has been read, you can click this button to save the information into an external WAV file.

At the top of the screen, you will see an area covered in black. When reading a sample, you will see green lines appearing here. The lines represent the samples. It is not a 100% accurate representation of the actual wave forms, but it comes pretty close and shows where the sound level is up and when it is down.

Track Editor

This is the most popular feature in Sonic QX. The track editor allows you to import General MIDI sequence tracks into the game. GM tracks must be monophony (one note played at a time) to properly import. Sonic QX doesn't support track numbers greater than 16, and the note range is limited from C-1 to A#6 (in Cakewalk, these notes are labeled C1 and A#8). Sonic QX currently ignores volume, velocity, modulation, tempo changes, etc. It will however detect patch changes and will ask you to specify a voice when these changes are detected.

Divide Timing By:Because GM timing values are based on a much larger range in time, it makes sense to divide it by a specific number so that it will play at a decent tempo. The higher the dividing value is, the shorter the notes and rests will become. This will ultimately increase the tempo. A dividing value between 8 and 16 usually works best.

Import Track:This is the track number that you want to import from the General MIDI file. Sonic QX will only import tracks 1 through 16.

Import GM:When this button is clicked, Sonic QX will take the GM track you have specified and it will use it to replace the channel selected at the right. When a dialog pops up with a number typed in it, it is asking you to specify a voice number. The voice number will represent a voice from a YMX bank which will be requested when you go to save your imported song. 0 represents the first voice, 1 represents the second, and so on. Finally, when it reaches the end of the track, it will ask for a rest time between 0 and 254. Since Sonic QX can't properly loop tracks without getting out of sync, a temporary fix is to put a rest at the end of the track. You may have to experiment with different times to figure out what keeps two or more tracks in sync when they loop. If one value isn't right, then simply import the track again and try a different number. Save the ROM and test it again.

When saving, Sonic QX will ask for a YMX bank. Simply type the name of a YMX bank you wish to use and click "OK". All the voices in the bank will then be appended to the song in the order that they are listed in the bank. You should always have your YMX bank prepared prior to the import of your GM file. If you by chance don't have one ready, you can use "saxman.ymx" which can be found in the Sonic QX program directory. It includes five Yamaha TX81Z voices. They include GrandPiano, ElectroPno, Small Pipe, Trumpet81Z, and ElecBass 1.

If songs after the one you have modified are corrupted, then your song was simply too big to fit into the space available to it. Sonic QX cannot move songs to free up space yet. For now, you will simply have to be careful of how big you make your song.

DAC Conversions:

  • Kick C-1 (Cakewalk C1)
  • Snare C#-1 (Cakewalk C#1)
  • Clap D-1 (Cakewalk D1)
  • Scratch D#-1 (Cakewalk D#1)
  • Timpani E-1 (Cakewalk E1)
  • Tom F-1 (Cakewalk F1)

These conversions are used when you want to put a drum track into the ROM. For example, if you want a snare, you can use C#-1 (for Cakewalk, it is labeled C#1). Sonic QX will eventually be able to import drum tracks without having to use this manual conversion. For now, this is the way it must be done.


  • Sonic QX does not support filenames with spaces. For example, the path "C:\My Documents" cannot be correctly accessed. To work around this shortcoming, the older 8.3 filename convention can be used. "C:\MYDOCU~X", where X is a number, is valid.
  • "Invalid track." – You have specified a track number that is less than 1.
  • "Tracks above 16 are not supported." – Sonic QX only supports tracks 1 through 16. Additional tracks may be supported later. You probably shouldn't need more than the limit anyway.
  • "Illegal MIDI file: Not a MIDI file." – The header in the file wasn't a MIDI file header. Sonic QX will assume that it is not a MIDI file.
  • "Illegal MIDI file: Not a type '1' sequence." – There are three main General MIDI formats. Sonic QX doesn't support all of them. If the file isn't format 1, it will return this error.
  • "Illegal MIDI file: MIDI time code larger than 32 bits." – Your General MIDI file is most likely corrupted. The MIDI time code can be a maximum of 32 bits. If it is greater than 32 bits, Sonic QX will refuse to continue working with the file.
  • "Illegal MIDI file: Unknown status byte." – If you get this error, then Sonic QX is most likely trying to read a non-status byte as a status byte for some reason. It could also be that your MIDI file is corrupted.
  • "Illegal MIDI file: Voice number is greater than 127." – Sonic QX will only support 128 voices. If your MIDI file is using a voice number that isn't in this range, you will get this error.
  • "Illegal MIDI file: Note is lower than C-1" – Sonic QX will support 95 different notes. This is less than what the MIDI standard supports. If your note is lower than C-1 (C1 for Cakewalk), you will see this error. On rare occasions, you will get this error for no valid reason. Try to import your track again to be sure that Sonic QX didn't make an error.
  • "Illegal MIDI file: Note is greater than A#6" – If your MIDI file uses a note that is higher than A#6 (A#8 for Cakewalk), you will see this error. Like the previous error, Sonic QX may report this error for an invalid reason. Try to import your track again to be sure that Sonic QX didn't make an error.
  • "Illegal MIDI file: Track title length greater than 127 bytes." – Track titles can only use up to 127 characters. If more characters are used, Sonic QX will report this error. There really isn't much reason to have a track title greater than 127 characters anyway.
  • "Illegal MIDI file: Unknown sub-status bytes." – Your MIDI file is most likely corrupted if you see this error. There's a small chance that Sonic QX is reading the file wrong, but this is not likely the case.