Wwise Installation

To install Wwise you will need to create a Wwise Account and download a Wwise launcher. The Wwise Launcher is a tool by Audiokinetic used to install, manage, and integrate the Wwise with other software and game engines, like Unity or Unreal Engine. 

Download Wwise Launcher

  1. Download Wwise launcher from the following links  

Windows

  1. Log in or Register a new account in order to be able to download the launcher.
  2. Once downloaded, install the Wwise Launcher. 

Install Wwise version 2023.1.0.8367

Now, you will need to install a specific version of Wwise to establish a connection with our game.

  1. Open Wwise Launcher
  2. Log into your account by clicking Log in in the top-right corner

  1. Click on the Wwise tab on the right-hand side

  1. Select a correct version to install by changing dropdown menus under INSTALL A NEW VERSION to All > 2023.1 > 2023.1.0.8367

      

  1. Press Install
  2. Under Packages check Authoring and SDK (C++)

For Mac:

  1. Under Deployment platforms, expand Apple and check macOS 

For Windows:

     10) Under Deployment platforms, check Microsoft

  1. Do not choose any other plugins apart from already selected Mastering Suite 

  1. Press Install

After the process of installation is finished you should get the prompt saying Install operation completed successfully.

Game & Course Material 

Download the Game and all the relevant course material from the following link:

Mac

  • Unzip the .dmg file and follow the instruction in ReadMe.pdf 

Windows

After download and installation try running the game by double-clicking FPS_SpaceShooter_212_RCM_Mac.app on Mac and FPSMicro_StartGame.exe on PC

Preparing the Game for Wwise on Mac computers:

The Mac system packages all the necessary files and folders under one .app file. As such it is very easy to use the game and move it across the system, however it limits the access to the subfolders we will need to modify when creating our music system. Windows users can skip this step and immediately go to Lesson I.  

We will need to modify the .app file in order for Wwise to access needed sub-folders. 

  1. Right-click the FPS_SpaceShooter_212_RCM_Mac.app
  2. Select Get Info

  1. In the Info window remove .app from the app Name & Extension

  1. When prompted with: Are you sure you want to remove extension, select Remove

FPS_GamesModule_NFTS, has become a normal folder with additional sub-folders.

Since FPS_GamesModule_NFTS is only a folder it will not run the game when Double-clicked. 

To run the game we need to follow these steps: 

  1. Go to FPS_SpaceShooter_212_MAC/Contents/MacOS
  2. Double-click the FPSMicro_StartGame

Game should run as before.

Lesson I: Starting from Scratch

In this lesson we are going to start from scratch. We will remove all sounds from the game, create a new blank in the Wwise session, import music and create everything needed to successfully implement title music into the game. 

Removing the sounds from the Game

In order to hear the differences between the newly added material better, we are going to remove all the sounds from the game. Game should still work normally but it will be without any sound. 

In order to remove sounds from the game we should do the following:

On Mac:

  1. Go to FPS_SpaceShooter_212_RCM_Mac/Contents/Resources/Data/StreamingAssets/Audio/GeneratedSoundBanks/Mac
  2. Delete all the files inside MAC folder 

Note: Be sure to remove only the contents of Mac folder and not the folder itself

  1. Once you have removed the files from the Mac folder, try running the game. 

Game should play normally but you won’t be able to hear any sound because all the sounds and music were deleted from the game. 

On Windows:

  1. Go to FPS_SpaceShooter_212_RCM_PC/FPSMicro_StartGame_Data/StreamingAssets/Audio/GeneratedSoundBanks/Windows
  2. Delete all the files inside Windows folder 

Note: Be sure to remove only the contents of Windows folder and not the folder itself

  1. Once you have removed the files from the Mac folder, try running the game. 

Game should play normally but you won’t be able to hear any sound because all the sounds and music were deleted from the game.

Creating a new Wwise Session

Ok! Now let’s create a new Wwise session.

  1. Open the Wwise App
  2. In the project Launcher select New…

  1. In the New Project Window name the project FPS_Lesson1
  2. Choose the location of this project by pressing (...) symbol and choosing location on your disk. 

  1. Go to Platforms and 

if you are on the Mac:

  •  press Add… 
  • From Base Platform Drop Down menu select Mac
  • Press Ok

If you are on the PC:

  • Make sure Windows is present in the Platform view. 
  • If not press Add…
  • From Base Platform Drop Down menu select Windows
  • Press Ok

Mac:

Windows:

  1. In the Import factory assets to project click on Select None
  2. Finally press OK (at the bottom right of the New Project Window

  1. In the Licence Manager window select Close

Importing Audio in Wwise

Now we are ready to import our first piece of music.

  1. Go to Layouts and select Designer Layout. 

  1. In the Project Explorer View select Default Work Unit inside of Interactive Music Hierarchy

  2. Right-click on it and select Import Audio Files…

  1. In the Audio File Importer Window click Add Files…
  2. Navigate to Audio Files folder in the downloaded Course Material
  3. Go to LessonMaterial/Lesson1/
  4. Select Music_Titles_83_44_Pm1.wav
  5. Press Open 

Note: The Chosen file appears in the Audio File/Folder Area

  1. Press Import 

Note that the Default Work Unit inside Interactive Music Hierarchy is highlighted and it has an arrow in front of it, signifying that it has content. 

  1. Press the arrow (>) In front Default Work Unit to expand it and show all of its content. 

  1. Select Music_Titles_83_44_Pm1 Music Track

  2. Press Play in the Transport Control View or Press Space Bar to play the music to listen to the imported track. 

If you can not hear any sound coming out of the speakers you haven’t set the Wwise application audio output correctly. To do so:

Setting Audio Output

  1. Click on the Audio dropdown Menu in the top left of the Screen. 
  2. Select Authoring Audio Preferences

  1. Select your Sound Device from the dropdown menu in Authoring Audio Preferences 

  1. Press Ok
  2. Try Playing the Music_Titles_83_44_Pm1 track again. You should be able to listen to the track now.

Creating an Event

For everything that happens in the game that may need an audio response, a

programmer has added lines of code to transmit a message informing Wwise

about what has occurred. This message is referred to as a Game Call. Game Calls

are just simple messages that say things like “Titles Have started”, but

in reality this message is sent as a string of text or numbers. When this message is

received by the audio engine, any number of things can happen as defined by you.

The first thing that you need to do is to create an Event, so that Wwise can catch

an incoming Game Call. Think of it like a game of catch between the game engine

and the audio engine. The ball being thrown from the game engine is the Game

Call, while an Event is a type of object within Wwise designed specifically to

catch Game Calls. The important thing to note is that each Game Call needs an

identically named Event to be received by Wwise.

To create an Event to trigger the music we have imported we need to follow these steps:

  1. In the Project Explorer View click on Events tab

  1. Select Default Work Unit inside the Events Folder

note: once Default Work Unit is selected Event Icon becomes available in the row of icons just below the Events tab

  1. Click on Event Icon  
  2. Name the event exactly as this: Music_Game_Start and hit Enter

  1. Make sure the Music_Game_Start is selected
  2. In the Actions View in the middle top of the screen press  and select Play

You can see that the new action is created but there is a Red Rectangle inside the Target column that signifies that the Target is missing. 

  1. Right-click inside the red rectangle and select Browse

  1. In the Project Explorer Browser expand Interactive Music Hierarchy and Default Work Unit to select Music_Titles_83_44_Pm1

  2. Press OK

  1. In the Project Explorer View Unter Events tab Select newly created event Music_Game_Start and hit Spacebar. 

If you can hear the Title Music playing you have correctly created and set up your first Event. 

We have created an Event that plays the Title music but we will need one that stops the music when the Player presses Play button in the game. 

This time we are going to use a slightly different method than before. 

  1. In the Project Explorer View select Events tab and Right Click on Default Work Unit inside Events Folder. 

  2. Select New Child → Event

  1. Name the Event exactly as follows: Music_Stop_Titles
  2. Right-click anywhere in the blank space of Actions View
  3. Select New Action → Stop → Stop

  1. Right-click inside the red rectangle and select Browse

  2. In the Project Explorer Browser expand Interactive Music Hierarchy and Default Work Unit to select Music_Titles_83_44_Pm1

  3. Press OK

Creating a SoundBank and associating Events with the SoundBank

Before we begin creating a SoundBank, let’s take a moment to understand two very important concepts in Wwise: Work Units and SoundBanks.

Wwise Work Unit is a file within the Wwise project that organises and stores specific audio data, settings, and configurations. Work Units are used during the development process to structure and manage different aspects of the audio content, such as sound effects, music, or dialogue. They allow team members to work on separate parts of the audio project simultaneously.  F.e. You can have Sound and Music Work Units, as is the case in our game. 

SoundBank is a compiled package generated from the Wwise project, containing the actual audio assets, events, and instructions necessary for the game or application to play the sounds. SoundBanks are loaded into the game engine at runtime, providing the audio resources needed during gameplay. Typical released games normally have multiple Sounbanks. F.e. Each level of a game can have its own SoundBank. Game saves a significant amount of resources If only sounds that are actually needed are loaded in a particular level.

In order for our Titles music to be heard in the game we need to create a correctly named Work Unit, SoundBank and associate Events that we created with it. 

  1. In the Project Explorer View click on SoundBanks tab
  2. Select SoundBank Folder and Click on create Work Unit icon that becomes enabled once the SoundBank or the Folder is selected. 

  1. In the Work Unit window name the Work Unit Music
  2. Press Create

  1. Select newly created Music Work Unit and Click on create SoundBank icon that becomes enabled once the Music Work Unit is selected. 

  2. Name the SoundBank Music

Wwise offers multiple different assemblies of views and windows. We can choose a Layout depending on a task we wish to do. If we wish to import and manipulate an asset we can choose a Designer layout which has the assembly of all the needed views, and if we wish to Mix several different sounds we can open a mixer layout. In order to associate Events with Soundbanks we will need to open a Soundbank Layout which will assemble all the necessary windows to do that. 

  1. Switch the Layout to Soundbank. 

  1. In the SoundBank Manager Expand the Music Work Unit in order to see Music Soundbank
  2. Check the box in front of Music Soundbank

  1. Locate the Event Viewer View (Bottom Left of the screen)
  2. Select both events 
  3. Drag and Drop the events into Music SoundBank

Connect Wwise session with the Game

In order to successfully load the sounds into the game you will need to set up a correct for inside Wwise Project SoundBank Settings. 

  1. In the Wwise Project go to: Project → Project Settings

  1. In the Project settings Window press SoundBank tab

  1. Under SoundBank Settings Deselect Enable Auto-Defined SoundBanks

On Mac:

  1. In Root Output Path press (...) to navigate following folder inside the game:

FPS_GamesModule_NFTS/Contents/Resources/Data/StreamingAssets/Audio/GeneratedSoundBanks

  1. Under SoundBank Paths and Mac change SoundBank Folder by clicking (...) symbol
  2. Navigate to Game and the Sub-Folder: 

FPS_Test-15/Mac/FPS_GamesModule_NFTS/Contents/Resources/Data/StreamingAssets/Audio/GeneratedSoundBanks/Mac

On Windows:

  1. In Root Output Path press (...) to navigate following folder inside the game:

FPS_GamesModule_NFTS_Windows/FPSMicro_StartGame_Data/StreamingAssets/Audio/GeneratedSoundBanks

    5) Under SoundBank Paths and Windows change SoundBank Folder by clicking (...) symbol

  1. Navigate to Game and the Sub-Folder: 

FPS_GamesModule_NFTS_Windows/FPSMicro_StartGame_Data/StreamingAssets/Audio/GeneratedSoundBanks/Windows

Generate session and test the game

  1. In Wwise Go to: Layouts → SoundBank

  1. Make sure that in the Platforms the Mac is checked if you are working on a Mac System or Widows if you are working on a PC.

  2. In Languages check English

  1. Press Generate All

  1. Run the Game again.

If you can hear the sound again you have successfully connected Wwise and the game. If not, repeat steps from the Connect Wwise session with the Game. Make sure that you have selected the correct destinations.

Lesson II:  Looping, Re-Sequencing, and Randomisation

As game composers, we often face the challenge of not being able to predict exactly how long a player will take to complete a section of the game we're scoring. For example, one player might press "Play" within 5 seconds, while another might take 5 minutes to savour the beauty of the music and scenery before doing so. This variability is challenging because, in addition to composing interesting music that supports the game's concept, we need to make a single piece of music adaptable to various lengths while maintaining the player's interest. Fortunately, Wwise offers several tools to help us achieve this. In this lesson, we will explore some of these tools and the basic concepts behind them. 

Please download and UnZip the necessary Material for this lesson by clicking the link below:

  1. Open Wwise
  2. In the Project Launcher press Open Other…

  1. Navigate to Downloaded course material and go to folder Lesson2/ FPS_Lesson2 and select FPS_Lesson2.wproj and press Open

Once the project is opened, you'll notice there is quite a bit of new material compared to the session from the previous lesson. If you expand the Actor-Mixer Hierarchy and its Default work unit, you'll see it is populated by numerous sounds. These are the same sounds you could hear in the original game. The reason for including them in this session is that when you generate soundbanks and play the game, you'll have both music and sounds, which can help you assess your work more effectively.

  1. Following the same Steps as in Connect Wwise session with the Game and Generate session and test the Game from the previous Lesson.

  2. Play the game and test how it works with the title music you successfully imported.

Creating a Loop 

Now try playing the game again, but this time, wait a bit longer before pressing Play. Notice that the music eventually runs out, leaving an empty sonic space. This is a classic case where we would aim to create a loop of our music. This approach allows the music to continue playing until the player presses the Play button, at which point our Music_Stop_Titles event will stop it.

  1. Make sure that you are in Design Layout
  2. Select Music_Titles_83_44_Pm1 Music Object
  3. In the middle-bottom part of the screen Select Music Segment Area. 

To create a loop, we need to instruct Wwise on where the audio should stop and where it should return. In Wwise, these points are marked by green and red flags.

We could try moving those flags right away, but we'd quickly realise that without a tempo grid, it would be a very laborious process.

Wwise allows us to use a visible tempo grid; however, to utilise it, we need to enter the tempo information, time signature, and other details—all of which are conveniently provided in the file name.

  1. Enter the Tempo in the Property Editor View under Time Settings → Tempo
  2. If the Time Signature is anything than 4/4 change it to 4/4

  1. Right-click the time measurer in the Music Track View located just above the wave form and set it to Bars and Beats

  1. Set Snap to: to Bars/Beats

  1. While Holding Command Key Grab the Green Flag and Move it to where bar number 2 is located. 

Note that while holding Command and dragging the Green Flag, you are effectively moving the bar marker. After this action, your bar 1 should now be where bar 2 was previously.

  1. Grab the Red Flag at the end of the File and move it to bar 17.

By Setting Green (Pre-Entry) Flag and Red (Post-Exit) Flag you have defined three different zones in your Music. 

Even though you have successfully defined where the loop is going to happen, if you play the file it will not loop. In order for music to loop we will need to create a Music Playlist Container Object. 

  1. In the Project Explorer View Right-click Music Track Music_Intro_83bpm_44_L16m_P1m

  2. Select New Parent → Music Playlist Container

  1. Call this Playlist container IntroMenuMusic

  2. Expand the newly created Playlist Container so it reveals Music_Intro_83bpm_44_L16m_P1m Music Segment. 

  3. Select IntroMenuMusic Playlist Container  

  4. In the bottom of the Property Editor View click on Music Playlist

  1. Grab the Music_Intro_83bpm_44_L16m_P1m music segment from the Project Explorer View and drag it anywhere in the Group/Segment Area.

It's perfectly normal not to be successful on the first try. This particular function can be a bit fiddly and definitely takes some getting used to. If it doesn't work, just repeat steps 14-16 until you get it right.

  1. In the Group/Segment Area set Loop Count to Infinite by pressing the bottom arrow or typing in 0. 

  1. Make sure that IntroMenuMusic is selected and hit space to listen to your work. 

You can also build the game repeating the steps Generate session and test the game and test the loop in the Game.

Adding Audio Effects

While Wwise offers a range of audio effects, it is not customary to add those effects at this stage. Typically, all processing is done in a DAW (Digital Audio Workstation). The primary reason for this is that effects consume a significant amount of CPU power, and since processing power is one of the most crucial resources in game development, it's always advised to use as little of it as possible. Additionally, it's good practice to divide tasks: composition and mastering should be done in your DAW, while Wwise should be used for implementation only. However, under the right circumstances, adding FX in Wwise can be very useful and time-saving. Wwise also offers methods to prevent additional CPU usage when processing audio effects.

Listening to Music_Intro_83bpm_44_L16m_P1m In the game, I realised that the mix wasn't up to standard. The file had excessive amounts of low and high-end frequencies, so I corrected it by adding an EQ to tame those frequencies.

  1. Select Music_Intro_83bpm_44_L16m_P1m music segment.
  2. In the Property Editor View select Effects tab.

  1. Choose Add Effect → Parametric EQ → New…

  1. In the New Effect window select Default Work Unit, Name the EQ Instance IntroMusic_EQ and press OK

  1. In the Effects Area click Edit

  1. In Tab Group Window change Band 1 Gain to -5 and Frequency to 200 
  2. Change Band 3 Gain to -5 and Frequency to 3000

  1. Close the Window and play IntroMenuMusic to hear the results. 
  2. In the Effects area tick the Render square. 

By ticking the Render option, you are instructing Wwise to render or burn-in the effect with the audio file when generating the Soundbank. This way, the game won’t use any additional CPU for processing the effect, but you'll still be able to change the effect's properties in Wwise even after rendering.

Re-sequencing

This is a powerful concept within Wwise that allows you to reorder and randomise different parts of a composition, creating interesting variations of the music and drastically prolonging its duration.

To learn how to use this feature, we are going to start working on a new segment of the game called InGame.

  1. Navigate to Lesson 2/Audio/ that you have downloaded at the beginning of this lesson
  2. Select all files in that folder and drag and drop them onto the Default Work Unit in Interactive Music Hierarchy

  1. In Audio File Importer press Import
  2. Play each one of them and get acquainted with the music

You will soon notice that all three files are different parts of the same composition, each with its own loop. This was done to enhance blending between the parts of the composition.

You can see that better from the original DAW session:

  1. Select all three InGame Music Segments
  2. Right-click them and choose New Parent → Music Playlist Container

  1. Select InGameMusic Playlist container
  2. In the Property Editor View change tempo to 118. (As found in the name of all three imported files)

Note that by changing the tempo in the Parent Playlist Container, all three Music Segments inherit the new tempo. Inheritance is a very important concept in Wwise, and being aware of it can save you a lot of time when creating your music system.

  1. Go to each one of the three Music Segments and using information from the file name  set the Red (Post-Exit) Flags to their correct location. 

Note that since all three files do not have any pre-entry (P0m) we do not need to move the Green (Pre-Entry) Flag. 

  1. Select InGameMusic Playlist container 
  2. Grab and Drag and Drop each one of the InGame Music segments and drop the in the Group/Segment Area 

Note that you will need to do this by dragging and dropping each one individually.

  1. Change Sequence Continuous Group loop count to Infinite. This will allow this sequence to loop indefinitely. 

  1. Select InGameMusic, press Play and listen to the result

You will notice that the Playlist Container plays the sequence in order: first A, then B, and finally C. After that, it loops and repeats the same sequence. The currently playing segment is indicated by a small triangle        in front of the segment.

Even though the system is functioning, it doesn't make much sense to use it in this way, as it would be more economical to simply export one long file with A, B, and C included and set it to loop.

  1. Change the Group to Random Continuous by Clicking on the Dropdown menu where it currently says Sequence Continuous

  1. Select InGameMusic, press Play and listen to the changes

You will note that the music is not played in Sequence. The elements sequence of elements are chosen Randomly and they are different with each Loop.

Controlled Randomization

In some instances, we may want more control over randomization. During testing, I discovered that I would like the sequence to always start with the A part, then move to either the B or C part, before returning to the A part. Luckily, Wwise has built-in functions that allow me to do exactly that.

  1. Select InGameMusic Playlist container. 
  2. Create a New Group by pressing  at top right of Group Area

  1. Move fist B and then C segment to the newly created Group

  1. Change the newly created group to Random Step

Random Step is different from Random Continuous in that it will randomly choose only one element from the group and finish the sequence. Whereas Random Continuous will play all elements in the group in random order before finishing the sequence.

  1. Change the original Group currently set to Random Continuous to Sequence Continuous  

  1. Select InGameMusic, press Play and listen to the music  

When listening to the InGame music, I discovered that I would like the C part to occur less frequently. I want it to be more of a flourish rather than a regular part of the composition.

I can achieve this by adjusting the Weight or percentage chance of it being chosen in the group:

  1. In the Weight Column of Group/Segment area change the percentage of C to 20
  2. To make sure the B part is strongly favoured, change its weight to 70
  3. Select InGameMusic, press Play and let the music play for a while in order to observe the changes  

Playlist containers have many other useful functions that we do not have time to cover in this course. However, you can learn about their functionality by accessing the item-specific help documents.

For example, if you are interested in learning more about the Random Type and Avoid Repeat columns in the Group/Segment Area, you only need to:

  1. Click anywhere in the Group/Segment area
  2. Select Question Mark symbol at the top-right of Game Settings View 

Randomisation of parameters

We have learned how to randomise elements of the Playlist and also how to control randomization. Let’s have a brief look at how to randomise some parameters in the Playlist container.

Let’s say that I would like the A part of my InGameMusic playlist to sometimes repeat before moving to the next segment. We can achieve this by randomising the Loop Count in the Group/Segment area.

  1. In the Loop Count of A_InGame_118bpm_44_L8m_P0m segment Double-click tennis ball icon just before number 1

  1. In the randomizer Window check the Enabled Value and then set the Max Offset to 2

  1. Select InGameMusic, press Play and listen to the music

Note that the randomization of parameters is also available for other Wwise parameters such as Volume, Pitch, etc. Whenever you see the tennis ball icon randomization is available. When this icon turns golden , it means that randomization for that parameter is engaged.

Lesson III: Creating a Music System 

In the previous lessons, we successfully imported, looped, and randomised music for two different scenes of the game. In this lesson, we will focus on creating a music system that allows us to seamlessly transition between these scenes. Additionally, we will explore how to test the system in Wwise and how to add musical embellishments such as transitions and stingers.

Please download the necessary Material for this lesson by clicking the link below:

Creating a Music Switch Container: 

In order to start creating our Music System we will need to create a Music Switch Container. 

  1. Open FPS_Lesson3 Wwise project. 
  2. In Project Explorer select InGameMusic and IntroMenuMusic
  3. Right-click one of them and select New Parent → Music Switch Container

  1. Name the Object Music

Creating Event to trigger Music Switch Container:

Now we need to create an event that will play our Music System at the beginning of the game.

We learned one way of creating an event in Lesson 1. Now, we will use a different method:

  1. Select Music Switch Container
  2. Right-click on the Music and select New Event → Play

  1. In the Name field of the Events property editor that appears in the middle of the screen, change the name of the event to: Music_Game_Start. 

Note that, as before, the name of the event must be exactly the same for it to be called correctly from the game.

If you try playing that object, you will notice that no music is playing. This is because the Music Switch Object, apart from the Action play, requires us to define the states of the gameplay and associate the correct music objects with them.

Creating States

Game States define the overarching context of the game at any given time. For instance, we have defined five different states in which the player can be. At the beginning of the game, the player is in the Title State. Once the player presses the Play button, the state changes to FirstFloor State. When the player finds the key and enters the corridor to go to the Basement, the state changes to Basement State. If the player manages to destroy all the enemies, the state changes to Victory. If the player is defeated, the state changes to Defeated.

States are global events, meaning that all objects are aware of the state changes. However, developers can decide which objects react to these changes. In the game's code, we have decided that state changes will be sent to Wwise to switch music in the Music Switch Container. Even though the state changes are hard-coded in the game, we need to create the correct recipients in Wwise.

  1. In the Project Explorer click the Game Syncs tab.

  1. Expand the States folder in order to see the Default Work Unit.

  2. Right-click the Default Work Unit and select New Child → State Group

  1. Name the State Group MusicState

We have created a State Group; now we need to define each state within that group.

  1. Select MusicState group and press add state icon at the top of the Game Sync Area inside the Project Explorer. 

  1. Name the State Titles.

  2. Create 4 more States repeating step 5) and name states so they match exactly the Names in the picture below.  

Now that we have created State Group and States in Wwise we can Associate our Music Object with the correct States. 

Associating Music Objects with States

  1. In Project Explorer Click on the Audio tab and select the Music Switch Container.
  2. In the bottom of the Property Editor View select Music Switch 

  1. In The Switch Container Association Editor press symbol and select State Groups → MusicState.

  1. Expand the Music Switch Container so it reveals InGameMusic and IntroMenuMusic.

  2. Drag and Drop IntroMenuMusic to Titles State in Association Editor. 

  1. Drag and Drop InGameMusic in First Floor State in Association Editor.

  1. Select the Music Switch Container 

  1. In the Transport Control View press the States icon 

Note that the MusicState Group appears with a dropdown menu that allows us to choose the state directly from the Transport bar. This is a very useful feature for testing the system.

  1. In the Transport Control States Area choose Titles and press Play. 

Now you can hear the IntroMenuMusic playing. 

  1. Press Stop

  2. Now change the State to FirstFloor and press Play 

InGameMusic should be heard. 

The change of state should automatically trigger the associated music without needing to stop and replay it. However, if we try this, we’ll discover that it’s not working. This is perfectly normal because we haven't yet defined how one segment should transition to the other.

Defining State Transitions

  1.  Select Music Switch Container.

  2. In the Property Editor View click on the Transition tab.

  1. Add new Transition by clicking Add Transition Button  

  1. Clicking the symbol in the Destination column and choose Browse.

  1. In the Project Explorer - Browser choose InGameMusic and press OK.

If we look at the Source area of the Transition Tab, we can see that the Exit Source is set to "Exit Cue." This means that the system is waiting for the segment to reach the Post-Exit zone. Since we have set all of our segments to loop infinitely, our source will never reach the Exit Cue. This is precisely why the music segments do not change when we change the state.

By changing the Exit Source to one of the following options: Immediate, Next Grid, Next Bar, or Next Beat, we will be able to transition from one segment to another without needing to stop and start the Transport Control.

  1. Set Exit source at: to Next Beat. 

  1. In Transport Control Set the State to Titles and press Play.
  2. While the Titles music is playing, change the state in Transport Control to FirstFloor.

Now the transition works; however, it is very abrupt and not very musical. We could try and solve that issue with blending both segments with the use of Fades.

Transition Fade-in and Fade-out

  1. In the Source area of the Transition tab check the Fade-out box. 

  1. Click on the Edit button next to the Fade-out
  2. In the Music Fade Editor set Fade Time to 1 and Offset to 1

  1. Check the Fade-in box in the Destination Area and press Edit.  
  2. Set Fade Time to 1 and Offset to -1. 
  3. Try Playing the Music Switch container and switching to FirstFloor State. 

Transitions sound better with crossfades; however, there is an inherent problem: the two music segments are in different tempos, which will always prevent a smooth transition between them. This is a classic example of a situation where a Transition Segment might be very useful.  

Transition Segments

  1. Right-click Music switch container and select New Child → Virtual Folder

  2. Name the Folder Transitions

  3. While the folder is selected enter Shift + I keyboard shortcut that will open the Audio File Importer Window.

  4. Press Add Files… and navigate to the LessonMaterial\Lesson3\Audio

  5. Choose To_Ingame_44_120_L2m_P0m and press Import.

  6. Select To_Ingame_44_120_L2m_P0m music segment and define Entry and Post-Exit zones as indicated by the file naming convention. 

  7. Select the Music switch container and press Transition tab.

  8. Select transition Any to InGame Music. 

  9. In the Transition Segment area of the Transition tab check Use transition segment.

  1. Drag To_Ingame_44_120_L2m_P0m from Project Explorer and drop it in the Transition Segment area. 

  1. Test the result by playing Titles and switching state to FirstFloor.

Import Victory and Defeat Music

Lastly, we are going to import two audio files and associate them with Defeat and Victory States.

  1. Select Music playlist container.

  2. Import the Music_LooseStinger.wav and Victory-138bpm4-4_L4M_P1M-1.wav from the Audio folder in Lesson3 using one of the three methods learned. 

  3. Set Tempo, Pre-Entry, and Post-Exit using information provided in the file name. 

  4. Associate Music Segments with States by dragging and dropping them on respective states in association editor. 

  5. Create two new transitions in the Transition tab.

  6. Set Exit source at: Immediate.

  7. Test the music by playing Music switch container and changing states from FirstFloor to Victory or from FirstFloor to Defeated. 

Lesson IV: Vertical approach / Multi-Track Segments

In the previous lessons, we learned how to loop and re-sequence our music, focusing on manipulating single audio tracks. In this lesson, we will learn how to randomise and interactively manipulate elements of some of those tracks.

We are going to start by substituting A, B and C parts of our InGameMusic music with a multitrack of those same parts. 

Please download the necessary Material for this lesson by clicking the link below:

Importing MultiTrack

  1. Expand InGameMusic Playlist container and select all of its children objects. 
  2. Right-click on one of the selected objects and choose Delete

  1. Make sure InGame music is selected.
  2. Press Shift + I (Shortcut for opening Audio File Importer) 
  3. Choose Add Folders…

  1. Navigate to LessonMaterial/Lesson4/Audio
  2. Select folder A and press Choose

Note that in the Audio File Importer, Wwise will suggest making the folder a Music Segment and all the contents of the folder Music Tracks, which is exactly what we intended to do.

  1. Press Import.

  2. Expand the newly imported Music Segment A in the Project Explorer, and observe that it now contains several music tracks.

We will proceed with importing folder B and C using a faster method: 

  1. Select folders B and C in Finder
  2. Drag and Drop them onto InGameMusic playlist container

  1. Press Import in Audio File Importer

  2. Select InGameMusic and check if the tempo is set to 118 bpm. If the field is greyed out, tick the Ignore Parent box, then enter the tempo.

  3. Set the looping zone by moving  Post-exit Red Flag in each segment to the end of the loop as learned in Lesson 2: Creating a Loop

  1. Click on the InGameMusic Playlist container. 
  2. Drag and drop the new segments A, B, and C into the same positions within the Playlist Groups as they were before.
  3. Set Weight of B and C to 70 and 25

Editing & Automation of Music Tracks

  1. In the Project Explorer select A music segment located Inside InGameMusic.

If we look at the Music Segment Editor, we can see a view that is not too different from what we are used to in our DAWs. We have several tracks with audio files on them, Mute/Solo buttons, and Volume Control. It is safe to assume that the Music Segment Editor was designed to offer similar work-flow for manipulating audio as the majority of other DAWs.

If you play the A segment you will notice that it is the same track as before, however it has the addition of a percussive element. This percussive ‘fight’ element of the track is intended to switch on and off depending if we are fighting Hoverbots or not and is playing from A_Fight Add_118bpm_44_L4m_P0m track. Since this is something we will be learning later in this lesson we will mute this track so we can hear exactly the same music as before. 

  1. Mute A_Fight Add_118bpm_44_L4m_P0m Track. 

  1. Play and listen to the music to familiarise yourself with the tracks and the music itself.

As good game composers, we are constantly on the lookout for anything that could potentially make the music feel too repetitive or distract from the gameplay.

After listening to the segment several times, I have assessed that the melodic fills on the track A_ToyPiano_118bpm_44_L4m_P0m are too repetitive, and after a while, they may cause players to disengage from the game. 

We will address this potential issue by editing the material directly in Wwise software by having three possibilities: play first the Toy Piano melodic phrase, play second the Toy Piano phrase, and don’t play the Toy Piano phrase. 

Sequence Step Track

  1. Right-click A_ToyPiano_118bpm_44_L4m_P0m track in Music Segment Editor view.
  2. Choose Sequence Step from the list. 

With this, you will effectively change the type of the track. There are several types available, all of which we will explore in this lesson.

  1. Right-click the ToyPiano track again and select Add Sub-Track.

Note that our A_ToyPiano_118bpm_44_L4m_P0m track has expanded, allowing it to host two audio tracks.

  1. Copy the original A_ToyPiano_118bpm_44_L4m_P0m file by holding Ctrl and dragging the original track to the newly created Sub-Track.

Now you have two identical regions both representing A_ToyPiano_118bpm_44_L4m_P0m audio file. If we were to play our Music Segment now, it would first play the top sub-track region, and when played again or looped, it would proceed to play the bottom one. Since the audio file on both tracks is exactly the same, there will be no audible difference.

Editing

Now we are going to edit each of the regions in order for each to feature a different part of the audio file. 

  1. Solo the A_ToyPiano_118bpm_44_L4m_P0m track.

  2. Select the top region and scroll to the end of the region. 

  3. Grab the square icon in the bottom-right corner of the region and drag it to the bar 5.

  1. Now, grab the square icon of the bottom Sub-Track region at the bottom-left and drag it to Bar 5.

  1. Play the segment and note that the sound cuts off un-naturally at the edit point. 
  2. Add fade-out to top region by grabbing the triangle icon at the top-right corner of the region and dragging it to the left. 

 

Note that if you play the segment again, the top region might not be played, as the system alternates between the top and bottom sub-track each time it plays or loops. Although this is the intended function, it can make the auditioning process somewhat difficult. To simplify auditioning, you can engage the Focus        icon, which ensures the focused sub-track is played each time the object is played or looped. Just remember to disengage this function before generating the Soundbank for the game.

  1. Focus the top Sub-Track and audition the fade by playing the Object. 

  2. Put the fade-in on the bottom region by grabbing triangle icon at the top-left and moving it to the right. 

  1. Focus the bottom Sub-Track to audition the result. 

Track Volume and the Automation

By playing and focusing on each sub-track, you may notice a discrepancy between the volume of the phrases.

To level the Volume:

  1. Increase the overall volume by 5 on the A_ToyPiano_118bpm_44_L4m_P0m track.

  1. Select Volume in Envelopes at the top of the Music Segment Editor.

Note that a thickened red line appears on the top of each region. That line represents the Volume level at which the region is playing currently. Since it was not altered all of the regions are playing at 100% of their Volume. 

  1. Select the circle icon at the beginning of the red volume line in the top-left corner of the top Sub-Track region. 
  2. Holding Ctrl, select the one in the top-right of the region as well. 

  1. Grab one of them and move down so it matches the volume of the bottom Sub-Track region. 

Now, let's add a third sub-track to account for the possibility that none of the phrases are playing.

  1. Right-click A_ToyPiano_118bpm_44_L4m_P0m and select Add Sub-Track.
  2. Leave the newly created Sub-Track empty.
  3. Be sure to un-focus any sub-track and un-solo the music track.

Random tracks

The system we have established helps immensely with keeping the segment varied and interesting. However, we can further enhance this by changing the track type to Random. By setting the track type to Random, Wwise will randomly choose which sub-track to play at any given time, thus greatly increasing the variety of the segment.

  1. Right-click A_ToyPiano_118bpm_44_L4m_P0m and select Random Track

  2. Lastly, repeat the same process of Editing also on Music Segments B and C by repeating the steps in this chapter. Editing & Automation of Music Tracks.

Note that since we wish ToyPiano to be a Random Track you can select Random Track in step 6) and omit step 25).

Switch Tracks

Switch track is another type of track that can be used in Wwise, utilising a Game Sync system similar to States, known as Switches. While States are primarily used to control Music Segments and Music Playlists, Switches are mainly used to control individual assets (audio files) within a Music Segment.

In our game, we will use Switches to add percussive elements to the playing segment when the player is engaged in combat and ensure those elements are not playing when they are not.

  1. Select A Music segment in the Project Explorer view. 
  2. Select the track A_Fight Add_118bpm_44_L4m_P0m.
  3. Un-mute the track. 
  4. Right-click the track and choose Switch.

  1. Right-click the track again and select Add Sub-Track

Observe that we have two sub-tracks: one with a region and one empty. Now, we will proceed to create Switch Game Syncs that will allow us to play the correct sub-track depending on whether the player is engaged in a fight with Hoverbots or not.

  1. Click on the Game Syncs tab in Project Explorer.
  2. Right-click the Default Work Unit inside the Switches folder. 
  3. Select New Child →  Switch Group

  1. Name the group exactly MusicAttack
  2. Right-click the MusicAttack switch group and select New Child → Switch.

  1. Name the Switch exactly Fight
  2. Right-click the MusicAttack switch group again and create another switch.
  3. Call this switch exactly Explore

Now that we have greeted the Switch Group and Switches that will be recognised by the game let’s associate switch Sub-Tracks with desired Switch. 

  1. Click on the Audio tab in Project explorer. 
  2. Select A segment of InGameMusic playlist container. 
  3. Double-click on the A_Fight Add_118bpm_44_L4m_P0m.
  4. Click on the General Settings tab in the property editor.
  5. Click on  icon in the Switch area of the Global Settings tab. 

  1. Select Switch Groups → Default Group → MusicAttack.

  1. Click on the icon in Default Switch/State area of Global Settings tab.
  2. Select Explore

Note that we are setting a default switch as a precaution in case the game fails to set the initial switch at the start. If this happens and no default switch is set, the music system might fail entirely, resulting in no music playing. By setting a default switch, we ensure the intended music will play at the beginning of the game.

  1. In the Music Segment editor click on the A_Fight Add_118bpm_44_L4m_P0m track.
  2. Right-click on the golden brown area between the track and the top Sub-Track region. 

  1. Repeat the same step on the bottom Sub-track but this time choose Explore. 

Note that if the association is done correctly, the words "Fight" and "Explore" should appear on their respective sub-tracks.

  1. Modify the B and C music segments using the same approach, ensuring that the appropriate switches and sub-tracks are set up just as they were for the previous segment.

  2. Select InGameMusic Playlist container. 

  3. Click on the Switch icon in Game Syncs area of Tracsport Control.

  1. Press Play and choose Fight switch from the dropdown menu of Transport Control. 

You won't hear any changes yet because, similar to the Music Switch Container, we need to define the transitions. However, in this case, we will define the transitions directly on the music track rather than on the parent object.

  1. Expand A Segment of InGameMusic
  2. Select A_Fight Add_118bpm_44_L4m_P0m music track. 

  1. In the Property editor of that track click on the Transitions tab.

  1. In the Transitions area select Transition 1.
  2. Change Exit Source at to Next beat

  1. Set the Fade-out to 1 second with 1 second Offset

  2. Set the Fade-in to 1 second with -1 second of Offset

  3. Define transitions for the music tracks of the B and C segments as well.

  4. Play InGameMusic and change switches in the game sync area of Transport Control. 

You should be able to hear the percussion come in with the change of the switch.

RTPCs (Real-Time Parameter Control)

RTPC stands for Real-Time Parameter Control in Wwise. It allows us to dynamically adjust audio properties, such as volume, pitch, or effects, based on real-time variables from the game. These variables can include things like the player’s health, speed, or proximity to certain objects. By linking game parameters to audio properties, RTPCs enable a more interactive and responsive audio experience.

Before we begin setting up the RTPC, let's import the last missing music: The Basement music.

Importing Basement music

  1. Drag and drop the Basement folder found in LessonMaterial/Lesson4/Audio onto the Music Switch Container.
  2. In the Audio File Importer, select Music Segment from the drop-down menu in the Object Type column. 

  1. Right-click Basement music segment and select New Parent → Music Playlist Container
  2. Name the Playlist container BossFight. 
  3. Go to General Settings tab of property editor and set the tempo to 138
  4. Select Basement Segment and adjust pre-entry and post-exit flags using the information in the name of the music tracks. 
  5. Select BossFight playlist container and drag-and-drop Basement Music Playlist editor.
  6. Set Group Loop Count to infinite.  
  7. Select Music Switch container 
  8.  Drag BossFight playlist container onto Basement State in Music Switch Association editor.
  9. Drag the Basement-Trans_138bpm_34_L3m_P1m audio file from the Lesson4/Audio folder onto the Transition Virtual folder. 
  10.  Set the tempo to 138 and signature to 3/4.
  11.  Set the Pre-entry and Post-exit arrows. 
  12.  Go to Transitions tab of Music Switch container
  13.  Add a new transition and set destination to BossFight. 
  14.  Drag the Basement-Trans_138bpm_34_L3m_P1m to the transition segment field of  the Transition tab. 
  15.  Set the Exit source to Next Bar. 
  16.  Test the result by playing Music switch container and changing states. 

Creating an RTPC Game Sync

  1. Click on the Game Syncs tab in Project Explorer. 
  2. Right-click on the Default Work Unit in the Game Parameter folder.
  3. Select New Child → Game Parameter.

  1. Name the parameter exactly Player_health.

Be sure to use the same capitalisation. Unlike Events, RTPCs are case sensitive!

  1. Click on the Player_health
  2. In the Game parameter Property Editor, leave the Range as is.  (min 0, max 100)
  3. Change the Default value to 100, since we normally start the game with full health. 

Connecting RTPC with the Music Track

We want to prompt the player to react quickly if their health is dropping dangerously low in the basement. To achieve this, we will increase the volume of the Basement-Gtr2_138bpm_44_L17M_P1b track in proportion to the decrease in health.

  1. In the Project Explorer click on the music track Basement-Gtr2_138bpm_44_L17M_P1b.
  2. Click on the RTPC tab in the property editor of the track. 

  1. In the RTPC tab Click on icon and select Voice Volume. 

  1. Click on icon next to X Axis column 
  2. Select Game Parameters → Player_health

Note that a graph appears below. The X-axis represents the Player_health variable, and the Y-axis represents the track's volume. If we look at the red line showing the correlation between the X and Y axes, we can see that it is not set to give us the desired result. Currently, the track reaches its loudest volume at maximum health and its lowest volume at 0 health. What we want instead is for the guitar to start being audible around 50 health and gradually increase in volume, reaching its maximum just before 0 health. We can achieve this by manipulating the red correlation line.

  1. Select the Control Point at the end of the correlation line and bring it down to 0.

  1. Create a new Control Point at 50 health you Double-clicking the red correlation line at 50 health. 

  1. Raise the left Control point to 2.5. 

  1. Press Play and audition the RTPC behaviour by moving the RTPC cursour toward 0 health.

You will notice that the Basement-Gtr2_138bpm_44_L17M_P1b volume increases the more we push the RTPC cursor towards 0 health. 

If we want to assign a more natural curve to the correlation line, we can right-click the line between the left and middle control points and assign, for example, a logarithmic curve.

We can try a different way of auditioning the RTPC. 

  1. Select BossFight Music playlist container. 
  2. Click on Display RTPCs icon in Transport Control.

  1. Press Play and change the value of RTPC by clicking on the white dot below the RTPC value. 

SoundCaster

SoundCaster is a powerful feature in Wwise that allows us to test the behaviour of our music and audio systems without needing to run the game. By populating the SoundCaster window with all the necessary events or Objects and SoundCaster intelligently presenting all the syncs associated with those events or available in the game, we can quickly and easily test specific parts of our system.

Let’s say we want to quickly test balance between Music and Weapon firing SFX

  1. Go to Views and select Soundcaster (Alternatively hit Shift + S key command).
  2. Create a new session by pressing the icon at the top left of the Soundcaster window and selecting New…

  1. Name the session Music_Weapon
  2. Drag Music Switch container from Project Explorer anywhere in the bottom part of Soundcaster. 

  1. Click on the Events tab in the Project explorer. 
  2. Expend Sound Work Unit. 
  3. Drag Player_fire and Shotgun_fire events in the Soundcaster.

  1. In Soundcaster, set State to FirstFloor, Switch to Fight and Player-health to 100. 

  1. In Soundcaster press Play on Music Switch module and while music is playing Press play on Player_fire and Shotgun_fire modules to mimic the player shooting their weapon in the game. 

  2. Change the state to Basement and keep on playing Player_fire and Shotgun_fire.

  3. Press Stop at the top of the Soundcaster to stop all the music and sounds. 

You can add and delete modules depending on what you wish to test. You can have as many Soundcaster sessions as you wish.

If you wish to Rename or Delete some of your Soundcaster sessions:

  1. Click on the Sessions tab in Project Explorer.

  2. Expand the Default Work Unit in the Soundcaster sessions folder.

  3. Rename or Delete the desired session. 

Wwise Lecture V: Finalising the Project

In the previous lectures, we learned how to create our music system. In this lesson, we will focus on adding the final touches and preparing the project for delivery to the Game Designer.

Please download the necessary Material for this lesson by clicking the link below:

Stingers and Trigger Game Sync

Stingers are short musical segments meant to be played on top of the main segment. They are typically used to highlight and enhance game-related moments, such as when a Hoverbot spots the player or is destroyed. Stingers use a Game Sync called Triggers, which can be set to occur in sync with the music.

Importing Stingers 

  1. Drag folder from Lesson5/Audio called Stingers on to the Music switch container.

  1. Change HoverbotAlert and Hoverbot death from Virtual folder to Music Segment. 

  1. Select HoverbotAlert Segment in Project Explorer. 
  2. Set the Post-exit to bar 2

Changing the type of track to Random track

All of the tracks in the segments are intended to be played randomly, one at a time. To achieve this, we will make all of them sub-tracks under one parent Random Track.

  1. Select all the tracks in the Music segment editor.

  1. Right-click on one of the Tracks and select: Convert Music Track(s) to Sub-Track(s) → Random Step Parent Track

  1. Right-click on New Random Music Track and select Rename.
  2. Name the Track HovAlert.
  3. Play the HoverbotAlert segment and observe that it randomly plays only one track at the time. 

Now let's prepare Hoverbot Death using a similar approach.  

  1. Select HoverbotDeath music object.
  2. Select all tracks 
  3. Right-click on one of the Tracks and select: Convert Music Track(s) to Sub-Track(s) → Random Step Parent Track
  4. Right-click on New Random Music Track and select Rename.
  5. Name the Track HovDeath

Edit the tracks

As you can see, the regions of these tracks are not clearly defined by tempo, and the peak of the cymbal roll does not align between them. We need to edit the regions so they align. We will also turn the snap off and align Pre-Entry and Post-Exit independently of the grid. This will allow us to precisely pinpoint the moment we want to correspond with the beat of the music when the stinger plays.

  1. Turn off Bars/Beats snap in Music Segment Editor. 

  1. Shorten the front of the region on track InGame_Hd_Cymbal-1_Cymbal… so it allows for the whole region to be moved to the left. 

  1. Move the top region to the left so that the peaks of the top and middle region waveforms align.

  1. Do the same with the bottom sub-track region.

Note that the bottom region has a much longer roll than the other two. You can shorten the track so that the loudest part aligns with the other tracks and use a fade-in to mimic the roll.

  1. Move both Pre-Entry (holding Ctrl) and Post-Exit to the apex of all three sounds, which should now be horizontally aligned.

By doing this, you are not setting the loop. Remember that Music Segments do not loop until they are part of the Music Playlist Container. This method only describes which point in the region you wish to synchronise with the beat of the music.

  1. Select HoverbotDeath Music and play it. 

Creating Triggers Game Syncs

Now that we have imported and edited those music segments, we can proceed to create Game Syncs that will trigger the stingers.

  1. Click on the Game Syncs tab in Project Explorer.
  2. Right-click on the Triggers Folder
  3. Select New Child → Work Unit
  4. Name the Work Unit Music

  1. Right-click Default Work Unit in Triggers Folder.
  2. Select New Child → Trigger.

  1. Name the Trigger exactly Hoverbot_Alert

  2. Repeat the steps 5 and 6 to create another Trigger. 

  3. Name the new Trigger exactly Hoverbot_Death

Associating Triggers with Stinger Music Segments

  1. Select InGameMusic Playlist container. 
  2. In the Property editor tab click on Stingers tab.

  1. Press Add…

  1. Press icon in the next to Trigger column and select Hoverbot_Alert Trigger.

  1. Press Add… again. 

  2. Press icon and select Hoverbot_Death Trigger.

  3. Drag the HoverbotAlert Segment from Project explorer and drop it in the Segment To Play column of Hoverbot_Alert Trigger in the Stinger tab. 

  4. Drag the HoverbotDeath Segment from Project explorer and drop it in the Segment To Play column of Hoverbot_Death Trigger in the Stinger tab. 

  1. Change the Play At column in the Stingers tab to Next Beat for both Triggers.  

Adjusting the Grid

  1. Open the Soundcaster (Shift + S) and note that the newly created triggers are added to the view.

  1. Set the State to FirstFloor and press Play on the Music module.
  2. While the FirstFloor music is playing press once the icon next to the Hoverbot_alert Trigger and you should be able to hear the Trigger playing on top of the FirstFloor music. 
  3. Now press the icon next to the Hoverbot_Death Trigger. 

In both cases, the trigger plays; however, there is a noticeable delay between the click and the sound playback. This is due to the grid frequency, meaning the minimum time between beats in the music segment, being too large. Let's reduce this gap by minimising the grid.

  1. Select InGameMusic segment in Project explorer. 
  2. In the General Settings tab change the Grid Frequency to ¼ (quarter note).

 

  1. Open the Soundcaster and test the results repeating steps 3 and 4.

We can minimise the gap even further. 

  1. Click on the Trigger tab of InGameMusic. 
  2. Change Play At to Next Grid. 

  1. Click on the General Settings tab and change frequency to ⅛ (eighth note).

  1. Open the Soundcaster and test the results repeating steps 3 and 4.

Creating Test Events

While testing our triggers, we can notice that the InGameMusic is not behaving as it will in the game. The main difference is that the switch is not transitioning between the Explore and Fight states. Our main intention for the triggers was to embellish this exact change. While we could achieve this by quickly changing the switch right after clicking on the trigger, it is theoretically possible but not very practical.

Since we can populate the SoundCaster with various objects and events, we could create custom events that would simultaneously change the switch and trigger for us. Then, we could import that into our SoundCaster session. This would streamline not only our system but also the workflow we use for testing it. 

  1. Select the Events tab in Project Explorer.
  2. Right-click the Default Work unit and select NewChild → Event. 
  3. Name the Event HovAlert
  4. Right-click and select New Action → Set Switch

  1. Right-click on Target of the Action and choose: Set Target →  Default Work Unit → MusicAttack → Fight.

  1. Right-click anywhere on the Action view again and select: New Action → Trigger.
  2. Right-click on the Target and select: Set Target → Hoverbot_Alert.

  1. Using steps 2-7 create another Event called HovDeath and set actions Set Switch MusicAttack\Explore and Trigger Hoverbot_Death.

  2. Open the Soundcaster.

  3. Drag Events HovAlert and HovDeath in the Soundcaster session. 

  1. In the Soundcaster set the State to FirstFloor
  2. Play Music module 
  3. Play the HovAlert module followed by the HovDeath module and observe the change.

The events we've created really streamline our testing workflow and won't interfere with the game. If you remember from Lesson 1, events need to be associated with soundbanks to be incorporated into the game. We can take advantage of this by not associating the HovAlert and HovDeath events with soundbanks. This way, we can use them internally in Wwise to speed up our workflow without affecting the game's functionality.

Profiler 

The Profiler in Wwise is a powerful tool that allows us to connect to any Wwise-powered game running on our computer and receive real-time information about the events and game syncs driving the audio system. It is invaluable for troubleshooting and debugging generated soundbanks within the game.

I have deliberately incorporated a mistake in the Lesson 5 Wwise session to give us an opportunity to use the Profiler for troubleshooting.

  1. Generate Soundbanks.
  2. Start the Game.

Immediately when the Title menu starts, you will notice that all the sounds are playing except the music.

  1. Do not close the game. Leave it running in the background. 
  2. In Wwise press Connect to Remote Platform button at the top-centre of the screen. 

  1. In the Remote Connections window select the available connection and press Connect. 

  1. Go to Layouts and choose Profiler.

  1. In the Profiler look at the Capture log view. 

You can see that there is only one red entry with the Type Error and that it is associate with the game object Music. 

  1. Click on the red Error entry 

In the view below the Capture log called contextual help you can see more information about the error. The Contextual help describes the issue and Probable causes. 

A first possible cause, that the SoundBank was not loaded, is not applicable because we would have encountered an error specifically stating that. The second possible cause, a missing SoundBank, is also ruled out, as we generated a fresh SoundBank in the first step. This leaves us with the possibility of a typo in the Event name or Event ID, which are essentially the same. Every name we assign to an event is converted into a numerical value known as the Event ID. Therefore, the most likely cause of the issue is a typo in the Event name.

If we examine the timing of the event, we can see it occurred relatively early in the game, so it's likely one of the first events triggered. Combining this with the probable cause (a typo in the Event name), the timing of the event, and the fact that no music is playing, it strongly suggests that the issue is a typo in the Music_Game_Start event. Let's go ahead and inspect this event further.

  1. Close the Game.
  2. Change the Layout to Designer. 
  3. Click on the Events tab.

As you can clearly see, the issue stems from the event being incorrectly named. It's currently called Music_Game_Starts, while the correct name should be Music_Game_Start. We need to fix this typo to resolve the problem.

  1. Correct the name of the Event.
  2. Generate the Soundbank.
  3. Play the game. 

Music should now be playing as expected. Congratulations, Sherlocks, you've cracked the case!

Mixing The Game

Before we begin mixing the game, it's important to understand the key signal path concepts in Wwise and how they differ from traditional DAWs.

Wwise relies heavily on hierarchy and inheritance of properties, but objects in a hierarchy don’t pass signals to each other. Instead, the object associated with an asset sends its signal directly to the Master Audio Bus, regardless of its parent object. However, we can still affect the signal at different levels of the hierarchy, and the changes are cumulative. 

For example, if we increase the Voice Volume on a Music Segment by 2 dB and also increase the Voice Volume by 2 dB on its parent Playlist Container, the end result will be a 4 dB increase, even though no signal was directly passed between them. This is because each parent object assigns its properties to its child objects, so the Music Segment will add the parent's increase to its own. This results in a 4 dB overall increase that is sent to the Master Audio Bus.

This hierarchy is similar to the functionality of VCAs (Voltage-Controlled Amplifiers) in traditional mixing.

The reason Wwise avoids summing signals is to conserve processing power. Summing signals consumes a small amount of CPU, which may seem insignificant for individual sounds. However, in a game with a large number of sounds that repeat frequently, this CPU usage can add up. Since most of the system's resources are usually allocated to processing graphics, minimising CPU usage for audio processing becomes crucial. By avoiding signal summing, Wwise ensures more efficient performance, especially in complex audio environments. 

The only summing that is done by default is on the Master Audio Bus, which is the last possible place where summing needs to happen in order for the signal to be sent to an audio device. 

The only exception to this is when we use effects. In order for an effect to process the signal, it needs to be summed before entering the effect. This is yet another reason why we try to keep the use of effects in Wwise to a minimum.

Another exception is Auxiliary Bus objects, which are used to add audio effects to objects. We will not be using these in this module because they work exactly the same way as in a DAW, and because we are trying to be economical with the use of effects.

Creating an Audio Bus

Even though Wwise avoids summing, sub-grouping of elements is a technique that is widely used. Sub-grouping is done with objects called Audio Buses, which, similar to any parent object, pass their properties down the line rather than the signal. 

We are going to use two Audio buses to separately control all of our sound and Music. 

  1. In the Audio tab expand Master-Mixer Hierarchy and Default Work Unit to find our Master Audio Bus. 

  1. Right-click on the Master Audio Bus and select New Child → Audio Bus.
  2. Name the Audio Bus Music.
  3. Let’s create another Audio Bus repeating steps 1-3 and let’s Call this bus Sound. 

Routing Objects to Audio Bus

  1. Select Music Switch Container
  2. In the General Settings tab of Property editor go to Output bus and press icon.

  1. Select Music and press OK 

Using Multi-Editor

We will assign all the sounds to the Sound Audio Bus. However, unlike Music, which has only one parent object, the Music Switch Container Actor-Mixer Hierarchy has numerous parallel objects. Changing the Output Bus on each of these individually would be time-consuming. This repetitive task can be streamlined using the Multi Editor. 

  1. Expand Default Work Unit in Actor-Mixer Hierarchy 
  2. Select all the children objects. 

  1. Right-click on one of the selected objects and select Show in Multi Editor. 

  1. In Multi Editor View right-click the Master Audio Bus next to the right of General Settings\ Output Bus\Output Bus.

  1. Select Browse.
  2. In the Project Explorer - Browser select Sound Audio Bus and press OK.

Mixer Session

Now that we have sub-grouped the Sound and Music, let’s create a Mixer session to balance the Groups and individual Music Objects.

  1. Go to Layouts and select Mixer.

  1. In the Mixing Desk View click on icon and select New…
  2. Name the session Music Mix

  1. Press OK.
  2. Drag the Music and Sound Audio Bus and drop them on to the empty space in the Mixing Desk view. 

  1. Drag Music Switch container on to the Mixing Desk. 
  2. Select all the Music objects from BossFight to Victory and drag and drop them on to the Mixing Desk.
  3. In the Mixing Desk, minimise the Bus, Positioning, and Effects views to gain a better overview of the mixing channels.

Note that below the Mixing Desk view, there is also a Soundcaster view, which allows us to trigger the music system and change game syncs in order to mix our music.

  1. Play the Music and change States and Switches using Sound Caster and Start mixing your music. 

Because the signal is not passing through any of the objects in the Mixing Desk, we do not have any visual reference of what track might be playing. However, there is an inbuilt feature that can help with this.

  1. Play the Music from Soundcaster. 
  2. In the top-left part of the screen, next to button click in the Live Capture icon. 

Now if you look at the row of icons in the Activity area of the Mixing Desk you will note that some of the headphones icons changed colour to orange. 

This means that those objects are associated with the currently playing music, and any change will be immediately audible. This feature is very handy for quickly identifying which track is playing.

Additional Material

Events List

Music
Events
SoundBank Work Unit Event Name Event ID
Music Default Work Unit Music_Game_Start 3635523532
Music Default Work Unit Music_Level_Complete 381676261
Music Default Work Unit Music_Hoverbot_Alert 1281769583
Music Default Work Unit Music_Game_Pause 1489615104
Music Default Work Unit Music_Basement_Enter 1497350281
Music Default Work Unit Music_Game_Unpause 2146941807
Music Default Work Unit Music_Basement_Exit 2181468901
Music Default Work Unit Music_Stop_Titles 2566972229
Music Default Work Unit Music_Player_Defeat 2835590192
Music Default Work Unit Music_Hoverbot_Death 3365733963
Music Default Work Unit Music_Play_Titles 3623402443
States
Work Unit State Group State Name ID
Default Work Unit MusicState None 748895195
Default Work Unit MusicState Basement 1413413702
Default Work Unit MusicState Victory 2716678721
Default Work Unit MusicState Defeated 2791675679
Default Work Unit MusicState Titles 3809106084
Default Work Unit MusicState FirstFloor 4097174429
Switches
Work Unit Switch Group
Default Work Unit MusicAttack Explore
Default Work Unit MusicAttack Fight
Game Parameters
Type Work Unit Name ID
RTPC Default Work Unit Player_health 215992295
RTPC Default Work Unit MasterSound
RTPC Default Work Unit MasterVolume
Trigger Music Hoverbot_Alert 3535084583
Trigger Music Hoverbot_Death 3618812611
Sound
Events
SoundBank Work Unit Event Name Event ID
Sound Sound Turret_death 124877840
Sound Sound small_doors_closing 192732804
Sound Sound small_doors_open 380130715
Sound Sound weapon_charge_start 600481641
Sound Sound Jetpack_stop 899103824
Sound Sound shotgun_Pickup 1304554256
Sound Sound Player_jump 1305133589
Sound Sound Player_take_damage 1528071400
Sound Sound weapon_charge_stop 1721627779
Sound Sound small_doors_stop 1747548991
Sound Sound BlastDoor_Open 1996631464
Sound Sound Hoverbot_attack 2304462595
Sound Sound Player_footstep 2453392179
Sound Sound Jetpack_empty 2484289747
Sound Sound Turret_alert 2530127952
Sound Sound Player_fire 2583440997
Sound Sound Hoverbot_spawn 2668156916
Sound Sound Play_Key_Pickup 2881789206
Sound Sound BlastDoor_Stop 3021958520
Sound Sound Player_death 3083087645
Sound Sound Turret_attack 3186477626
Sound Sound Jetpack_start 3208028412
Sound Sound Hoverbot_alert 3535084583
Sound Sound Pickup_health 3554861522
Sound Sound Hoverbot_death 3618812611
Sound Sound Player_land 3629196698
Sound Sound Level_complete 3736098925
Sound Sound Shotgun_fire 3982195600
Switch Group
ID Work Unit Name
2385628198 SFX Footsteps
Switch
ID Switch Group Name
1216965916 Footsteps Stone
2473969246 Footsteps Metal
UI
UI Event
SoundBank Work Unit Name ID
UI Default Work Unit Play_Menu_Buttons_Confirm_01 1976714274
UI Default Work Unit Play_Menu_Buttons_Back_01 3146873561
UI Default Work Unit Play_Menu_Buttons_Mouse_Over_01 3999992124

**