10
\$\begingroup\$

In a split screen multiplayer game, sound events may be heard by more than one player, and they might sound different to each player.

For example, player one might hear the sound of the car they're driving low-pass filtered. Player two might hear the engine sound doppler-shifted as player one drives past at speed. Player three, observing from a distance might hear the unfiltered engine sound at a low volume.

In such a game, the "obvious" approach is to just play all the sounds at once. What methods can I use to improve on this, to prevent sound overload/"cacophony" while maximizing immersion for each player?

\$\endgroup\$
  • \$\begingroup\$ You present an "obvious" solution and then a supposition at a possible problem with it. Try implementing it and see what happens. \$\endgroup\$ – Sean Middleditch May 14 '14 at 4:55
  • 4
    \$\begingroup\$ Off the top of my head, use 2-channel output and play each sound on the channel on the side of the player with 50% volume. \$\endgroup\$ – d3dave May 14 '14 at 5:00
  • \$\begingroup\$ If you have access to a GDC Vault subscription, check out this talk on COOP audio in Splinter Cell Conviction - they go into some depth on exactly this topic: gdcvault.com/play/1014779/Between-4-Ears-SPLINTER-CELL \$\endgroup\$ – DMGregory May 20 '14 at 15:50
2
\$\begingroup\$

You have to make sacrifices, you cannot have the same immersion when some sounds aren't supposed to be heard by all the players. Some engines have built in solutions to this problem (example) but I couldn't find any information about the way it works.

Use stereo to separate the sound

(wiz3kid idea in the comments)

If the screen is split in the vertical way you can manage the different sounds to be played on the side of the proper player. It has been described here(Use Case 1).

In this example the sounds are attenuated by -96dB on the other side, which is equivalent to muting. (If my calculus are right, -96.3dB is like dividing by 15 million). I think it doesn't have to be so brutal. If you play each sound mostly on the side of the player who is supposed to hear them, the players will be able to distinguish a sound coming from their half or not and there will still be a bit of stereo.

This works the best when there are only two players, but in case of 4 players you can combine the sounds from the players vertically to use the same method.

Select the played sounds

I think the cacophony effect comes from the sounds that are long. In mario kart for example, the drifting sound volume is very low compared to the sound when an item is picked. The game sound may sound messy, but it isn't so much considering the sounds that are played. It could have easily been unlistenable.

Therefore the solution might be to filter out the long or repeated very often sounds. By attenuating the general noise, the important sounds will be easier to distinguish. I don't think it is a problem for a player to hear sounds that he isn't supposed to hear as long as he can easily hear the sounds that are important to him.

Relative to the closest player

In this thread they all agree that the sounds should be played once in total (not once for every player) relative to the most concerned player, the closest for example.

Tinus' point of view

Link.

I don't know him but he makes a unity plugin to handle split screen audio. He explains the method he would use on one of his post. I don't know if it is a valid approach since I don't understand most of it.

First go for the naive approach, just superimpose the listening perspectives and send them to the stereo output. This will not work for aurally intense games, but there's also plenty games for which this should be fine.

Next, introduce extra tools with which you can control the mix better. How you would use these depends on the game you're making, and how you think it should sound, but there's some possible common patterns. Of the top of my head:

  • Compressor/Limiter/Sidechaining effects on listeners and stereo outputs. It's hard enough to keep aurally dense Unity games from clipping, let alone when you add multiple listeners to the mix. A simple compressor at the end of the signal chain wouldn't be an elegant solution to this problem, but it would be a quick fix. I might try my hand at implementing a Compressor component using OnAudioFilterRead, actually.

  • High Dynamic Range audio. The newer entries in the Battlefield series use this to great effect. Again, it's no magic bullet that automatically cures your mix. But the HDR paradigm does seem like a powerful tool to help you organize dense and very dynamic mixes. Culling and prioritization are handled elegantly this way, which would no doubt come in handy for splitscreen setups as well. Caveats: DICE use custom software (not sure if FMOD could be juryrigged for this), and demands on audio asset creation become heavier.

  • Allow sound artists to prioritize sounds, and have some kind of mixer that manages sound priority between listeners. If player 2 really, really needs to hear this rocket that's about to hit him, perhaps you can duck the sound of player 1.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.