Skip to content

mockingboard voice muting

Technical discussion about the VGM format, and all the software you need to handle VGM files.

Moderator: Staff

  • cryptoboy Offline
  • Posts: 2
  • Joined: 2018-07-02, 7:33:07

mockingboard voice muting

Post by cryptoboy »

I've got a newb question. I just discovered VGMPlay tonight, and built it on my macbook. I'm experimenting on "01. Ultima Theme" at /packs/pack/ultima-v-warriors-of-destiny-apple-ii, which is for Mockingboard A (4xAY-3-8913) x2.

I'm attempting to create a .wav with all but the first channel muted. The song sounds like it only uses 6 voices, so I tried modifying the VGMPlay.ini file with:

MuteMask = 0x3E

MuteMask = 0xFE

MuteCh0 = False
MuteCh1 = True
MuteCh2 = True
MuteCh3 = True
MuteCh4 = True
MuteCh5 = True

but none of these settings muted any of the channels. Suggestions?
  • User avatar
  • ValleyBell Offline
  • Posts: 4746
  • Joined: 2011-12-01, 20:20:07
  • Location: Germany

Post by ValleyBell »

At least, I need to explain what "4x AY-3-8913" actually means. It means that the actual VGM contains:
  • 2x AY8910 (variant AY-3-8913)
  • 2x YM2203 (each YM2203 includes all AY8910 features, that part is often called "SSG")
That's actually 12 channels.

Now I'm afraid you encountered the main drawback of VGMPlay compared to the Winamp/foobar plugins - the settings always apply to all instances of a sound chip.
So if you have 2x AY8910 and you do "MuteCh0 = True", you actually mute 2 channels: The first channel of each of the AY sound chips.
Also I just noticed, that I forgot to add configuration settings to allow muting the YM2203's SSG channels. So you can't mute those separately in VGMPlay at all. :/

I'm afraid your only chance right now is to use one of the VGM plugins for Winamp or foobar. I know that in_vgm lets you mute everything separately.

Or if you are fine with programming, you could also hardcode the muting settings at this spot:

Code: Select all

ChipOpts[0x00].AY8910.ChnMute1 = 0xFE;  // mute all but 1st channel on first AY8910
ChipOpts[0x01].AY8910.ChnMute1 = 0xFF;  // mute all channels on second AY8910
ChipOpts[0x00].YM2203.ChnMute3 = 0xFF;  // mute all channels on first YM2203's AY8910
ChipOpts[0x01].YM2203.ChnMute3 = 0xFF;  // mute all channels on second YM2203's AY8910
  • cryptoboy Offline
  • Posts: 2
  • Joined: 2018-07-02, 7:33:07

Post by cryptoboy »

Cool, that's just the push I needed. I ended up having to put those lines in the PlayVGM function in VGMPlay.c instead, then I got my single voice WAV. Also, I isolated all the voices, and there's 8 (not 6, like I suspected).

Thanks again!
Post Reply