CutterCross
Active member
INTRODUCTION:
Okay, this is going to be a big one.
I've seen a ton of information about NESmaker's sound capabilities scattershot all over the forum. Some of it is outdated/incorrect, and I wanted to make this topic to be a sort of definitive list of limitations/quirks and rules to follow creating music and SFX with NESmaker. I have learned a lot composing all sorts of music/SFX for this software and optimizing the music for Mystic Searches. Keep in mind that this list is for NESmaker 4.1.5 (and 4.5.6.), so older versions may not have exactly the same limitations as this list. So with all that out of the way, let's get started.
For more information regarding Music and SFX for NESmaker projects, watch the official "Zero to 8-Bit Hero" tutorial on Music and SFX by The New 8-Bit Heroes:
View: https://www.youtube.com/watch?v=Qt3Gd9pTcbE
NESmaker uses a modified version of the Gradual Games Sound Engine, AKA GGsound. The following list of features come from GGsound's official webpage.
GGSOUND'S FEATURES (STRAIGHT FROM THE OFFICIAL GGSOUND WEBPAGE):
- Square [Pulse] 1, 2, Triangle, Noise, and DPCM channels *
- Volume, Arpeggio, Pitch and Duty envelopes
- Hi-Pitch envelopes are NOT supported
- Looping envelopes at an arbitrary loop point
- Speed and Tempo
- Looping with the Bxx (must be present in all channels, using unique patterns) command **
- Note cuts
- Tempo and pitch adjustment for NTSC, PAL and Dendy
- Multi-song export
- Sound effects on two channels
- Pause/unpause
- All 87 audible notes in FamiTracker
- 128 of each type of envelope ***
- 128 songs ***
- 128 sound effects ***
- 256 byte long envelopes ***
Source: http://www.gradualgames.com/p/sound-engine.html
It's important to note that GGsound does NOT support note effects (aside from Bxx) or the channel volume column in FamiTracker. Anything written there will be ignored in the compiled ROM.
Also keep in mind that Releasing envelopes at an arbitrary loop point is NOT supported.
ALSO NOTE: This should be obvious, but GGsound does NOT support famicom expansion audio of any kind. The North American and PAL region NES (unmodified) systems cannot take advantage of expansion audio in the first place, and VERY few famicom games even took advantage of expansion audio (aside from FDS).
NESMAKER-SPECIFIC QUIRKS/LIMITATIONS:
* DPCM channel is NOT supported by default, and can only be re-implemented by following this topic:
** Bxx effect is NOT supported by default, and can only be re-implemented by using GGsound's official ft_txt_to_asm Python script or the GGsound ft_txt_to_asm executable on this forum. The latter of which can be found here:
*** Limited to 64 instruments by default, as well as 64 songs and SFX entries combined.
*** The amount of songs/SFX you will be able to use will also be limited by the ROM space you have to work with, and how complex/long your songs and SFX are.
BEST PRACTICES FOR COMPOSING MUSIC/SFX:
- It's been reported by The New 8-Bit Heroes that putting a Pulse channel SFX only on Pulse Channel 1 can cause some issues with playback. It's recommended that any single-channel Pulse SFX be located on Pulse channel 2.
- It's recommended to keep the Tempo setting at 150 BPM, while instead using the Speed setting to change how fast/slow the song plays.
- While note cuts are supported, it's also a good idea to create a "silent" instrument (an instrument with a volume envelope of 0) to act as a note cut, in case any issues arise with using regular note cuts.
- For SFX, it is a good idea to add a "silent" instrument note before the note cut to make sure the SFX ends properly.
- Do NOT delete instruments in the middle of your instrument bank without replacing them! If there is a gap in the instrument numbers such as this: (00, 01, 02, 04,) NESmaker will go haywire and will prevent the file from importing.
- Make sure your frames for each channel in the frame editor go in order. (For one channel, something like this: 00, 01, 02, 03... will work. Or if you're repeating frames, something like this: 00, 00, 01, 01... will also work. Do NOT do something like 00, 02, 01, 03...)
- For adding pitch bends by looping the Pitch envelope, there is NO lower/upper bounds handling like there is in FamiTracker! Once the lowest pitch is reached it will loop back to the highest pitch. Likewise, once the highest pitch is reached it will loop back to the lowest pitch. Keep this in mind when using large pitch bends.
- Avoid using notes lower than A-0 on the Pulse and Triangle channels. In FamiTracker, the lowest audible note on those channels is A-0, and all notes below A-0 sound identical to each other. However, these lower notes do not behave the same way in GGsound. Using those notes will cause their pitch to behave incorrectly.
- Blank note patterns following other distinct note patterns will prevent your music file from importing into NESmaker.
- Sustained notes do not carry over frames when played through GGsound. You'll have to design your music around this.
- On the Triangle channel, using a silent instrument (volume envelope of 0) with a pitch significantly higher than the last played pitch will cause an audible click during playback. This may be something you want to avoid or embrace in your sound design.
BEST PRACTICES FOR SAVING ROM SPACE:
- Putting more notes in your song will take up more ROM space, but keep in mind that blank spaces do NOT count towards ROM space!
- It's best to create instruments with longer envelopes (putting fewer notes down as a result) than it is to create instruments with simpler envelopes (putting more notes down as a result). More notes take up more ROM space than longer envelopes.
- More instruments DO take up more ROM space, but the amount is trivial compared to the amount of space taken up by more note data.
- Repeat frames as much as you can. The small amount of ROM space it takes to repeat another frame is trivial compared to the massive amount of ROM space taken by creating a new frame with new notes.
- Cram your notes together if you can, and run the song at a slower speed to keep the same tempo. This can save the tiny amount of ROM space taken up by adding/repeating a frame, but it's rare that you'll have to resort to this method to free up space.
OTHER THINGS OF NOTE (AS OF NESMAKER 4.5.9):
- The 09 ORDER limitation that NESmaker had in the past has appeared to be gone. You can write songs longer than 10 frames now.
- Noise channel arpeggios don't seem to be inverted anymore.
- NESmaker can be fickle with filenames and song names when trying to import. Make sure that your filenames and song names only use letters (combinations of uppercase or lowercase is fine) and numbers, and don't use spaces or weird characters.
- Instrument names can have spaces, but they cannot START with a number. They should otherwise adhere to the previous naming rules.
- For naming SFX, make sure to label them as "sfx_" followed by the SFX name. The "sfx_" part of the name must be lowercase. Use the same naming rules as previously stated.
- Older versions of NESmaker can have some different quirks/limitations than what's been shown here.
If any of this information is incorrect/outdated, or if there is anything additional you've found regarding NESmaker's music quirks/limitations, please let me know.
Okay, this is going to be a big one.
I've seen a ton of information about NESmaker's sound capabilities scattershot all over the forum. Some of it is outdated/incorrect, and I wanted to make this topic to be a sort of definitive list of limitations/quirks and rules to follow creating music and SFX with NESmaker. I have learned a lot composing all sorts of music/SFX for this software and optimizing the music for Mystic Searches. Keep in mind that this list is for NESmaker 4.1.5 (and 4.5.6.), so older versions may not have exactly the same limitations as this list. So with all that out of the way, let's get started.
For more information regarding Music and SFX for NESmaker projects, watch the official "Zero to 8-Bit Hero" tutorial on Music and SFX by The New 8-Bit Heroes:
NESmaker uses a modified version of the Gradual Games Sound Engine, AKA GGsound. The following list of features come from GGsound's official webpage.
GGSOUND'S FEATURES (STRAIGHT FROM THE OFFICIAL GGSOUND WEBPAGE):
- Square [Pulse] 1, 2, Triangle, Noise, and DPCM channels *
- Volume, Arpeggio, Pitch and Duty envelopes
- Hi-Pitch envelopes are NOT supported
- Looping envelopes at an arbitrary loop point
- Speed and Tempo
- Looping with the Bxx (must be present in all channels, using unique patterns) command **
- Note cuts
- Tempo and pitch adjustment for NTSC, PAL and Dendy
- Multi-song export
- Sound effects on two channels
- Pause/unpause
- All 87 audible notes in FamiTracker
- 128 of each type of envelope ***
- 128 songs ***
- 128 sound effects ***
- 256 byte long envelopes ***
Source: http://www.gradualgames.com/p/sound-engine.html
It's important to note that GGsound does NOT support note effects (aside from Bxx) or the channel volume column in FamiTracker. Anything written there will be ignored in the compiled ROM.
Also keep in mind that Releasing envelopes at an arbitrary loop point is NOT supported.
ALSO NOTE: This should be obvious, but GGsound does NOT support famicom expansion audio of any kind. The North American and PAL region NES (unmodified) systems cannot take advantage of expansion audio in the first place, and VERY few famicom games even took advantage of expansion audio (aside from FDS).
NESMAKER-SPECIFIC QUIRKS/LIMITATIONS:
* DPCM channel is NOT supported by default, and can only be re-implemented by following this topic:
** Bxx effect is NOT supported by default, and can only be re-implemented by using GGsound's official ft_txt_to_asm Python script or the GGsound ft_txt_to_asm executable on this forum. The latter of which can be found here:
*** Limited to 64 instruments by default, as well as 64 songs and SFX entries combined.
*** The amount of songs/SFX you will be able to use will also be limited by the ROM space you have to work with, and how complex/long your songs and SFX are.
BEST PRACTICES FOR COMPOSING MUSIC/SFX:
- It's been reported by The New 8-Bit Heroes that putting a Pulse channel SFX only on Pulse Channel 1 can cause some issues with playback. It's recommended that any single-channel Pulse SFX be located on Pulse channel 2.
- It's recommended to keep the Tempo setting at 150 BPM, while instead using the Speed setting to change how fast/slow the song plays.
- While note cuts are supported, it's also a good idea to create a "silent" instrument (an instrument with a volume envelope of 0) to act as a note cut, in case any issues arise with using regular note cuts.
- For SFX, it is a good idea to add a "silent" instrument note before the note cut to make sure the SFX ends properly.
- Do NOT delete instruments in the middle of your instrument bank without replacing them! If there is a gap in the instrument numbers such as this: (00, 01, 02, 04,) NESmaker will go haywire and will prevent the file from importing.
- Make sure your frames for each channel in the frame editor go in order. (For one channel, something like this: 00, 01, 02, 03... will work. Or if you're repeating frames, something like this: 00, 00, 01, 01... will also work. Do NOT do something like 00, 02, 01, 03...)
- For adding pitch bends by looping the Pitch envelope, there is NO lower/upper bounds handling like there is in FamiTracker! Once the lowest pitch is reached it will loop back to the highest pitch. Likewise, once the highest pitch is reached it will loop back to the lowest pitch. Keep this in mind when using large pitch bends.
- Avoid using notes lower than A-0 on the Pulse and Triangle channels. In FamiTracker, the lowest audible note on those channels is A-0, and all notes below A-0 sound identical to each other. However, these lower notes do not behave the same way in GGsound. Using those notes will cause their pitch to behave incorrectly.
- Blank note patterns following other distinct note patterns will prevent your music file from importing into NESmaker.
- Sustained notes do not carry over frames when played through GGsound. You'll have to design your music around this.
- On the Triangle channel, using a silent instrument (volume envelope of 0) with a pitch significantly higher than the last played pitch will cause an audible click during playback. This may be something you want to avoid or embrace in your sound design.
BEST PRACTICES FOR SAVING ROM SPACE:
- Putting more notes in your song will take up more ROM space, but keep in mind that blank spaces do NOT count towards ROM space!
- It's best to create instruments with longer envelopes (putting fewer notes down as a result) than it is to create instruments with simpler envelopes (putting more notes down as a result). More notes take up more ROM space than longer envelopes.
- More instruments DO take up more ROM space, but the amount is trivial compared to the amount of space taken up by more note data.
- Repeat frames as much as you can. The small amount of ROM space it takes to repeat another frame is trivial compared to the massive amount of ROM space taken by creating a new frame with new notes.
- Cram your notes together if you can, and run the song at a slower speed to keep the same tempo. This can save the tiny amount of ROM space taken up by adding/repeating a frame, but it's rare that you'll have to resort to this method to free up space.
OTHER THINGS OF NOTE (AS OF NESMAKER 4.5.9):
- The 09 ORDER limitation that NESmaker had in the past has appeared to be gone. You can write songs longer than 10 frames now.
- Noise channel arpeggios don't seem to be inverted anymore.
- NESmaker can be fickle with filenames and song names when trying to import. Make sure that your filenames and song names only use letters (combinations of uppercase or lowercase is fine) and numbers, and don't use spaces or weird characters.
- Instrument names can have spaces, but they cannot START with a number. They should otherwise adhere to the previous naming rules.
- For naming SFX, make sure to label them as "sfx_" followed by the SFX name. The "sfx_" part of the name must be lowercase. Use the same naming rules as previously stated.
- Older versions of NESmaker can have some different quirks/limitations than what's been shown here.
If any of this information is incorrect/outdated, or if there is anything additional you've found regarding NESmaker's music quirks/limitations, please let me know.
Last edited: