Please be advised that the Audiokinetic offices will close at 3:00 p.m. EST on December 23rd, 2019 for the holiday period, and will reopen on January 3rd, 2020 at 9:00 a.m. EST. Learn more.

Community Q&A

Where Wwise users help each other out!

Audiokinetic's Community Q&A is the forum where Wwise users ask and answer questions within the Wwise community. If you would like to get an answer from Audiokinetic's Technical support team, make sure you use the Support Tickets page.

Requesting coding help for setting RTPC value based on speed of vehicle from Unity Standard Assets.

0 votes
Foremost, I am attempting to teach myself what I can with C# on my spare time. I have had very minimal instruction on C# coding thus far (via Udemy), but am also attempting to practice what I can based on examples. I have become comfortable with posting events with code, and am trying to graduate up to controlling RTPC's with code.

Essentially, I have a Blend Container set up in Wwise, with five different engine loops at various RPMs, each with slight graduating pitch. In Unity, I am using the Car from the Standard Assets as my test subject. Additionally in Unity, I started a new script on the vehicle controller, and am successfully starting the engine with a PostEvent, like so:

-----------------------------------------------------------------------------

public class Engine : MonoBehaviour {

    private string StartEngine = "Engine"

    void Start () {

        AkSoundEngine.RegisterGameObj(gameObject);

    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            AkSoundEngine.PostEvent(StartEngine, gameObject);
        }

 --------------------------------------------------------------------

Next, for calling my Game Sync / Parameter, "EngineRTPC" I know that I need something in the ballpark of this:

------------------------------------------------------------------------

        {
           
            AkSoundEngine.SetRTPCValue("EngineRTPC", gameObject);
        }

---------------------------------------------------------------------

... but am stuck on what line of code I need above that to attach to the speed of the vehicle.

I have tried various combinations, with GetSpeed, mathf, Vector3, float, GetComponent, velocity, etc; but fear I'm way in over my head, with seemingly what might be one line of code.

Any help and / or explanation would be most appreciated!
asked Nov 13 in General Discussion by Dennis B. (100 points)
After some tinkering with some, most appreciated, help from various sources (here on the AudioKinetic Q&A as well as the Wwise Wwizards & Wwitches facebook group), I ran across a video by Bjorn Jacobsen that breaks this down to the bare bones of controlling an RTPC via the speed of a rigidbody. Hope this helps others as well: https://youtu.be/xkB17uhKeMw

1 Answer

0 votes

Hey Dennis, 

First off, are you aware that you are inputting the game object and not a float value into the .SetRTPCValue() function? 
You probably want it to look something like this: 
AkSoundEngine.SetRTPCValue("EngineRTPC", 23f);
where 23 is the value you set the RTPC to, and f means that it is a float value (the type of property that the function needs). 

Here's a suggestion to how you can get started, where you can change a slider to easier test your implementation.  

Start by making a float property, like...
[Range(0f,100f)] // This just displays a nice slider in Unity's inspector, that you can interact with. 
public float speedValueOfCar = 50; // Insert this outside any functions, but inside your script class. 

And then inside the update function could look like this: 
void Update() {
    if (Input.GetKeyDown(KeyCode.Space)) {
        AkSoundEngine.PostEvent(StartEngine, gameObject);
        }
        AkSoundEngine.SetRTPCValue("EngineRTPC", speedValueOfCar);
}

Now save, and then return to Unity, click Play, start the sound and try out the slider. 

Tip: Do you know about Wwise-Types? They can be a bit simpler to call, compared to AkSoundEngine functions. To start with your example, you could do this instead: 
    [Range(0f,100f)]
    public float speedValueOfCar = 50;
    public AK.Wwise.RTPC CarSoundRTPC; 

    void Update()
    {
        CarSoundRTPC.SetGlobalValue(speedValueOfCar);
    }

And then you'd get a nice button in the inspector, where you can select an Event and not have to check for typos. 

Does this make it clearer? 

answered Nov 13 by Mads Maretty S. (Audiokinetic) (2,480 points)
Wow, thanks so much, Mads! I'll give these techniques a try and will repost on how it worked out! Cheers!
...