Extra GGsound Limitations

CutterCross

Active member
So after working with Mihoshi20 with importing music into NESmaker I noticed a few extra constraints the songs needed to play in the engine that weren't mentioned in the NESmaker tutorials or on the GGsound webpage. So I'm going to list them all here for others to see and get caught up to speed. Some were mentioned before, others weren't.


1. Songs must not use the effects column.
2. Songs must not use the channel volume column.
3. Instruments must not use the Hi-Pitch envelopes in the instrument editor.
4. TEMPO SETTINGS MUST STAY AT 150 BPM! (However, Speed settings can be changed to make the song faster/slower.)
5. Instruments and song names cannot have spaces or weird characters in their names. (Just to be safe, don't use spaces or weird characters in the file name or song information either.)
6. SONGS CANNOT BE LONGER THAN ORDER 09!
7. Sound effects must be labeled as sfx_ followed by its name
8. Samples are not natively supported.

These are all the constraints I've encountered so far, and I'll be sure to update this list if myself or others encounter any more. Hope this helps some others out there!

*UPDATE: As of the Pi Beta, the Noise channel is no longer inverted in the compiled ROM, so what it sounds like in Famitracker WILL be what it sounds like in game. Glad to see that was fixed.
Also arpeggios are not currently supported, but should be supported in the full release.

**UPDATE: The full release does indeed support arpeggios now!

***UPDATE: After doing a couple stress tests, instruments with a duty cycle of 1 or 3 WILL play buzzing/ting sounds on the Noise channel! Bxx doesn't work at all, at least not in my tests. You also don't need to have a sfx to import music into NESmaker.
 

gradualgames

New member
I'm not 100% sure about nesmaker's ggsound converter as it is not the official one, but several of these points are incorrect with respect to ggsound's own capabilities, used on its own outside of NESMaker.

1. Songs must not use the effects column (except for effect Bxx).
This is already documented on GGSound's github page.

2. If songs use effect Bxx, it must be present in all 5 channels.
This is already documented on GGSound's github page.

3. Songs must not use the channel volume column.
This is already documented on GGSound's github page.

4. Instruments must not use the Hi-Pitch envelopes in the instrument editor.
This is already documented on GGSound's github page.

5. TEMPO SETTINGS MUST STAY AT 150 BPM! (However, Speed settings can be changed to make the song faster/slower.)
Not sure about NESMaker's converter, which is not the official ggsound converter, but you can change tempo and speed in famitracker and have it reflected in the output from ft_txt_to_asm.py for your game.

6. Instruments and song names cannot have spaces or weird characters in their names. (Just to be safe, don't use spaces or weird characters in the file name or song information either.)
This is not true for ggsound's official ft_txt_to_asm.py, you can put any characters you want.

7. The Noise channel will not play instruments with a duty cycle of 1 or 3 properly. They will all default to duty cycle 0 or 2. (Basically no buzzing/ting sounds on the noise channel.)
This is fully supported by GGSound.

8. SONGS CANNOT BE LONGER THAN ORDER 09!
There is no limitation on song length ( except in terms of how much space is used up in a given bank in the actual rom)

9. Sound effects must be labeled as sfx_ followed by its name
This is documented on GGSound's github page.

10.The soundfont in the Noise channel will play inverted in the engine compared to how it sounds in Famitracker. (For example, normally in Famitracker F-# is the softest note and 0-# is the harshest note, but the engine will think that 0-# is the softest note and F-# is the harshest note.) So when exporting your songs, make sure to invert your Noise channel notes so it will play like the original in the engine!
This should not be the case anymore.
 

CutterCross

Active member
gradualgames said:
I'm not 100% sure about nesmaker's ggsound converter as it is not the official one, but several of these points are incorrect with respect to ggsound's own capabilities, used on its own outside of NESMaker.

1. Songs must not use the effects column (except for effect Bxx).
This is already documented on GGSound's github page.

2. If songs use effect Bxx, it must be present in all 5 channels.
This is already documented on GGSound's github page.

3. Songs must not use the channel volume column.
This is already documented on GGSound's github page.

4. Instruments must not use the Hi-Pitch envelopes in the instrument editor.
This is already documented on GGSound's github page.

5. TEMPO SETTINGS MUST STAY AT 150 BPM! (However, Speed settings can be changed to make the song faster/slower.)
Not sure about NESMaker's converter, which is not the official ggsound converter, but you can change tempo and speed in famitracker and have it reflected in the output from ft_txt_to_asm.py for your game.

6. Instruments and song names cannot have spaces or weird characters in their names. (Just to be safe, don't use spaces or weird characters in the file name or song information either.)
This is not true for ggsound's official ft_txt_to_asm.py, you can put any characters you want.

7. The Noise channel will not play instruments with a duty cycle of 1 or 3 properly. They will all default to duty cycle 0 or 2. (Basically no buzzing/ting sounds on the noise channel.)
This is fully supported by GGSound.

8. SONGS CANNOT BE LONGER THAN ORDER 09!
There is no limitation on song length ( except in terms of how much space is used up in a given bank in the actual rom)

9. Sound effects must be labeled as sfx_ followed by its name
This is documented on GGSound's github page.

10.The soundfont in the Noise channel will play inverted in the engine compared to how it sounds in Famitracker. (For example, normally in Famitracker F-# is the softest note and 0-# is the harshest note, but the engine will think that 0-# is the softest note and F-# is the harshest note.) So when exporting your songs, make sure to invert your Noise channel notes so it will play like the original in the engine!
This should not be the case anymore.
I apologize if this information is incorrect in terms of GGsounds's own capabilities, but most of these constraints I've tested myself in NESmaker beta 3.1.3. This list is for those who are importing music into NESmaker, not GGsound as a whole. All the constraints listed here that are not listed on the GGsound webpage I've found through experimentation with NESmaker. Also, some of the constraints listed here may not apply to future betas or the full release.
 
So just an idea for thought here...

i'm currently dumb on the tracker end, but i'm curious if something like this would work?

bear in mind i'm new to this world and somewhat dumb to asm6 at the moment.
from sniffing around in the nesmaker asm code, it has the same structure setup as the asm3 implementation video on the GGsound site except
what's in our engine folder is a txt to asm conversion exe.

so if the inclusion code in the header and such is the same, it might be just a matter of creating an updated exe out of the python file?
 

CutterCross

Active member
functionalform said:
So just an idea for thought here...

i'm currently dumb on the tracker end, but i'm curious if something like this would work?

bear in mind i'm new to this world and somewhat dumb to asm6 at the moment.
from sniffing around in the nesmaker asm code, it has the same structure setup as the asm3 implementation video on the GGsound site except
what's in our engine folder is a txt to asm conversion exe.

so if the inclusion code in the header and such is the same, it might be just a matter of creating an updated exe out of the python file?
I also know jack squat about asm, but that's a pretty interesting find. Not sure if your solution would/wouldn't work, but it's not a make-or-break scenario in my eyes. It's still definitely possible to make some awesome advanced NES music! It just takes some creativity! And I've been able to make some decent (imo) tracks despite these limitations. Haven't yet been able to test if anything is different between the 3.1.3 and pi betas for importing music, but I'll definitely update any changes I or others find!
 

darkhog

New member
I really wonder why they did go with GGSound if it has so many limitations even on its own, such as no effects other than loop effect (BXX). I mean name me one good demoscene/chiptune track that doesn't do pitchbends or slide to notes. Obviously they can't use FT's engine since it's too big, but what about other engines? Is GGSound really the best choice or just the first they thought of?
 

CutterCross

Active member
darkhog said:
I really wonder why they did go with GGSound if it has so many limitations even on its own, such as no effects other than loop effect (BXX). I mean name me one good demoscene/chiptune track that doesn't do pitchbends or slide to notes. Obviously they can't use FT's engine since it's too big, but what about other engines? Is GGSound really the best choice or just the first they thought of?
They probably went with GGsound because it was more efficient to implement in NESmaker than other engines. It was also probably what they had easy access to at the time.

And speaking of the demoscene, most of those demos probably use their own custom engine from scratch. You CAN make your own custom engine and use it in NESmaker if you're crafty enough with ASM, but let's be honest, most people aren't going to do that.

Also, you CAN do note slides and pitchbends with the GGsound engine! There's ways to do it other than using effects, it just takes a bit more creativity. I proved it myself! Take a listen to these:

https://www.youtube.com/watch?v=O4sgb0JBEMQ&t=1s
https://www.youtube.com/watch?v=oXSKe3sSEeQ

I made these tracks commissioned by a couple NESmaker Beta testers. They both have pitchbends, note slides, and (slight) vibrato, all done without the use of effects. These DO work in NESmaker and the compiled ROM! (Aside from having to invert the notes on the Noise channel before importing them.) Just to prove it IS possible, just not as simple as using effects.

One of the Beta testers showed off one of the tracks being used in their compiled game, which you can find here: http://www.nesmakers.com/viewtopic.php?f=13&t=180&start=20
 

Mihoshi20

Member
CutterCross said:
darkhog said:
I really wonder why they did go with GGSound if it has so many limitations even on its own, such as no effects other than loop effect (BXX). I mean name me one good demoscene/chiptune track that doesn't do pitchbends or slide to notes. Obviously they can't use FT's engine since it's too big, but what about other engines? Is GGSound really the best choice or just the first they thought of?
They probably went with GGsound because it was more efficient to implement in NESmaker than other engines. It was also probably what they had easy access to at the time.

And speaking of the demoscene, most of those demos probably use their own custom engine from scratch. You CAN make your own custom engine and use it in NESmaker if you're crafty enough with ASM, but let's be honest, most people aren't going to do that.

Also, you CAN do note slides and pitchbends with the GGsound engine! There's ways to do it other than using effects, it just takes a bit more creativity. I proved it myself! Take a listen to these:

https://www.youtube.com/watch?v=O4sgb0JBEMQ&t=1s
https://www.youtube.com/watch?v=oXSKe3sSEeQ

I made these tracks commissioned by a couple NESmaker Beta testers. They both have pitchbends, note slides, and (slight) vibrato, all done without the use of effects. These DO work in NESmaker and the compiled ROM! (Aside from having to invert the notes on the Noise channel before importing them.) Just to prove it IS possible, just not as simple as using effects.

One of the Beta testers showed off one of the tracks being used in their compiled game, which you can find here: http://www.nesmakers.com/viewtopic.php?f=13&t=180&start=20

If all goes well, Mermay's Den will also be one of the games Joe shows off at the upcoming NESmaker launch event in early august.
 

darkhog

New member
I see. Though it would be better if GGSound could utilize these effects as otherwise you have to bake them into instruments meaning you may have several instrument clones with different pitch bend rates and when you need/want to change a pitch of an instrument, you got to change every clone.

As for the inverting of notes, I really hope noise thing will be resolved by the 1.0 - from what I've read in this thread in GGSound the issue is already resolved so all that needs to be done is to merge importer code to NM's internals. Other than that, is there a way of automatically inverting notes or do you have to change these manually? I'd be pretty happy if there was a tool for that because otherwise it's a lot of work if you need to make a slight changes to the tune.
 

CutterCross

Active member
darkhog said:
I see. Though it would be better if GGSound could utilize these effects as otherwise you have to bake them into instruments meaning you may have several instrument clones with different pitch bend rates and when you need/want to change a pitch of an instrument, you got to change every clone.

As for the inverting of notes, I really hope noise thing will be resolved by the 1.0 - from what I've read in this thread in GGSound the issue is already resolved so all that needs to be done is to merge importer code to NM's internals. Other than that, is there a way of automatically inverting notes or do you have to change these manually? I'd be pretty happy if there was a tool for that because otherwise it's a lot of work if you need to make a slight changes to the tune.
Eh, the effects issue isn't that big a deal for me. It would be nice if they were supported, but sometimes you just have to work with what you've got.

And as for inverting Noise channel notes, I just re-invert the notes in Famitracker manually before creating the .txt file, as there doesn't seem to be a way to do it "automatically". If it helps, here's a reference guide to show what each Noise channel note will sound like when compiled in NESmaker.
Original:
Q0AIKIF.png
Inverted:
dRPo0q2.png


Hopefully if this issue is fixed in the final version of NESmaker this information won't be needed anymore. What I'd like to see fixed are the buzzing/Atari TIA sounds the Noise channel can make using a duty cycle of 1 or 3. Those didn't work last time I checked.
 

CutterCross

Active member
*UPDATE: As of the Pi Beta, the Noise channel is no longer inverted in the compiled ROM, so what it sounds like in Famitracker WILL be what it sounds like in game. Glad to see that was fixed.
Also arpeggios are not currently supported, but should be supported in the full release.
 

Mihoshi20

Member
CutterCross said:
*UPDATE: As of the Pi Beta, the Noise channel is no longer inverted in the compiled ROM, so what it sounds like in Famitracker WILL be what it sounds like in game. Glad to see that was fixed.
Also arpeggios are not currently supported, but should be supported in the full release.

That's going to be a hug help for sure, no more having to take the time to do inversions before exporting.
 

CutterCross

Active member
I tried importing some music I've been preparing into the 4_0_0 release of NESmaker and I didn't get any issues! That's a first! Arpeggios are now confirmed to work!
 

Mihoshi20

Member
CutterCross said:
I tried importing some music I've been preparing into the 4_0_0 release of NESmaker and I didn't get any issues! That's a first! Arpeggios are now confirmed to work!

That's awesome to hear! Not only that there are no issues but also that you're now able to play around and work with NESmaker directly! :D
 

CutterCross

Active member
Mihoshi20 said:
That's awesome to hear! Not only that there are no issues but also that you're now able to play around and work with NESmaker directly! :D
Yup! But I've also been working with importing music into NESmaker since the betas, so I already know all the things that can go wrong and write music with that in mind. Others however, especially newcomers, will likely have a TON of issues when it comes to NESmaker and the limitations of GGsound.

And it's great to finally have access to NESmaker :D Now I can test songs myself!
 
CutterCross said:
Mihoshi20 said:
That's awesome to hear! Not only that there are no issues but also that you're now able to play around and work with NESmaker directly! :D
Yup! But I've also been working with importing music into NESmaker since the betas, so I already know all the things that can go wrong and write music with that in mind. Others however, especially newcomers, will likely have a TON of issues when it comes to NESmaker and the limitations of GGsound.

And it's great to finally have access to NESmaker :D Now I can test songs myself!

It would be great to have someone as knowledgeable as you make some kind of tutorial about this! :)
 

MistSonata

Moderator
I second vrbandwagon's notion. I've been hoping for someone to make a tutorial explaining what not to do, so that I could tinker around with my own SFX.
 

CutterCross

Active member
So I went ahead and did a sort of "stress test" for NESmaker's sound capabilities, and I made a few discoveries.


1. Instruments which have a duty cycle of 1 or 3 WILL play buzzing/ting notes on the Noise channel! That wasn't the case with the earlier betas.

2. The Bxx effect doesn't work at all, at least not in my tests.

3. You don't need to have a sfx to import music into NESmaker.

4. Effects and channel volume won't play in NESmaker, but they don't prevent the song from importing. So they'll never be the cause of an importing error.

5. Songs longer than 09 ORDER will still fail to import. That hasn't changed.


I'll also try to make a video tutorial on how to avoid problems importing into NESmaker sometime in the future.
 

darkhog

New member
Cool. A guide how to convert a song that uses effects (mainly portamento/pitchbend) and volume column by hand so it imports properly would be nice, if you can make one.
 
Top Bottom