GradualGames wrote:
Yeah, basically the primary problem is you have these miniature state machines running for each stream: square 1, square 2, triangle, noise, and DPCM, every frame. Those state machines handle volume, pitch, duty envelopes and dpcm sound effect priority (just added, not yet released in distro), each of which are simple to execute. If I were to go beyond this and add additional features that could do a "secondary" modification of various settings such as the effects famitracker offers *on top* of instrument envelopes/sequences, we're talking yet more state machines working in concert for every stream. It's certainly doable, but like I said we'd be getting into a more heavy lifting kind of engine at that point. In addition to running these additional state machines there'd have to be some kind of tweening or combination of values going on as well.
It's also conceivable to write a much more sophisticated famitracker text-to-asm converter which could create all possible permutations of each instrument and effects based on usages in your song, but then the data would get huge and I kind of shudder to think of the complexity that would introduce into my script.
I'd be surprised if any other game sound engine goes much beyond basic instrument execution and into effects. I'm sure some do. As for myself, I'm more than satisfied with soundtracks that are good not because they wow you with portatos, arpeggios and other such "shock and awe," but are elegant and beautiful much the way a mozart piano sonata might be. So...after I add the above listed features, GGSound will be feature complete. If you're looking for much higher sophistication musically/effect wise, I'd recommend using FamiTracker's own nsf driver. Not sure how easy it would be to use sound effects with that, however.
Thanks again for the interest guys! Cool thing is, I'd never had a reason to look into DPCM. I still don't think I'm going to be using it in my own games, but it was cool to look into it and finally see how to use it.
*edit* I realized you asked about song and instrument limitations. I believe you can have 128 instruments as those are represented as lists of words using an 8 bit index. Same for songs. 128 of each thing. Envelopes can be 256 bytes long. I don't recall if FamiTracker has any limitations which would prevent taking full advantage of GGSound's limits or if they exceed them. I should probably list these facts next time I update the distro.
Thanks for looking into it all and I'm glad you found the DPCM groking and implementation interesting.
To be of little help, I can't find limits for Famitracker as such and some of the old limitations aren't listed on the Famitracker site FAQ as if they were removed and maybe are irrelevant to the project file, since that isn't NES specific but using whatever file system the OS uses.
http://famitracker.com/wiki/index.php?title=Frequently_Asked_QuestionsThe old instrument limit was 64 and that was listed in the instrument section of the FAQ quite a while back. I think they may have lifted that limit for project files and I think the project files would have pretty vast limits, if any. FTM export not so much but I can't find that on the wiki; as well as actual game and ROM or flashcart usage, it's probably limited by combination of the NES/hardware with any fancy cartridge hardware (or an emulator's implementation of the two), and the sound engine and how it's converter works (something like that). The version of Famitone2 we were using was limited to 64 instruments and 16 songs so you beat that one. Since we are also limited to whatever flashcart hardware we can afford, an .NSF engine is probably not as ideal as a simpler solution like GGSound.

Thanks again for everything!