Event direction questions

Hello, great people here! I have a question: im working on a spaceship simulator and i want to make a sound of an engine to follow the maneuvers of a pilot. For example - if the pilot turns right, the sound goes to the right channel and so on. Like it was done in Elite Dangerous.
So, my problem is: the spaceship engine sound event and the Listener on the camera are placed on the spaceship itself, and the sound seems to be pinned to some spot on the horizon. It results in weird situation, when i turn right and the sound goes from the right channel. Is there some easy way to fix this? Maybe create a “Direction” parameter that takes Vector 3 from the game code, that tells it where the spaceship is turning?
Right now im using Event Orientation parameter and it seem not to be working like i want it to work
Thank you all in advance!

It sounds like your game is not rotating the event emitter with the spaceship when the spaceship rotates. This may be because the event emitter is attached to a point in the world rather instead of being attached to a point on the spaceship.

Truth be told, I haven’t played Elite Dangerous, so I’m not entirely sure what you mean by the sound of the engine going to the right channel when turning right; that seems like it would create the effect of the engine moving independently of the player’s perspective, rather than with it. What effect are you trying to create?

Hi, Joseph! My mistake, i should have written: “some layers of the engine sound should go to the right channel when turning right”. In Elite Dangerous it was done in a way that you have your main engine sound in the middle and when you turn right/left you hear some sort of “thrusters” on the sides.
I don’t use Event Emitter here, my engine audio script is attached to the game Widget that is responsible for the ship’s engine. The method itself looks like this:

private void EnergyActivate()
{
if (!_audioEnabler.IsAudioEnabled || _isAudioActive)
return;

        _isAudioActive = true;

        // on engine started
        _shipEngine = FMODUnity.RuntimeManager.CreateInstance("event:/Sfx/Engines/MainEngine");
        _shipEngine.set3DAttributes(FMODUnity.RuntimeUtils.To3DAttributes(_spaceship.SpaceshipAvatar.Position));
        _shipEngine.start();
        _shipEngine.release();
    }

Thanks for the clarification.

There’s a couple of ways you could do this. The simplest would be to create the “steering thruster” as a separate event, and create an instance of that event behind and to the right of the player avatar whenever the player turns right.

If you’d prefer to keep everything inside one event, the simplest option would be to put the steering thruster instrument on a new audio track on a parameter sheet of that event, set that track’s output panner to whichever channel format your game uses, and then use the panner widget to pan that track’s signal to a postion in the right (and potentially rear) speakers. Automating the panner widget’s properties should allow you to use the same track and instrument for multiple different steering directions.

Thank you for your advice! I already done thrusters positioning on a parameter, like you mentioned. You also said that it may be that the event is somehow pinned to a point in the world - i shared this opinion with my programmers and we will review the code to check if it’s true. Right now i oversee the problem like this: both listener and an event exist on the spaceship, but when rotating either listener or an event are pinned to some point in the world, so the “thrusters” are rotating in a wrong manner

Hmm… It’s possible that the event instance is pinned to the spacehip’s location, but not its rotation, such that when the spaceship turns the event instance continues facing the same way, and so plays directional sounds from the wrong directions.

That’s just speculation on my part, though. Without seeing your game, it’s hard to be certain.

1 Like

Yeah, i find it quite possible! Thank you, i ll reach out to my programmers with this thought

Also, one question: what do you feed as an argument in your default parameters like “Direction” or “EventOrientation”? Does it take Vectror3 from an event? In what class can i look em up?

All built-in parameters’ values are calculated automatically based on the position of the event emitter relative to the listener, as defined by their 3D attributes.

As described in our documentation on this topic in both the FMOD Studio User Manual and the FMOD Engine User Manual, the direction parameter type is the angle between the direction the listener is facing and the direction from the listener to the event instance, in degrees; and the event orientation parameter type is the angle between the direction the listener is facing and the direction the event instance is facing, in degrees.

1 Like