Play Sound control

It is not possible to put a reliable per-player control into a module because the Play Sound trait executing on one player’s machine will send sounds to the other player’s machine. The module developer must choose between no control or an on/off control that affects all players within a game session.

It would be nice if the Play Sound trait had associated mute and volume controls on the Preferences “Sound” tab or elsewhere, to control the effect of a Play Sound action on the local player’s machine, regardless of whether the Play Sound was actioned from that player’s own machine or from another player’s machine.

Better, add the sound controls as a default Global Option at module level (this might mean creating a module tab by default as well).

Another method of implementation would be a command button akin to the “server controls” or Zoom buttons.

Workaround: Players will need to use their OS in-built per-application volume control or a third party app if necessary (e.g. MacOS).

So to clarify, you’re hoping for a preference for an individual user to e.g. “Turn All Sounds Off” for all modules?


That would probably be be enough.

The other words were about the further possibilities of volume control and allowing control at the module or trait level.

Ah, gotcha. I guess having the “off switch” be module-by-module probably makes sense.

Volume control may need to away some more thoroughgoing rework of Vassal sound.

Thus spake Cattlesquat:

Ah, gotcha. I guess having the “off switch” be module-by-module probably
makes sense.

Volume control may need to away some more thoroughgoing rework of Vassal

We should not add a volume control. Volume control is a thing for the
system to handle. If you’re going to put sounds into a module, make
them all fit to be played at the same volume.


Yes, I agree - I was going to come back and retract the volume part.

A Vassal overall sound on/off, including all modules via the existing “Sounds” tab would be good, I think. Except, “Wakeup”, which I think should be controlled separately.

I was also going to suggest an additional property on the “Play Sound” trait whereby a module designer can turn that particular sound trait off/on for the local machine. I think I should check something first. Take the screenshot below…

[attachment=0]sound trait.png[/attachment]

Assume Flip.wav makes a sound and silence.mp3 does not.

Assuming that prefSoundOn is a Global Option, set to true on the local machine and false on the remote machine(s).
Does the sound (flip.wav) get played on all machines or only on the local machine ? In short, what does Play Sound transmit to the remote machines; the sound file itself or a signal to action that Play Sound trait on the remote machines ?


I do want to jump back in (for V4 planning purposes) and add that pretty much every videogame and similar app provides a “master volume” (some provide more detail than that). I think the “desperately-needed-for-now” thing is the Mute, but a master volume control for modules is something we should in the end provide. Even if the module designer has all the sounds for the module at the same volume level, that doesn’t mean they will have the correct relative volume to OTHER apps for which the player doesn’t want to have to adjust the SYSTEM volume for (like if getting my Vassal sounds means I have to turn my System volume down which then means my browser doesn’t play things at the right volume or whatever, then that’s very bad for uptake on using sound in VASSAL).


1 Like

I had more of a go at understanding the Sound Trait and I can see that an extra control would be needed to achieve what I have in mind beyond an overall Vassal control. i.e. to turn a particular Sound Trait or group of traits on/off at the local machine only - including for incoming sounds.

e.g. existing Play Sound properties are:
SoundClip (expression): sound.mp3
Send to Other Players: (ticked)

to these, add a new property:-
Local Sound On: {expression}

When the “Local Sound On” expression evuates to “true” (default), the Play Sound trait performs as now; sound is played locally and send to other players; likewise when the trait is actioned by other players, it is played on the local machine as well.

When this local control is set false, the SoundClip does not play on the local machine but is still sent to other players. Also, however, when actioned on other players machines, the sound trait does not play on the local machine.

Is this feasible, I wonder ?


In addition to this, a way to pass a sound file to a new instance of the Vassal Player, and a way to add these sound configurations to the Module Manager. Then it could be used like music player with a playlist.

Just adding for the record, that adding the Mute option to the Preferences…Sound panel has greatly helped.

As a workaround until such time as Vassal allows per module sound volume control, there are OS and 3rd party app level controls that users might try.

There are one or two other issues that Vassal might improve on, discussed elsewhere. wav files in quick succession don’t buffer (in fact,cancel each other); mp3 files on the other hand are additive (exacerbating the volume issue). At present, module controls over this can get over complicated. This is why I’ve suggested that GKC includes sound suppression, just as it does report suppression.