I hope some of you can help me with a workaround or just tell me what I missed...
I get cymbals and hihat playing when it should not (the first percussion sound only, after first sound, we are good). This really puzzled me for a long time, but I have narrowed it down to a VERY simple test case.
My case shows that you get wrong output if you do this:
1. Just play a tune in *non-drum* mode ("9ch") just a short while (This is the important step)
2. Here you are likely to mute chip or reset or whatever, as you are going to start a new tune (it does not matter what you do --this is the crazy part)
3. Play a new tune which plays a percussion instrument, say ... bass drum ("6ch")
4. Hear that hihat and cymbal plays too (possibly all percussion instruments are played) during the first percussion playback/sound
I can reproduce this 100% of the times. Well, based on data from MoonBlaster.
I first noticed this in my game using my own vgm-replayer. As the source of the vgm-recording is MoonBlaster, I moved into MoonBlaster and reproduced the buggy audio there as well.
I have set up a super simple sample for this. I have been using default values in MoonBlaster (1.4), so all you need to do, is to make a tune that is 6 channels, and that plays drum. ONE command only, is needed. That is your full tune for this:
The default drum setup is like this, ie. block 1 is only bass drum:
When you record this in openmsx using vgm_rec, you get super simple output, a small file with a few register writes. Here is the output of a script I made:
(hex-numbers in left margin are: Register-number Value
The vgm-file is here: https://drive.google.com/open?id=1A4zhY9tAa4mGBqyNiF8jhbRhL1...
To show how this sounds, I have made a video using vgmplay by Grauw:
https://youtu.be/-CgK1WDGdpE
What I do here:
1. Kick off a tune that is no-drum, and abort this one.
2. Start our test case. Hear the hithat/cymbal. = NOT OK
3. Re-Start our test case. Heat that bass drum only is played = OK
4. Re-Start our test case. Heat that bass drum only is played = OK
5. Re-Start our test case. Heat that bass drum only is played = OK
BTW: I assume this player resets the chip when it is starting.
BTW, I have also checked this:
* I've added 75-240 extra wait cycles between register writes. Didn't help.
* I tried to avoid percussion as the first commands sent. wait a bit. Didn't help.
* Full reset, or just mute (like MoonBlaster does) produces same result.
* Have used non-default drum frequencies too. Didn't help.
* It happens on real hardware too (a1-wsx)
The only thing that worked, was to set the volume of hithat/cymbal to 1 or 0 (silent)... but that is not ideal (as in MoonBlaster you can only set volume once / up front, so setting them as muted means that you cannot use them later).
Ok, so now I hope someone just tells me, hey, it 2022 - this is old news, the workaround is x,y,z.
How to avoid this?