Viewing Issue Advanced Details
ID Category [?] Severity [?] Reproducibility Date Submitted Last Update
06028 Sound Minor Always Sep 9, 2015, 13:29 Sep 16, 2015, 10:03
Tester Dr.Venom View Status Public Platform MAME (Official Binary)
Assigned To Haze Resolution Fixed OS Windows Vista/7/8 (64-bit)
Status [?] Resolved Driver neodriv.hxx
Version 0.165 Fixed in Version 0.166 Build 64-bit
Summary 06028: neogeo.c: Wrong volume of SSG versus the FM & ADPCM sound generation parts
Description In the neogeo driver the volume balance between the YM2610 SSG and FM&ADPCM sound generation parts is incorrect.

This manifests itself in -all- SSG based sound effects in the neo geo games to be played too loud versus FM and ADPCM and in some cases (because of clipping) also getting distorted. For example these SSG sounds include the bonus pickup sounds in the metal slug games, the train riding sounds in mslugx, the helicopter bomb dropping sounds, steam "noise",etc.

Since the bonus pickup sound in the metal slug games is making the issue very clear, I've zoomed in on that for the comparison attached to this bug report. Do note that the comparison holds for other SSG sounds too.

Thanks to ufoufo512 from the arcadecontrols forum, who provided me with a number of recordings from his MVS two slot board, we've been able to verify this and analyse what the (more) correct volume is.

I've attached three files.

The first is an MP3 comparing the real MVS with MAME (metalslugx_demo2_bonuspickup(real_vs_mame).mp3). This example is from the metalslugx demo that is played in atrtraction mode and zooms in on the bonus pickup sounds. The first 8 seconds is from the real MVS, then a pause and then the exact same part in MAME (recorded with -wavwrite). It's quite clear that the SSG volume in MAME is way too loud. I've also attached a picture showing the Audacity audio profile of this sample. In this picture it can be seen how the bonus pickup sounds are causing quite some heavy clipping (distortion), marked by the red arrows.

The volume balance is set at this part in the neogeo driver: The current values are:

MCFG_SOUND_ROUTE(0, "lspeaker", 0.60)
MCFG_SOUND_ROUTE(0, "rspeaker", 0.60)
MCFG_SOUND_ROUTE(1, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(2, "rspeaker", 1.0)

After extensive testing I found the (more) correct volume for the SSG / channel 0 to be:

MCFG_SOUND_ROUTE(0, "lspeaker", 0.28)
MCFG_SOUND_ROUTE(0, "rspeaker", 0.28)
MCFG_SOUND_ROUTE(1, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(2, "rspeaker", 1.0)

To illustrate the difference this makes, I've attached a second mp3 (metalslugx_demo2_bonuspickup(real_vs_mame_volume_adjusted).mp3) where you can hear the same soundpart again, but now with the volume adjustment applied. So first 8 seconds is the real MVS, short pause and then the MAME sound output with the volume adjustment.

Please let me know if there are any questions.

Through additional testing I found that the most accurate volume for channel 0 should be between 0.28 and 0.29. This setting is achieved by additionally lowering the channel 1 and 2 volume very slightly:

MCFG_SOUND_ROUTE(0, "lspeaker", 0.28)
MCFG_SOUND_ROUTE(0, "rspeaker", 0.28)
MCFG_SOUND_ROUTE(1, "lspeaker", 0.98)
MCFG_SOUND_ROUTE(2, "rspeaker", 0.98)

This makes the audio balance between SSG and FM and ADPCM -very accurate-. I don't think people would be able to distuingish it anymore from the real deal in a blind test :-)
Steps To Reproduce
Additional Information
Flags Verified with Original
Regression Version
Affected Sets / Systems neogeo.c
Attached Files
mp3 file icon metalslugx_demo2_bonuspickup(real_vs_mame).mp3 (367,281 bytes) Sep 9, 2015, 13:29 Uploaded by Dr.Venom
png file icon metalslugx_demo2_bonuspickup(real_vs_mame).png (74,418 bytes) Sep 9, 2015, 13:30 Uploaded by Dr.Venom
mp3 file icon metalslugx_demo2_bonuspickup(real_vs_mame_volume_adjusted).mp3 (377,208 bytes) Sep 9, 2015, 13:30 Uploaded by Dr.Venom
There are no relationship linked to this issue.
User avatar
Senior Tester
Sep 9, 2015, 14:45
Zupapa is a pretty good test case for this too IIRC, the blip sound when you throw your little guys at the enemies has always been far too loud.
User avatar
Senior Tester
Sep 9, 2015, 19:48
Looks good to me. I'll confirm this and add the appropriate flag.
User avatar
Sep 11, 2015, 23:43
Dr.Venom, the gain values aren't restricted to 2 decimal digits, they have double-precision floating-point type. You could set the balance with 1.00 and 0.285, by example, instead 0.98 and 0.28. See src/mame/drivers/cubeqst.c as an example.
User avatar
Sep 16, 2015, 10:03
Enik, thanks for the pointer, I'll keep that in mind next time.