Area sound emitter

Hi!

Is there a way (actually, what is the best way?) to create an area sound emitter, where the sound parameters are calculated based on listener position relative to a shape.

This kind of area sound emitter can be a river - listener can be next to it and moving along, hearing river sound constantly on one side. But then, listener may approach a river bend, so the sound should be audible from side and front. Or listener may be standing on an island, so the sound should come from all sides - of course taking also into account distance from listener to river in each direction.

Have you seen this video by CujoSound: https://www.youtube.com/watch?v=qaEWk4KiNT4
The idea is that sound source moves along with player but on river object. As for river band you can probably use separate instance of same loop for each part of bended river. Not a complete solution but hope it will help

What you can easily do in unity is to constrain the emitter to the object’s bounds and make it follow the player’s position.

Thanks @FoxyMusic and @alexzzen for suggestion - both are valid options, but both are on Unity side. Was hoping to find sth from FMOD side that can help me with this task - like Wwise Large Mode in example.

At the time of writing (May of 2020), FMOD Studio only supports point source emitters.

We may add 3D-volume source or spline source emitters in an upcoming version, but for now, you will have to fake these more advanced emitter types by using your game’s code to move the emitter, as FoxyMusic and alexzzen suggest.

You might find it work looking at the sound size property of the spatializer effect. This property causes the extent of emitters to increase as the listener gets closer, making them sound less directional as the listener gets closer.

Thank’s for the info @joseph

I was thinking about using Transceiver/Receiver system for this. Currently I am placing event instances (receivers) all over the river. Then, on the fly I check the distance between receiver and listener and if it is under a threshold, I start receiver event. Otherwise I stop it.

However, I have some performance considerations about this system. So I have a few questions. I know, that answer to them is: it depends. But I am looking more for a rule of thumb, to know what is affecting performance and what is not, than any hard data and answers.

  1. Does amount of stopped receiver event instance affect the performance? If yes, than in what way and how many is too much? Tens, hundreds, thousand, millions?
  2. Does started receiver events affect the performance? Well, this I know the answer - yes. But in what way? And again, what amount is too much? Tens, hundreds, thousand, millions?
  3. Does amount of such Transceiver/Receivers pairs matter? (by pair I mean one transceiver and many receivers for river, and for example another pair is one transceiver and many receivers for forest). If I have 2 transceivers with 4 receivers each is it equivalent (mostly in terms of performance) to a 1 transceiver with 8 receivers? Or are there some other things to consider (apart from channel amount).

Well, these are my basic considerations, hope you can answer them more or less.

Thanks for the info about sound size property. I was actually thinking about changing the sound to 2D if listener is really close - but I don’t know yet if this is even possible in my setup - just a thought.

@pmduda your setup seems pretty interesting. Would you like to share some screenshots or a video of how you’re using the transceivers and receivers in FMOD, and how that’s set up in you game engine? :slight_smile:

If an event instance is stopped, its transceiver effects aren’t active, and so do not consume resources.

Of course, every event instance takes up a small amount of memory even when stopped, but it’s negligible in most cases.

A transceiver effect is about as heavy as a send, which is to say, they’re fairly cheap. That being said, every event instance that contains a receiving transceiver effect is an event that’s playing, and playing event instances take up resources.

Under-the-hood, transmitting transceiver effects function by sending a copy of the signal to the transceiver channel, which functions like a sort of hidden bus in that it creates a mix of all the signals it receives as inputs from the transmitting transceiver effects set to that channel, then sends the mixed signal to each receiving transceiver set to that channel. As a result, the resource cost of a transceiver effect set to transmit is comparable to that of a send, the resource cost of a transceiver effect set to receiver is comparable to that of a gain effect, and the resource cost of a transceiver channel is comparable to that of a return bus. All of these things are reasonably cheap.

The easiest way to do this is to open the pan override drawer of a spatializer effect (but clicking the disclosure triangle in the middle of the effect’s deck panel) and automate its “Mix” property on the Distance built-in parameter. If you set this property to 100%, the event will behave completely 2D.

@Paalo Thanks for asking! Here is a short video. The yellow dot on a stick represents our sound listener. Red/green dots represents receiver - each has it’s own game object and own receiver event - both instantiated at Awake phase. Receivers events are started (or stopped) based on it’s distance do sound listener. If they are close enough - they are playing - green dot. If too far - stopped - red dot.

@joseph

The easiest way to do this is to open the pan override drawer of a spatializer effect (but clicking the disclosure triangle in the middle of the effect’s deck panel) and automate its “Mix” property on the Distance built-in parameter. If you set this property to 100%, the event will behave completely 2D.

But this changes it completely to 2D, as you said. I was thinking more about changing the behavior during runtime. If I am away from river - make it 3D to have sense of direction. If I am next to the river or over the river - than make it 2D.

Have you considered automating the Mix property on the distance built-in parameter? This would allow you to make the event 2D only when the listener is in close proximity to the emitter.

Interesting implementation, but it looks like there’s gonna be lots of phase issues and probably volume might be not even as you always hear a mix of different number of sources ? Can’t say it from video cause i got no sound in it.

@FoxyMusic Using receiver/transceivers pair causes that there is only one sound source - so no phasing and volume problems. All this green/red dots are not transmitting real sound, but they helps to calculate proper 3D parameters for a single sound event that is playing the sound.

I am more of a code guy than a sound guy, so I hope I didn’t mess up anything explaining - this is how I understand this.

All in all - our river sounds fine :slight_smile:

@joseph Thanks for the idea! That sounds simple and really easy to implement.