Community Q&A

Welcome to Audiokinetic’s community-driven Q&A forum. This is the place where Wwise and Strata users help each other out. For direct help from our team, please use the Support Tickets page. To report a bug, use the Bug Report option in the Audiokinetic Launcher. (Note that Bug Reports submitted to the Q&A forum will be rejected. Using our dedicated Bug Report system ensures your report is seen by the right people and has the best chance of being fixed.)

To get the best answers quickly, follow these tips when posting a question:

  • Be Specific: What are you trying to achieve, or what specific issue are you running into?
  • Include Key Details: Include details like your Wwise and game engine versions, operating system, etc.
  • Explain What You've Tried: Let others know what troubleshooting steps you've already taken.
  • Focus on the Facts: Describe the technical facts of your issue. Focusing on the problem helps others find a solution quickly.

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!
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? 

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