Thank you. You're really greatarme


Hi Blastar, thank you a lot for the new NGFX SoundBuilder update!
The possibility of using up to 1702 sounds is really awesome sun
Hypernoid uses only 38 files of sounds and music therefore I will build a test project which plays tons of sound files and report back as soon as possible.


sorry, that was a tipo... 224 * 8 = 1792 sound commands! smile


blastar (./62):
sorry, that was a tipo... 224 * 8 = 1792 sound commands! smile

Great, even better ( ๑•ꇴ•๑ )♥


I'm speechless! Really I'm not... cause now the opportunity to use so many samples is there!!!! Hats off as always and many thanks. Can't wait to try this one!


While ozzyyzzo was working on TEOT he noticed that in latest MAME version there is a problems with the sound... no sound anymore, only some clicks. fear after some research I found the problem - luckily it's not the Z80 part but it's due to an undocumented(?) change in NEOGEO.XML. with version 230 the values for the sound have changed - without an update the V-ROMs are not loaded correctly.

up to MAME 229:
<dataarea name="ymsnd" ...> .. </dataarea> <dataarea name="ymsnd.deltat" ...> .. </dataarea>
since MAME 230:
<dataarea name="ymsnd:adpcma" ...> ... </dataarea> <dataarea name="ymsnd:adpcmb" ...> .. </dataarea>
So, if you update your setup to a newer version of MAME don't forget to check & update the NEOGEO.XML too!


Hi Blastar, I had finally the time last weekend to try out your latest release of the NGFX Soundbuilder (I am sorry that it took so long).

I have started with adding all sounds and music of Hypernoid and have generated a new .nsl file, which has worked fine.
Then I was facing the problem that you unfortunately have removed the feature of the volume manipulation in the C header file.

#define ADPCM_MUTE (0x14)
#define ADPCM_SET_MAX_VOL (0x15)
#define ADPCM_DEC_VOL (0x16)
#define ADPCM_INC_VOL (0x17)

1.) I am using 'ADPCM_MUTE' in the MVS demonstration loop to turn off the volume and 'ADPCM_SET_MAX_VOL' to turn on the volume again when a coin has been inserted (this is an option I have added to my Soft Dip Settings: DEMO SOUND OFF) . I have tried to do this with 'ADPCM_STOP' which deactivates the background music and all sounds for this given moment but if in the gameplay demo a new sound effect is played it will be hearable again. Would you may please re-add this feature to a future version?

2.) Additionally, I would like to ask you for the possibility of setting a specific volume level, like "send_sound_command(ADPCM_SET_VOL, 80);" for setting the volume to 80% of the original volume. This would be desirable for custom Fade-in/Fade-out effects or for instance for decreasing the volume a bit when the player is inside a menu.

3.) I would be very happy if you may would re-add the NAME ARRAY in *.h file to a future version too? I have used this feature for my Sample Player tool for testing the sounds on the real Neo Geo hardware. It was a lot easier to read the name of the samples instead of reading hex values, particulary when using lots of sounds.

Here is a video of my Sample Player which uses the NAME ARRY and the volume manipulation features of an older version of the NGFX Soundbuilder:



After very deep use of the NGFX Soundbuilder and 1 released game, I would have only 3 feedbacks:

1. great tool, professionnal quality, solid and efficient both on GUI and driver sides, everything worked as expected
2. being able to customize the "NEO GEO" jingle music would be nice (maybe I missed something and it is already possible ?)
3. exporting 1 single V1 file of 16MB size would be nice too


sorry for the delay but too many projects and too little time!
ADPCM_MUTE, ADPCM_SET_MAX_VOL & NAME ARRAY (but I am not sure if this structure is enough when using several banks) are back, 16MB VSize option is available and a small NGCD fix.

not everything is fully tested - please report any errors.

NeoHomeBrew, I am very skeptical about commands with parameters... if something gets lost, everything may get mixed up. maybe special commands like ADPCM_SET_33_VOL or ADPCM_SET_66_VOL?
by the way, when faded to 0 it is the same as ADPCM_MUTE. ;-)

totologic, I am not a fan of the modified boot logos and sound. this requires an extended import function for stereo samples... this is on my TODO list but unfortunately I don't have the time at the moment.


New here in general.
I started using NGFX SoundBuilder (thanks fo that) in my project and I want to share my thoughts with you all.

I read this forum thread and the blog posts but I cannot find how many sounds ADPCM-A can mix. It obviously can mix some sounds but after some amount of sound commands it starts to replace older sounds.
Knowing how many sounds it can play may help but I believe not in the long run.
Having something like channels and priorities will help a lot (SGDK is like that).
For example sounds played in a channel will replace only sounds played by this channel and if their priority is higher.
SGDK probably is doing this in the m68000 side of code and I do not know if it can be done only in the Z80 but probably it can be done.

I tried putting counters in my project to replay sounds but this does not work very well.

I think that just channels (probably in the amount of sounds ADPCM-A can play) will help a lot.



In version 210808
I cannot find a way to add music files (wav) and play them from start to finish.
Ussually those files will play partly.
I tried adding all the files in bank0.
I tried to use all the banks.
Everytime some files (probably those that share banks) are playing partly.
I also tried to fill the banks with grabage (not needed sound files) so the music files will not belong to two banks but again some files will not play from start to finish.

After all this I downloaded version 200624 and everything works great.
Edit: Nope 200624 is problimatic too.

Edit: Setting.
M1 type: NeoGeo Cart(PCM)
M1 size: 64KB
Vx size: 8Mb
eyecatcher: No

I use ssideki with NGDK


hello, there are some limitations and simplifications:

ADPCM-A: 18.5kHz, maxsize 1MB (~1min53sec)
ADPCM-B: 1.85kHz up to 55.555kHz, maxsize = ROMSize

when importing wav files, there is a choice between ADPCM-A and ADPCM-B. at a sample rate of 18500Hz, ADPCM-A is automatically preselected - the maximum size limit for this type is 1MB which corresponds to about 1min53s (this is currently cut without notification). when importing a sample you can manually select ADPCM-B here (a later change is not possible). at a sample rate <> 18500Hz ADPCM-B is automatically preselected - the maximum size corresponds to the free space in the ROM.

there is only one ADPCM-B channel, this can be set to loop and is only interrupted by another sample of this type.

there are 6 ADPCM-A channels.
channels 1-5 are used one after the other in rotation, after starting a sample on channel 5 the next one is started again on channel 1 - this is ideal for rather short samples (shot, jump etc).
channel 6 is used as background channel (the assignment in the sample settings) and can also be set to loop - this channel is also only interrupted by another sample of this type. without loop this channel is suitable for longer samples which should not be interrupted (bigger explosions or speech/announcer).

ADPCM-B for longer looped background music
ADPCM-A 1-5 for normal samples
ADPCM-A 6 for longer samples with highest priority

these priorities (sort off) are kept very simple but should be suitable for most situations.

the maximum number of samples per bank is 224. if you do not exceed this number you should avoid using multiple banks.


Thanks for the detailed answer.

Now I understand how to work with this.

One more question to be sure, to set ADPCM-A to channel 6 I have to set it to BGM Channel, right?


yes, setting the BG flag for an ADPCM-A sample plays it on the channel 6 and is then only interrupted by another sample with this flag.


I wish there wasVGM playback though FM with this tool. I realy love writing music this way with Deflemask or BambooTracker. Now I just convert my vgm to wav.
Superb tool by the way. Thanks.


kakoeimon (./74):
I wish there wasVGM playback though FM with this tool. I realy love writing music this way with Deflemask or BambooTracker. Now I just convert my vgm to wav.
I have a sound driver in beta that reads the VGM + FM + Bamboo tracker, but it will take a long time to debug


First order of business; thanks @Blastar for this amazing tool! I had been researching sound on the Neo Geo over a couple of days in preparation for writing a sound driver when I stumbled across your tool! I'm utterly amazed that I have added almost all the sounds to my project within a few hours which has involved nothing more than a few dozen mouse clicks and a handful of lines of 68K asm coded!!!

It took some experimenting to get things right, such as correct sample rate, the meaning and implications of BGM & looping etc, but once you get the hang of things, it's very quick to organise sounds.

One thing that stumped me for a while was - arguably - a bug. When specifying the names for the M1 & V1 ROMs, I simply typed the game name (same for both) assuming it would add the .M1 and .V1 extensions automatically, since the drop-down had those filters selected. In my experience that has been the standard behaviour for windows file selectors. Anyway, subsequently attempting to generate the ROMs simply resulted in the program hanging! I was stuck for quite a while trying to work out why it kept hanging, until I scrolled over to the right of each ROM filename to see that the M1 & V1 roms had the SAME filename (no extension). So the program was (presumably) trying to open and write to the same file at the same time? and hanging...

Otherwise, again, does pretty much what I need it to do.

What I was wondering, however, is whether or not the Z80 asm driver source is publicly available? I may need to do some tweaks, for example, to accurately emulate the original (Xevious) sounds. One example is the sound when flying enemies are hit (explosion). In the arcade sound driver, it has a count for how many of those particular sounds are 'pending' as they can be generated in quick succession. The arcade just plays them one after the other on the same channel. As-is, on the Neo Geo they're played as soon as the ADPCM-A round-robin player receives them. TBH I actually can't really tell the difference, but there may be other things I need to tweak. Another example is the looped BGM; the arcade continually calls the 'play sound' which of course on your driver is continually restarting the sample. I've had to store a flag on the 68K side of things to ignore that if it's already playing. Not a big deal, but might be nicer in the driver. Of course, sometimes you *WOULD* want the current behaviour.

Now over to your Patreon to sign up...


I tried the eye catcher sound option and it didn't appear to work. I got about 100ms of sound, then nothing.

A few feature requests;

1) After muting (ADPCM_MUTE) the sound, it would be nice if you could 'unmute' and restore the volume levels to what they were previously, rather than sending ADPCM_SET_MAX_VOL ? I would think that would be trivial to implement in your code?

2) It would be nice if you could poll a channel to see whether or not a sample was currently playing? Mostly useful on the BGM channels for non-looping samples of course.

3) As someone else mentioned, a custom eye-catcher sample.

Again, fantastic work @Blastar, you've saved me probably a few weeks work!


Another request; allow the user to specify (dynamically) how many background channels are allocated on ADPCM-A. I've run into the situation where I need two background channels mixed together, and I can't really pre-mix the samples...

Ultimately it would be ideal if NGFX were made open-source so it could be extended?!?