Audio modding: Difference between revisions

From Total War Modding
No edit summary
Line 65: Line 65:


This is done using the Audio Compiler, which takes a textfile as an input. The format looks like this:
This is done using the Audio Compiler, which takes a textfile as an input. The format looks like this:
 
{
 
  "Settings": {
    "Version": 1,
    "OutputGame": "Warhammer3",
    "BnkName": "campaign_diplomacy__ovn",
    "RootAudioMixer": "54848735",
    "Language": "English(uk)"
  },
  "Events": [
    {
      "Name": "Play_Foo",
      "Sound": "Audio\\WWise\\729867288.wem"
    },
    {
      "Name": "Play_Bar",
      "Sound": "Audio\\WWise\\906470917.wem"
    }]
}<br />
{| class="wikitable"
|+Project explanation
!Attribute
!Description
!Example Value
|-
|Settings.Version
|The version of the project file
|1
|-
|Settings.OutputGame
|The game to compile the audio project to.
|Warhammer3
|-
|Settings.BnkName
|The name of the created bnk file. Files can not be renamed as the file reference the name internally.
|
|-
|Settings.RootAudioMixer
|The mixer the sounds should belong to
|54848735, which is the id for diplomacy lines
|-
|Settings.Language
|If the file is a language bnk, this needs to be set to the same name as one of the audio folders in the game
|English(uk)
|-
|Events
|A list of all the events
|
|-
|Event.Name
|The name which the game will use to find the sound
|Play_Foo
|-
|Event.Sound
|The path to the audio file. At this point it needs to be imported manually and converted
|Audio\\WWise\\906470917.wem
|}


Coming features:
Coming features:

Revision as of 14:33, 27 April 2023

After a long time, Audio modding is now possible (for Warhammer 3 at least!)

Wwise

The total war games uses an audio engine called Wwise. This is a very powerful, but complex system. If you want to audio modding, you also need to get a basic understanding of the tool.

WWise Naming

The first thing to understand, there is no names in wwise. When a wwise project is compiled (saved for use) the tool converts all the names into id strings. This is why the game has a ton of files called 9484940112.wem. At some point they were named Karl_Eating_Goblins.wem and so on, but that name is converted (hashed)

Wwise event structure

Everything in wwise starts with an event (apart from music).

There are two event types, Event and Dialog_event. After the event there is a chain of object that leads you to the actual audio played.

For example this basic event with will play a random sound from a collection of two.

Karl_Eating_Goblin_Event => Karl_Eating_Goblin_Event_ActionPlay => Random Container => Soundx.mp3, soundy.mp3.

They follow a basic pattern most of the time. Event => Action => Container (optional) => Sound(s)


The second event type is a dialog_Event. It has nothing to do with dialog, its a lookup table that results in container or sound object.

Enemy_spotted dialog event
UnitVoiceActor UnitType SpottedFacton Child
Orc_Female_1 Ranged Human 123
Orc_Male_1 Ranged DarkElf 456
OrC_Male2 Melee Orc 678

When the even is triggered, the game sets a set of variables which are used to lookup the child node, which typically points to a Container which in turn points to sounds

Currently Dialog_Events can not be modded, but soon...


The last important bit is the ActorMixer object. This object controls who owns the sounds. Is it a UI sound, game sound, battle sound and so on. This is important to make the sound play as not all ActorMixer has their volume set at all times

Exploring Wwise in AssetEditor.

In AssetEditor there is a tool for exploring the audio data, called "Audio Explorer". This can be used to learn about how wwise works. It also allows you to find which ActorMixer Id you should use and what file to replace if you want to update the sound of something.

AssetEditor audio tool.png

In the tool you get a list of all the events in the game. Under extra you can select if you want Events, Dialog_events or both. Picking one from the dropdown gives you the wwise object graph for the selected events.

In the example here, you see the "Evemt_battle_IND_Small_arms_dlc12_rattling_gun_fire_play_event". Somewhere in the game database or meta data files, there will be a reference to this name.

The event contains a play action, followed by a set of random containers. Why they are nested instead of one large, no one knows. But from this you can see all the sounds connected. If you want to replace a specific sound, this gives you the wav file to replace. The tool also allows you to preview the sounds.



Adding new Audio

We have tried to make adding new sounds as simple as possible. This is done using the Audio Compiler in AssetEditor. AssetEditor tries to fill out as much data as possible, to make it as simple as possible.

This is done using the Audio Compiler, which takes a textfile as an input. The format looks like this:

{
  "Settings": {
    "Version": 1,
    "OutputGame": "Warhammer3",
    "BnkName": "campaign_diplomacy__ovn",
    "RootAudioMixer": "54848735",
    "Language": "English(uk)"
  },

  "Events": [
    {
      "Name": "Play_Foo",
      "Sound": "Audio\\WWise\\729867288.wem"
    },
    {
      "Name": "Play_Bar",
      "Sound": "Audio\\WWise\\906470917.wem"
    }]
}
Project explanation
Attribute Description Example Value
Settings.Version The version of the project file 1
Settings.OutputGame The game to compile the audio project to. Warhammer3
Settings.BnkName The name of the created bnk file. Files can not be renamed as the file reference the name internally.
Settings.RootAudioMixer The mixer the sounds should belong to 54848735, which is the id for diplomacy lines
Settings.Language If the file is a language bnk, this needs to be set to the same name as one of the audio folders in the game English(uk)
Events A list of all the events
Event.Name The name which the game will use to find the sound Play_Foo
Event.Sound The path to the audio file. At this point it needs to be imported manually and converted Audio\\WWise\\906470917.wem

Coming features:

  • Audio file importer/converter
  • Support for adding dialog_events
  • Support for containers like random.
  • Fixed names for known ActorMixers