GGSound: a lightweight sound engine for games

Discuss NSF files, FamiTracker, MML tools, or anything else related to NES music.

Moderator: Moderators

8bitMicroGuy
Posts: 314
Joined: Sun Mar 08, 2015 12:23 pm
Location: Croatia

Re: GGSound: a lightweight sound engine for games

Post by 8bitMicroGuy »

If I have a duty cycle pattern loop in an instrument that I use in a sound effect, will it loop only once?
User avatar
GradualGames
Posts: 1106
Joined: Sun Nov 09, 2008 9:18 pm
Location: Pennsylvania, USA
Contact:

Re: GGSound: a lightweight sound engine for games

Post by GradualGames »

It finds the max length of all envelope types for your instrument and terminates the sound effect after that many frames (the length of your envelope sequence corresponds to rendered frames) have elapsed. Typically the volume envelope is the longest, so if your duty cycle is a fairly standard one that is used for a crisp sounding attack or what not and you have a longer volume envelope, the duty cycle will loop as expected.

Perhaps I should use the pattern length in rows instead to determine the length of sound effects---that way you can control it more precisely. Thoughts?
8bitMicroGuy
Posts: 314
Joined: Sun Mar 08, 2015 12:23 pm
Location: Croatia

Re: GGSound: a lightweight sound engine for games

Post by 8bitMicroGuy »

Pattern lengths are how I expect sfx to work so yes
User avatar
darryl.revok
Posts: 520
Joined: Sat Jul 25, 2015 1:22 pm

Re: GGSound: a lightweight sound engine for games

Post by darryl.revok »

Hello!

I made something that I thought might be useful to others.

It's pretty simple, just a slight modification to the GGsound demo. It's in ASM6 format but I can make a CA65 one if it someone requests it.

The purpose of this is to help a composer, without programming knowledge, to demo their songs on an NES console or emulator. I wanted it so that a composer could export their FTM song, convert to ASM, rename the output files to "track_data.inc" and "track_dpcm.inc" and drop them into the demo file, build, and listen. I wanted to make sure that the track list would stop at the beginning and end no matter how many songs were included, I also wanted the same for SFX, and for a sound designer to be able to select the various sound effects.

All of the changes that I made are included in one file, demo.asm. This file can be dropped into the "ggsound_asm6" folder to apply these changes to the demo. Opcodes that I added are capitalized. There is an additional variable declaration for current_sfx, and an initialization of that variable. There are constants called SONG_INDEX_END and SFX_INDEX_END which are calculated at assembly. A song will no longer restart when you hit the end of the track list, which is just personal preference and it was a little easier to set up that way.

I hope this helps somebody!
Attachments
demo.asm
(8.06 KiB) Downloaded 363 times
User avatar
GradualGames
Posts: 1106
Joined: Sun Nov 09, 2008 9:18 pm
Location: Pennsylvania, USA
Contact:

Re: GGSound: a lightweight sound engine for games

Post by GradualGames »

OP updated with distro with two new bug fixes in the converter. Sfx lengths were not being calculated correctly for more complex sfx, and pattern indices were not being treated properly in some cases. Thanks to Peter McQuillan for these bug reports!
User avatar
GradualGames
Posts: 1106
Joined: Sun Nov 09, 2008 9:18 pm
Location: Pennsylvania, USA
Contact:

Re: GGSound: a lightweight sound engine for games

Post by GradualGames »

GGSound now has its own Github repository.
User avatar
nesrocks
Posts: 563
Joined: Thu Aug 13, 2015 4:40 pm
Location: Rio de Janeiro - Brazil
Contact:

Re: GGSound: a lightweight sound engine for games

Post by nesrocks »

I'm getting an error when converting a song but I guess this has to do with the fact that I don't have cc65 properly installed. I managed to run the build demo python script when I copied ca65.exe and ld65.exe do the same folder as the py script, but converting a song isn't working when I use that dirty fix. Even copying all cc65 exes to the folder doesn't cut it. So, when searching for instructions on how to install cc65 I run into a problem. This page says:
"Extract cc65-win32-#####.zip to a new folder.
Open this folder and run the install.vbs file as an administrator to copy it to Program Files."

Now, the original cc65 website doesn't have anything anymore, and it says:
"Oliver Schmidt, long time contributor to the libraries is providing support for the old version. See http://cc65.github.io/cc65/ for more information."
So I go to that new site and the package is presented in a new portable format only. I can't install it, it seems.

I tried unzipping the package to c:\cc65 as I recall someone suggesting that, but still doesn't work.

Code: Select all

D:\programas\_nes modding\assembly\_cc65\ggsound-master\ggsound_ca65>ft_txt_to_a
sm.py tension.txt
Traceback (most recent call last):
  File "D:\programas\_nes modding\assembly\_cc65\ggsound-master\ggsound_ca65\ft_
txt_to_asm.py", line 754, in <module>
    main()
  File "D:\programas\_nes modding\assembly\_cc65\ggsound-master\ggsound_ca65\ft_
txt_to_asm.py", line 367, in main
    macros[macro_type_to_str[macro["type"]]].append(macro)
KeyError: 3
Any ideas? Just to be clear: when simply unzipping the files to new folders it doesn't work (build demo or convert song). I have python 3.6.2 installed and the latest zips of cc65 and gg-sound. Build demo works when I copy ca65.exe and ld65.exe to the "ggsound_ca65" folder.
edit: there is a space character in the path on "_nes modding" folder, but even when working from c:\ggsound it throws the same error.

Here is one song that I've tried to make as featureless as possible and still can't export:
http://nesrocks.com/files/runner.ftm
https://twitter.com/bitinkstudios <- Follow me on twitter! Thanks!
https://www.patreon.com/bitinkstudios <- Support me on Patreon!
User avatar
GradualGames
Posts: 1106
Joined: Sun Nov 09, 2008 9:18 pm
Location: Pennsylvania, USA
Contact:

Re: GGSound: a lightweight sound engine for games

Post by GradualGames »

nesrocks wrote:I'm getting an error when converting a song but I guess this has to do with the fact ...
Sorry I haven't been on nesdev in a little while. I'll look into it. Or if you wind up fixing it, pull requests on the github project are welcome as well. :)
User avatar
GradualGames
Posts: 1106
Joined: Sun Nov 09, 2008 9:18 pm
Location: Pennsylvania, USA
Contact:

Re: GGSound: a lightweight sound engine for games

Post by GradualGames »

nesrocks wrote: Here is one song that I've tried to make as featureless as possible and still can't export:
http://nesrocks.com/files/runner.ftm
Hmm...I'm not sure what's going on yet. When I try to open your file in FamiTracker 0.4.2, it says I need a newer version of FamiTracker. So I went to FamiTracker's website and got 0.4.6. Tried to open your file again. It still tells me I need a newer version. Are you using some kind of bleeding edge beta version from somewhere...? Haha.
User avatar
nesrocks
Posts: 563
Joined: Thu Aug 13, 2015 4:40 pm
Location: Rio de Janeiro - Brazil
Contact:

Re: GGSound: a lightweight sound engine for games

Post by nesrocks »

GradualGames wrote:Are you using some kind of bleeding edge beta version from somewhere...? Haha.
Yeah, everyone uses 0.5 and that's what I had to use too if I was to download several of the tracks posted on the famitracker forums. I 100% agree this is super confusing as that 0.5 version isn't easily found on their download sections, and yet, it is what most of the composers use. Note this thing is from 2015!
http://forums.famitracker.com/viewtopic.php?t=173
https://twitter.com/bitinkstudios <- Follow me on twitter! Thanks!
https://www.patreon.com/bitinkstudios <- Support me on Patreon!
User avatar
GradualGames
Posts: 1106
Joined: Sun Nov 09, 2008 9:18 pm
Location: Pennsylvania, USA
Contact:

Re: GGSound: a lightweight sound engine for games

Post by GradualGames »

nesrocks wrote:
GradualGames wrote:Are you using some kind of bleeding edge beta version from somewhere...? Haha.
Yeah, everyone uses 0.5 and that's what I had to use too if I was to download several of the tracks posted on the famitracker forums. I 100% agree this is super confusing as that 0.5 version isn't easily found on their download sections, and yet, it is what most of the composers use. Note this thing is from 2015!
http://forums.famitracker.com/viewtopic.php?t=173
Interesting, I was not aware of this build of FamiTracker.

The issue is that some hi-pitch sequences are present in your file---these are unsupported by GGSound. This is listed on the guide on the github page.

If you're working with a sophisticated composer, they will probably need some coaxing as GGSound supports a rather limited subset of FamiTracker's features.
User avatar
nesrocks
Posts: 563
Joined: Thu Aug 13, 2015 4:40 pm
Location: Rio de Janeiro - Brazil
Contact:

Re: GGSound: a lightweight sound engine for games

Post by nesrocks »

Ohhh... But they are unchecked. Shouldn't they be ignored by the converter? Anyway, I'll remove it and test again.
https://twitter.com/bitinkstudios <- Follow me on twitter! Thanks!
https://www.patreon.com/bitinkstudios <- Support me on Patreon!
User avatar
GradualGames
Posts: 1106
Joined: Sun Nov 09, 2008 9:18 pm
Location: Pennsylvania, USA
Contact:

Re: GGSound: a lightweight sound engine for games

Post by GradualGames »

Just added Dendy support to GGSound.
User avatar
GradualGames
Posts: 1106
Joined: Sun Nov 09, 2008 9:18 pm
Location: Pennsylvania, USA
Contact:

Re: GGSound: a lightweight sound engine for games

Post by GradualGames »

A bug in arpeggio execution has been fixed. Arpeggio support has been added to the noise channel.

GGSound repository
User avatar
GradualGames
Posts: 1106
Joined: Sun Nov 09, 2008 9:18 pm
Location: Pennsylvania, USA
Contact:

Re: GGSound: a lightweight sound engine for games

Post by GradualGames »

Introducing arpeggios to the noise channel caused a regression with noise pitch envelopes which has been fixed. Also: "Fixed" arpeggios are hard-coded to the noise channel, "Absolute" arpeggios are hard coded to all other channels. I do not use arpeggios myself---if anyone runs into issues with using arpeggios, please use this thread to report bugs and provide a sample song which causes your issue so that I can fix it.

Does anyone know how common it is to use absolute/relative/fixed with arpeggios on different channels?
Post Reply