Audio modding: Difference between revisions

From Total War Modding
No edit summary
No edit summary
 
(118 intermediate revisions by the same user not shown)
Line 1: Line 1:
WH3 Audio Modding
After a long time, audio modding is now possible. This is entirely down to the years of research and work developing the tools by Ole and ChaosRobie.
After a long time, Audio modding is now possible. This is entirely down to the years of research into audio and work developing the tools by Ole and ChaosRobie.


= The Basics =
= The Basics =
The Total War games use an audio engine called Wwise. It is a very powerful but complex system. In short Wwise produces these things called soundbanks (.bnk files). Soundbanks store the information about how audio is played in the game.
The Total War games use an audio engine called Wwise. It is a very powerful but complex system. In short Wwise produces these things called soundbanks (.bnk files) which store information about how audio is played in the game.


If you want to mod audio it would probably be a good idea to have some understanding of the basics of Wwise. Some of this is covered below, however for a more foundational understanding read the [https://github.com/bnnm/wwiser/blob/master/doc/WWISER.md WWiser documentation].  
If you want to mod audio it would probably be a good idea to have some understanding of the basics of Wwise. Some of this is covered below, however for a more foundational understanding read the [https://github.com/bnnm/wwiser/blob/master/doc/WWISER.md WWiser documentation], and watch the Wwise [https://www.youtube.com/watch?v=1EhEhDyZ6o4&list=PLXMeprTk4ORPxeFVB6o5t1_IHyHkf4BgO&ab_channel=Audiokinetic 101] and [https://www.youtube.com/watch?v=_bvus5FIjxk&list=PLXMeprTk4ORNT-u6190PcRDA7-UEUwBo-&ab_channel=Audiokinetic 201] YouTube tutorial series.
 
== Types of Audio ==
One way of categorising audio in WH3 is as VO, non-VO, and music. VO means voiceover. CA refers to this simply as VO. Strictly speaking audio can just be categorised as Events and Dialogue_Events, but breaking it down into those three categories is more relevant to the game.
 
=== VO ===
The VO audio system is controlled with Dialogue_Events. VO audio is typically everything associated with a unit speaking. Whether that's a character on the campaign map, or a unit in battle, it will be VO. An example of a VO Dialogue_Event is '''campaign_vo_selected'''.
 
You can currently mod VO audio by building a Wwise project to do so, or making a request to the Audio Mixer dev team and they will do it for you. More info on VO audio modding can be found [[Audio_modding#VO_Audio_Modding|here]]. Eventually VO audio modding will be a simple process handled within the AssetEditor audio tools.
 
=== Non-VO ===
The non-VO audio system is controlled with 'normal' Events. Some examples of non-VO audio are sounds for movies, abilities, magic, UI etc. basically anything non-VO or music. An example of a non-VO audio Event is '''Play_Movie_warhammer3_prologue_pro_int'''. Events are set to various things for example, ritual completion in the rituals_tables, in the db tables.
 
You can currently mod VO audio by building a Wwise project to do so. The non-VO audio modding side of the AssetEditor tools is almost ready for release. When it is you will be able to use it to make Events for non-VO audio using templates provided. More info on non-VO audio modding can be found [[Audio_modding#Non-VO_Audio_Modding|here]].
 
=== Music ===
The music system is again controlled with 'normal' Events. An example of a music Event is '''Global_Music_Play'''. It is set to a faction in the cultures_tables.
 
More info on music audio modding can be found [[Audio_modding#Music_Audio_Modding|here]].
 
Modding music is possible but is still being researched further.


== Wwise Objects ==
== Wwise Objects ==
In Wwise there things called objects. The most basic objects we will interact with are Events, Containers, Sounds, Actor Mixers.
In Wwise there are things called objects. Some common objects we will interact with are Events, Containers, Sounds, Actor Mixers, and States. These are explained below.


=== Events ===
=== Events ===
Everything apart from music and VO starts with an Event. The game will typically refer to the Events, either in script, anim.meta file or db.
Everything starts with an Event. There are two Event types, Event and Dialog_Event. The game will typically refer to Events either in script, anim.meta file, or db tables.  


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.
==== Event ====


For example this basic Event will play a random sound from a collection of two.
The first Event type is '''Event'''. Slightly confusing yes I know.  


Karl_Eating_Goblin_Event => Karl_Eating_Goblin_Event_ActionPlay => Random Container => Soundx.mp3 and soundy.mp3.
The process behind a sound playing is as follows.


They follow a basic pattern most of the time. Event => Action => Container (optional) => Sound(s)
Some condition in game is met to trigger an event, for example a db entry.


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.  
After the Event is triggered there is a chain of object that leads you to the actual audio played.
 
For example this basic Event will play a random sound from a collection of two:
 
Karl_Eating_Goblin_Event => Karl_Eating_Goblin_Event_ActionPlay => Random Container => Soundx.wem and soundy.wem.
 
They follow a basic pattern most of the time e.g. Event => Action => Container (optional) => Sound(s)
 
==== Dialogue_Event ====
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.  
{| class="wikitable"
{| class="wikitable"
|+Enemy_spotted dialog event
|+Enemy_spotted dialog event
Line 44: Line 72:
|678
|678
|}
|}
When the Dialogue_Event is triggered, the game sets variables (States) which are used to lookup the child node, which typically points to a Container which in turn points to sounds.


So for example if you are playing as the Empire, and as Karl Franz, and you move on the campaign map, the game sees that you've just moved the big man. The Dialogue_Event for this particular condition is activated and follows the path of the provided variables, e.g. Culture: Empire, Voice Actor: Franz and plays the audio for Franz moving his army on the campaign map.
When the Dialogue_Event is triggered, the game sets variables which are used to lookup the child node, which typically points to a Container which in turn points to sounds.
 
So for example taking a look at the '''campaign_vo_move''' Dialogue_Event, if you move Karl Franz on the campaign map the game sees that you've just moved the big man. The '''campaign_vo_move''' Dialogue_Event is triggered and follows the State path defined for the vo_actor State for Karl Franz and plays the audio for Franz moving on the campaign map.
 
e.g. wh_main_vo_actor_Empire_KarlFranz.Any => Random Container => Soundx.wem
 
For more information on all the different Dialogue_Events in the game refer to [[Audio_modding#VO_Audio_Modding|here]].


=== Containers ===
=== Containers ===
Line 54: Line 87:
Sound objects are how sound files are represented within WWise. Wwise uses .wav files, and exports them as .wem files.
Sound objects are how sound files are represented within WWise. Wwise uses .wav files, and exports them as .wem files.


=== Actor Mixer ===
=== Actor Mixers ===
Actor Mixers serve as an organisational and control tool for sound objects. It allows you to break sounds down into 'folders'. Mixers control who owns the sounds - if it's 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.
Actor Mixers serve as an organisational and control tool for sound objects. It allows you to break sounds down into 'folders'. Mixers control who owns the sounds - if it's a UI sound, game sound, battle sound and so on. This is important to make the sound play as not all Actor Mixers have their volume set at all times.
 
=== States ===
States are a Wwise object used to path to specific Containers or Sounds based on certain conditions being met in Game. For example, when you move a character on the campaign map there is a State for whether they are moving at sea, in mountains, desert etc. Dialogue_Events and music use states to trigger sounds to play based on certain game conditions. An example of a State used with Dialogue_Events is a vo_actor. You can set a vo_actor for a unit in the main_units table in the Audio Voiceover Actor Group column e.g. '''wh2_dlc09_vo_actor_Tomb_Kings_Arkhan'''. This condition in game is then 'activated' when you are using that unit. An example for music is in cultures_tables. Here you can set the State for each Culture's music, for example the State for the Tomb Kings is '''tomb_kings'''.


= The Tools =
= The Tools =
The main tools used in audio modding are: [[Audio_modding#Audio_Explorer|Audio Explorer]], [[Audio_modding#Audio_Project_Compiler|Audio Project Compiler]], [[Audio_modding#Bnk_Patcher|Bnk Patcher]], [[Audio_modding#Dat_Builder|Dat Builder]], [[Audio_modding#File_Converters|File Converters]], [[Audio_modding#Dialogue_Event_Merger|Dialogue Event Merger]], Wwiser.  
The main tools used in audio modding are: [[Audio_modding#Audio_Explorer|Audio Explorer]], [[Audio_modding#Audio_Project_Compiler|Audio Project Compiler]], [[Audio_modding#Wwise|Wwise]], [[Audio_modding#Bnk_Patcher|Bnk Patcher]], [[Audio_modding#Dat_Builder|Dat Builder]], [[Audio_modding#File_Converters|File Converters]], [[Audio_modding#Dialogue_Event_Merger|Dialogue Event Merger]], [[Audio_modding#Wwiser|Wwiser]].  


Some of these tools do the same thing just in different ways so you should read up on them individually.
Some of these tools do the same thing just in different ways so you should read up on them individually.


== Audio Explorer ==
== Audio Explorer ==
The Audio Explorer is a tool for exploring the audio data in the game. It has many use cases, for example learning how Wwise works or browsing for specific sound files.
The Audio Explorer is a powerful tool within the AssetEditor for exploring the audio data in the game. It can be accessed within the AssetEditor by going to Tools ==> Audio ==> Audio Explorer.
 
== Audio Project Compiler ==
'''''This tool is currently being redeveloped. This section of the wiki will be updated once that's done.'''''
 
The Audio Project Compiler is a tool within the AssetEditor which you can use to build custom audio instead of using Wwise. It has templates for different types of custom sound. Fill in a few details, run the compiler then you're good to go!
 
== Wwise ==
Wwise is the audio engine that WH3 uses. We can use it to build custom audio into the game. The advantage to using Wwise over the Audio Project Compiler is that it has a vast amount of functionality. The Audio Project Compiler is essentially a very very simple version of Wwise.
 
It is free for projects containing up to 200 unique sounds. If you need than 200 sounds you can contact Wwise and to request a non-commercial licence which allows unlimited sounds. Audiokinetic have already provided non-commercial licences for several WH3 audio modding projects so should do so again.
 
Wwise can be downloaded [https://www.audiokinetic.com/en/download here]. For WH3 audio modding you need version 2019.2.15.7667.
 
The Audio Mixer Wwise project can be downloaded [https://drive.google.com/drive/folders/1-LXgyi33yfG3rP9bY8L9jgs6GW2j-6u4?usp=sharing here].
 
== Bnk Patcher ==
This tool is intended for use by anyone who wishes to use Wwise rather than the AssetEditor Audio Project Compiler to mod audio. There are some advantanges (and disadvantages) to using Wwise over the AssetEditor. The main advantage is that you can use the full set of features that Wwise offers which is vast. The AssetEditor audio tools are a very simple and much more user friendly tool.
 
CA use a custom version of Wwise for WH3 audio. Different versions of Wwise produce objects in different formats. The closest public release of Wwise to CA's version is 2019.2.15.7667. CA's version of Wwise produces a different header in their soundbanks, and produces some music objects in a different format to Wwise version 2019.2.15.7667. Therefore a patcher is required.
 
The tool can be downloaded [https://github.com/Pear-231/Audio-Modding-Stuff/edit/main/Bnk%20Patcher here].
 
== Dat Builder ==
The Dat Builder tool is intended for use by anyone who wishes to use Wwise rather than the AssetEditor's Audio Project Compiler to mod audio. It is a script to write the dat file necessary for custom non-VO audio.
 
The tool can be downloaded [https://github.com/Pear-231/Audio-Modding-Stuff/tree/main/Dat%20Builder here].
 
== File Converters ==
Some tools to convert to and from the common file types used in audio modding. More info on using each can be found in [https://www.tw-modding.com/wiki/Audio_modding#Converting_Between_File_Types Converting Between File Types].
 
The tools can be downloaded [https://github.com/Pear-231/Audio-Modding-Stuff/tree/main/File%20Converters here].
 
== Dialogue_Event Merger ==
This is an excellent tool created by ChaosRobie which enables VO. The Audio Mixer mod uses this to merge the new custom VO created within Wwise into the vanilla soundbanks.
 
The tool can be downloaded [https://github.com/robert-d-schultz/Total-War-Modding-Scripts/blob/main/merge_wwise_dialogue_events_v4.py here].
 
== Wwiser ==
Wwiser is a Wwise .bnk parser, to assist in handling audio from games using the Wwise engine. It can be used to view soundbanks and find information about each object in the bnk.
 
Wwiser can be downloaded [https://github.com/bnnm/wwiser here].
 
= Using the Audio Explorer =
 
The Audio Explorer is a powerful tool within the AssetEditor that has many use cases. Some of these are detailed below.
   
   
[[File:AssetEditor audio tool.png|thumb|alt=]]  
[[File:AssetEditor audio tool.png|thumb|alt=]]  


=== Learning Wwise ===
== Learning Wwise ==
The tool allows pretty much all wwise objects to be explored. This is very useful to learn how you later can use the Audio Project Complier to add new sounds. Under extra you can pick between Events and Dialog_Events.
The tool allows pretty much all Wwise objects to be explored. This is very useful to learn how you later can use the Audio Project Complier to add new sounds. Under extra you can pick between Events and Dialog_Events.


The left side shows the full graph of the selected event, while the right side shows a detailed view of the Wwise data of the selected node.  
The left side shows the full graph of the selected event, while the right side shows a detailed view of the Wwise data of the selected node.


=== Finding Sounds ===
== Finding Sounds ==
[[File:Audio explorer find soundname.png|thumb|alt=|How to make sense of the sound names in total war]]
[[File:Audio explorer find soundname.png|thumb|alt=|How to make sense of the sound names in total war]]
Using this tool its very easy to lean which sound file is linked to what event.  
Using this tool, it's very easy to lean which sound file is linked to what event.  


Say you want to make a mod that replaces all of Throggs diplomacy lines. Doing a search in the database will give you all the events used, you can then look that up in the events view.  
Say you want to make a mod that replaces all of Throggs diplomacy lines. Doing a search in the database will give you all the events used, you can then look that up in the events view.  


If one takes the event "Play_Nor_Throgg_Dip_Dwf_Greet_Neg_02" which is for when Throgg talks to dwarfs, one can see that this is linked to the sound file "605570708.wem"
If one takes the event ''Play_Nor_Throgg_Dip_Dwf_Greet_Neg_02'' which is for when Throgg talks to dwarfs, one can see that this is linked to the sound file ''605570708.wem''.
 
For a detailed guide on replacing vanilla audio refer to this [[Audio_modding#Replacing_Vanilla_Audio|section]].
 
== Playing Sounds ==
[[File:Audio explorer find soundname.png|thumb|alt=|How to make sense of the sound names in total war]]
Once you've found a sound you can then play it!


=== Researching Dialogue_Events ===
Click on the sound, then click the Play Sound button.  
You can browse for specific Dialogue_Events to see what type of sounds they play in vanilla.  


Let's say you want to make your own voice acting for a character of yours. You have looked through the list of all the Dialogue_Events, and you want to look more into what exactly the voice acting for the `battle_vo_order_attack` Dialogue_Event sounds like in vanilla.
If it doesn't play make sure you have the Skip loading wem (sound) files setting unticked in your Asset Editor settings.  


So search the Audio Explorer for a Dialogue_Event e.g. `battle_vo_order_attack`.
== Researching Dialogue_Events ==
You can browse for specific Dialogue_Events to see what State paths they contain and what sounds each State path plays.  


Then browse to a voice actor of your choosing, for example Karl Franz. There you can see what his voice acting for this Dialogue_Event sounds like and make your own for your character in a similar vein.
Let's say you want to make your own voice acting for a character of yours. You have looked through the list of all the Dialogue_Events, and you want to look more into what exactly the voice acting for the ''battle_vo_order_attack'' Dialogue_Event sounds like in vanilla.


=== Understanding Actor Mixers and Audio Bussess ===
[[File:Audio explorer find mixer.png|thumb|alt=|How to find the correct ActorMixer for adding custom sounds]]
[[File:Audio explorer find mixer.png|thumb|alt=|How to find the correct ActorMixer for adding custom sounds]]
All sounds have to be connected to a mixer (which in turn is connected to a bus). Not all busses have their volume set at all times. For example the UI and Battle bus is not both enabled at the same time. Because of this its important that the correct mixer is selected when adding new sounds. When selecting a Sound node on the left side, "Parent structure" is added on the right side. Here you can see the mixers and busses connected to the sound. you typically want to use the fist id of the first ActorMixer with an audio bus for the "RootAudioMixer" setting in your custom audio project.


== Audio Project Compiler ==
So search the Audio Explorer for a Dialogue_Event e.g. ''battle_vo_order_attack''.
NOTE: This tool is currently being redeveloped. This section of the wiki will be updated once that's done.


The Audio Project Compiler is a tool within the AssetEditor which you can use to build custom audio instead of using Wwise. It has templates for different types of custom sound. Fill in a few details, run the compiler then you're good to go!
Then browse to a voice actor of your choosing, for example Karl Franz. There you can see what his voice acting for this Dialogue_Event sounds like and make your own for your character in a similar vein.


== Bnk Patcher ==
== Understanding Actor Mixers and Audio Busses ==
This tool is intended by anyone who wishes to use Wwise rather than the AssetEditor Audio Project Compiler to mod audio. There are some advantanges (and disadvantages) to using Wwise over the AssetEditor. The main advantage is that you can use the full set of features that Wwise offers which is vast. The AssetEditor audio tools are a very simple and much more user friendly tool.
All sounds have to be connected to a mixer (which in turn is connected to a bus). Not all busses have their volume set at all times. For example the UI and Battle bus is not both enabled at the same time. Because of this its important that the correct mixer is selected when adding new sounds. When selecting a Sound node on the left side, "Parent structure" is added on the right side. Here you can see the mixers and busses connected to the sound.


CA use a custom version of Wwise for WH3 audio. Different versions of Wwise produce objects in different formats. The closest public release of Wwise to CA's version is 2019.2.15.7667. CA's version of Wwise produces a different header in their soundbanks, and produces some music objects in a different format to Wwise version 2019.2.15.7667. Therefore a patcher is required.
= VO Audio Modding =
VO audio modding is a slightly complicated process and requires you to be familiar with Wwise. Tools are in development to make VO audio modding a much simpler process done within the AssetEditor. Until then, you can either learn how to do this in Wwise or make a request to the Audio Mixer team in the [https://discord.com/channels/373745291289034763/1201320264932270130 Audio Mixer Requests thread] in the Modding Den Discord server.


Wwise is free software which can be downloaded [https://www.audiokinetic.com/en/download/ here].
=== State Paths ===
Dialogue_Events are what the game uses for VO. Dialogue_Events are triggered when a set of conditions in game are met. These conditions are represented by State paths. State paths are made up of States, and States are part of State Groups. 


The tool can be downloaded [https://github.com/Pear-231/Audio-Modding-Stuff/edit/main/Bnk%20Patcher here].
You can see State paths by inspecting a Dialogue Event e.g. ''campaign_vo_move'' in the Audio Explorer. There you will see all the State paths associated with that Dialogue_Event e.g.: ''wh2_dlc13_vo_actor_Empire_Markus_Wulfhart.Any''. Refer to [[Audio_modding#Researching_Dialogue_Events|Researching Dialogue_Events]] for more info on how to do this.  


Instructions
[[File:Dialogue event states.jpg|thumb|alt=|Characters with multiple state conditions in the same Dialogue_Event]]
1. Download the tool and open it in a code editor e.g. Visual Studio Code.
2. Add your input and output paths for your banks to `bnk_paths`.
3. Add the path of your wems to `wems_path`.
4. Specify whether you want to scramble the wems as well by changing `scramble_wems` to True of False.
5. Add any IDs that need replacing to `ids_to_replace`.
6. Run the script with Python.


== Dat Builder ==
Referring to the list of [[Audio_modding#Dialogue_Events|Dialogue_Events]] below we can see the State Groups that make up the State path of a Dialogue_Event e.g.: ''campaign_vo_move - [VO_Actor.VO_Campaign_Order_Move_Type]''.  
This tool is intended by anyone who wishes to use Wwise rather than the AssetEditor Audio Project Compiler to mod audio. It is a script to write the dat file necessary for custom non-VO audio.


The tool can be downloaded [https://github.com/Pear-231/Audio-Modding-Stuff/tree/main/Dat%20Builder here].
Referring to the list of [[Audio_modding#Game-Defined_States|Game-Defined States]] and [[Audio_modding#Modder-Defined_States|Modder-Defined States]] we can see what States we can set within each State Group in a State path.


== File Converters ==
Each State Group in the path is separated by a ".". In the State path ''wh2_dlc13_vo_actor_Empire_Markus_Wulfhart.Any'' the first State Group is ''VO_Actor''. The State that is being used within this State Group is ''wh2_dlc13_vo_actor_Empire_Markus_Wulfhart''. The second State Group is ''VO_Campaign_Order_Move_Type''. The State being used here is ''Any''.  
Some tools to convert to and from the common file types used in audio modding can be downloaded from [https://github.com/Pear-231/Audio-Modding-Stuff/tree/main/File%20Converters here].  


Requirements:
That State path means that it will play the audio linked to the State path if the character you are telling to move is using the VO_Actor key wh2_dlc13_vo_actor_Empire_Markus_Wulfhart and it is moving on the campaign map while the 'Any' State is supplied by the game - that is to say while '''any''' of the States in the State Group are true i.e. moving '''either''' on ''land'' or at ''sea''.
# [https://www.audiokinetic.com/en/download/ Wwise (version 2019.2.15.7667)]
# [https://ffmpeg.org/ FFMPEG]
# [https://github.com/vgmstream/vgmstream vgmstream]


=== ivf to mp4, mp4 to ivf, mp3 to wav (FFMPEG) ===
Similarly a State path of ''wh2_dlc13_vo_actor_Empire_Markus_Wulfhart.sea'' means that the related audio will play if the character is moving on the campaign map while the 'sea' State is supplied by the game - that is to say while moving at sea.
1. Place the bat file in `C:\installation_location\ffmpeg\bin`
2. Place the files to convert in `C:\installation_location\ffmpeg\bin`
3. Run the bat file.


=== wem to wav (vgmstream) ===
If a character is moving at sea and has a 'sea' State path then that will take priority over an 'Any' State path. Likewise if a character does not have a 'land' State path then their 'Any' State path will play while on land.
1. Place the bat file in installation_location\vgmstream
2. Place the files to convert in `C:installation_location\vgmstream`
3. Run the bat file.


=== wav to wem ===
=== State Groups & States ===
1. Put your wav files in `C:\wav_to_wem\convert\input`.
Below is a full list of all the different State Groups and States used in Dialogue_Events. You cannot add new game-defined States but you can add 'modder-defined' States.
2. Run convert.bat
3. Get your wem files from `C:wav_to_wem\convert\output`.
4. If it still doesn't work for you, in convert.txt change "C:\Program Files (x86)\Audiokinetic\Wwise 2019.2.15.7667\Authoring\x64\Release\bin\WwiseCLI.exe" to whatever the location is of WwiseCLI.exe on your computer then resave it as convert.bat. Oh and make sure Wwise (version 2019.2.15.7667) is installed.


=== ca_vp8 to ivf ===
==== Game-Defined States ====
1. Click on a .ca_vp8 file in RPFM and click Convert to IVF
When a Dialogue Event contains these State Groups it should use one of the below States from that State Group.


=== ivf to ca_vp8 ===
    State Group: Battle_Type
1. Change your file's extension from .ivf to .ca_vp8.
        State: Monster_Hunt
2. Import your file to RPFM.
        State: Normal
3. Click on your file and click Convert to CAMV.
        State: Quest_Battle
        State: Survival_Battle
        State: Any
    State Group: Generic_Actor_TzArkan_Sanity
        State: Gone
        State: High
        State: Waning
        State: Any
    State Group: VO_Battle_Conversation_Clash_Type
        State: clash
        State: clash_combat
        State: pre_clash
        State: Any
    State Group: VO_Battle_Order_Air_Unit
        State: no
        State: yes
        State: Any
    StateGroup: VO_Battle_Order_Artillery_Range
        State: out_of_range
        State: within_range
        State: Any
    State Group: VO_Battle_Order_Speed
        State: fast
        State: normal
        State: Any
    State Group: VO_Battle_Order_Urgency
        State: heightened
        State: normal
        State: threatened
        State: Any
    State Group: VO_Battle_Unit_Type
        State: artillery
        State: cavalry
        State: default
        State: guns
        State: melee
        State: ranged
        State: Any
    State Group: VO_Battle_Vehicle_Ammo_Type
        State: Artilley_Canister
        State: Artilley_Explosive
        State: Any
    State Group: VO_Campaign_Daiths_Forge
        State: Ancillary_Not_Received
        State: Ancillary_Received
        State: Ancillary_Upgraded
        State: Any
    State Group: VO_Campaign_Order_Move_Type
        State: land
        State: sea
        State: Any
    State Group: VO_Campaign_Special_Ability
        State: vo_campaign_action_enemy_army
        State: vo_campaign_action_enemy_character
        State: vo_campaign_action_enemy_region
        State: vo_campaign_action_enemy_settlement
        State: vo_campaign_action_own_army
        State: vo_campaign_action_own_army_embed_while_specific_character_present
        State: vo_campaign_action_own_region
        State: vo_campaign_action_passive
        State: vo_campaign_action_summon_volcano
        State: Any


== Dialogue_Event Merger ==
==== Modder-Defined States ====
This is an excellent tool created by ChaosRobie which enables VO. The Audio Mixer mod uses this to merge the new custom VO created within Wwise into the vanilla soundbanks.
When a Dialogue Event contains these State Groups it should use one of the below States from that State Group. When defining ''your_state_key'' it can be whatever you choose, likewise ''some_vanilla_key'', ideally the key would be named following the vanilla naming convention. If you're looking to use a vanilla key, for example to use the Dialogue_Event ''battle_vo_conversation_proximity - [VO_Actor.VO_Actor]'', where you want your custom VO_Actor to interact with a vanilla VO_Actor e.g. ''[your_state_key.some_vanilla_key]'', you can refer to the db entry for the vanilla character and retrieve their VO_Actor key from there.


The tool can be downloaded [https://github.com/robert-d-schultz/Total-War-Modding-Scripts/blob/main/merge_wwise_dialogue_events_v4.py here].
    State Group: VO_Actor
        State: your_state_key
        State: some_vanilla_key
        State: Any
    State Group: VO_Culture
        State: your_state_key
        State: some_vanilla_key
        State: Any
    State Group: VO_Faction_Leader
        State: your_state_key
        State: some_vanilla_key
        State: Any
    State Group: VO_Battle_Selection
        State: your_state_key
        State: some_vanilla_key
        State: Any
    State Group: VO_Battle_Special_Ability
        State: your_state_key
        State: some_vanilla_key
        State: Any


= VO Audio Modding =  
=== Dialogue Events ===
The Audio Mixer is a compatibility mod which facilitates custom VO. It is made possible by ChaosRobie's Dialogue_Event Merger tool. To get custom VO in game you can either build your Wwise project yourself or give the people maintaining the Audio Mixer your voice acting files and they will build it for you. The amount of voice acting do is entirely up to you. You could add custom audio for every Dialogue_Event for your character, or just the essentials.
Below is a full list of all the Dialogue_Events in the game along with the State path that they use which is made up of State Groups separated by ".". You can add custom audio for each of these Dialogue_Events. To find out exactly what each Dialogue_Event is used for refer to [[Audio_modding#Researching_Dialogue_Events|Researching Dialogue_Events]].


Below is a full list of all the different Dialogue_Events in the game. You can add custom voice acting for each of these. Some of them are self explanatory, for example `battle_vo_order_attack` is the Dialogue_Event for when you tell your unit to attack another unit in battle. To learn more about the different types of audio that each Dialogue_Event is for refer to the [[Audio_modding#Researching_Dialogue_Events|Researching Dialogue_Events section]] of this wiki.
So for example, ''campaign_vo_selected'' is for when you select one of your own characters on the campaign map. Or ''battle_vo_order_attack'' is for when you tell one of your units to attack another in battle. Or ''campaign_vo_cs_proximity'' is for when certain characters are within proximity of each other on the campaign map.


=== Battle VO ===
==== Battle VO ====
This stuff happens in a battle. Plain and simple these events take place when a unit is interacted with by the player. There are some subsets within this that can pertain to what kind of unit it is.  
This stuff happens in a battle. You don't need to use every single battle_vo Dialogue_Event if you don't want to. If your character does not have any sound for a particular Dialogue_Event then it will play the sounds from the ''battle_vo_order_generic_response'' Dialogue_Event.
      
      
The bare minimum needed:
    Dialogue_Event: battle_vo_order_bat_mode_survival
        State Path: VO_Actor
    Dialogue_Event: battle_vo_order_guard_on
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_order_bat_mode_capture_pos
        State Path: VO_Actor.Battle_Type
    Dialogue_Event: battle_vo_order_halt
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_order_special_ability
        State Path: VO_Culture.VO_Actor.VO_Battle_Special_Ability.VO_Battle_Selection.VO_Battle_Order_Urgency
    Dialogue_Event: battle_vo_order_battle_continue_battle
        State Path: VO_Actor
    Dialogue_Event: battle_vo_order_climb
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_order_withdraw_tactical
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_order_pick_up_engine
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_order_move_alternative
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_order_withdraw
        State Path: VO_Culture.VO_Actor.VO_Battle_Order_Urgency
    Dialogue_Event: battle_vo_order_move_siege_tower
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_order_change_ammo
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Vehicle_Ammo_Type
    Dialogue_Event: battle_vo_order_attack
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Unit_Type.VO_Battle_Order_Urgency.VO_Faction_Leader.VO_Battle_Order_Artillery_Range
    Dialogue_Event: battle_vo_order_skirmish_off
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_order_generic_response
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Unit_Type.VO_Battle_Order_Urgency
    Dialogue_Event: battle_vo_order_fire_at_will_on
        State Path: VO_Culture.VO_Actor.VO_Battle_Order_Urgency.VO_Battle_Selection
    Dialogue_Event: battle_vo_order_short_order
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_order_change_formation
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_order_formation_lock
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_order_move
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Order_Speed.VO_Battle_Order_Urgency.VO_Battle_Order_Air_Unit.VO_Faction_Leader
    Dialogue_Event: battle_vo_order_fire_at_will_off
        State Path: VO_Culture.VO_Actor.VO_Battle_Order_Urgency.VO_Battle_Selection
    Dialogue_Event: battle_vo_order_man_siege_tower
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_order_move_ram
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_order_group_created
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_order_group_disbanded
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_order_skirmish_on
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_order_melee_off
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_order_flying_charge
        State Path: VO_Culture
    Dialogue_Event: battle_vo_order_attack_alternative
        State Path: VO_Culture.VO_Actor.VO_Battle_Unit_Type.VO_Battle_Order_Urgency
    Dialogue_Event: battle_vo_order_melee_on
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_order_battle_quit_battle
        State Path: VO_Actor
    Dialogue_Event: battle_vo_order_bat_speeches
        State Path: VO_Actor
    Dialogue_Event: battle_vo_order_formation_unlock
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_order_guard_off
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_order_bat_mode_capture_neg
        State Path: VO_Actor
    Dialogue_Event: battle_vo_order_select
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Order_Urgency.VO_Faction_Leader
 
==== Conversational Battle VO ====
This is the chitter chatter that goes on between units.
 
    Dialogue_Event: battle_vo_conversation_own_unit_under_ranged_attack
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_enemy_unit_chariot_charge
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_hef_own_army_low_stength
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_own_army_missile_amount_inferior
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_enemy_unit_flanking
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_dissapointment
        State Path: VO_Culture.VO_Actor.VO_Culture
    Dialogue_Event: battle_vo_conversation_enemy_unit_flying
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_skv_own_unit_warpfire_artillery
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_enemy_unit_charging
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_environment_weather_snow
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_enemy_army_has_many_cannons
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_environment_in_water
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_own_unit_fearful
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_hef_own_army_air_units
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_own_unit_under_dragon_firebreath_attack
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_own_unit_artillery_reload
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_enemy_unit_revealed
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_own_army_caused_damage
        State Path: VO_Culture.VO_Battle_Selection.VO_Actor
    Dialogue_Event: battle_vo_conversation_own_army_peasants_fleeing
        State Path: VO_Actor
    Dialogue_Event: battle_vo_conversation_enemy_army_black_arks_triggered
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_skv_own_unit_tactical_withdraw
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_clash
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Conversation_Clash_Type.VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_environment_in_cave
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_own_unit_artillery_firing
        State Path: VO_Culture.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_siege_defence
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Conversation_Clash_Type
    Dialogue_Event: battle_vo_conversation_environment_weather_cold
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_storm_of_magic
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_lzd_own_army_dino_rampage
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_encouragement
        State Path: VO_Culture.VO_Actor.VO_Culture
    Dialogue_Event: battle_vo_conversation_own_unit_routing
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_environment_ground_type_forest
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_def_own_army_murderous_prowess_75_percent
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_allied_unit_routing
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_enemy_skaven_unit_revealed
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_skv_own_unit_spawn_units
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_own_army_spell_cast
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_siege_attack
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Conversation_Clash_Type
    Dialogue_Event: battle_vo_conversation_def_own_army_murderous_prowess_100_percent
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_own_unit_moving
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_environment_weather_desert
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_enemy_unit_at_rear
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_enemy_unit_large_creature
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_own_army_black_arks_triggered
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_environment_weather_rain
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_own_army_at_chokepoint
        State Path: VO_Culture.VO_Battle_Selection.VO_Actor
    Dialogue_Event: battle_vo_conversation_enemy_unit_spell_cast
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_own_army_missile_amount_superior
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_own_unit_artillery_fire
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_environment_ground_type_mud
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: battle_vo_conversation_enemy_army_at_chokepoint
        State Path: VO_Culture.VO_Battle_Selection.VO_Actor
    Dialogue_Event: battle_vo_conversation_own_unit_wavering
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_enemy_unit_dragon
        State Path: VO_Culture.VO_Actor.VO_Battle_Selection
    Dialogue_Event: battle_vo_conversation_proximity
        State Path: VO_Actor.VO_Actor
 
==== Frontend ====
The frontend VO which plays when you select a faction to play as.
 
    Dialogue_Event: frontend_vo_character_select
        State Path: VO_Actor
 
==== Campaign VO ====
These are events which play on the campaign map.
 
    Dialogue_Event: campaign_vo_stance_default
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_no
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_stance_stalking
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_selected_allied
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_post_battle_defeat
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_level_up
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_yes
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_stance_settle
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_retreat
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_recruit_units
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_yes_short
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_agent_action_success
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_stance_astromancy
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_ship_dock
        State Path: VO_Actor.VO_Campaign_Order_Move_Type
    Dialogue_Event: campaign_vo_post_battle_victory
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_mounted_creature
        State Path: VO_Culture
    Dialogue_Event: campaign_vo_stance_patrol
        State Path: VO_Actor
    Dialogue_Event: gotrek_felix_departure
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_move_garrisoning
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_move_next_turn
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_stance_tunneling
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_new_commander
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_diplomacy_negative
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_stance_channeling
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_created
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_selected_fail
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_stance_land_raid
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_agent_action_failed
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_selected_first_time
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_move
        State Path: VO_Actor.VO_Campaign_Order_Move_Type
    Dialogue_Event: campaign_vo_attack
        State Path: VO_Actor.VO_Campaign_Order_Move_Type
    Dialogue_Event: campaign_vo_cam_tech_tree_response
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cam_disband
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_stance_muster
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_stance_double_time
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cam_disbanded_pos
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_special_ability
        State Path: VO_Actor.VO_Campaign_Special_Ability
    Dialogue_Event: campaign_vo_stance_ambush
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_stance_raise_dead
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_selected_neutral
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_stance_march
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cam_disbanded_neg
        State Path: VO_Actor
    Dialogue_Event: gotrek_felix_arrival
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_no_short
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cam_skill_weapon_tree
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_stance_set_camp_raiding
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_diplomacy_positive
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_diplomacy_selected
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_yes_short_aggressive
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_stance_set_camp
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cam_skill_weapon_tree_response
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_selected_short
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cam_tech_tree
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_selected
        State Path: VO_Actor
 
==== Campaign Conversational VO ====
The chitter chatter that occurs on the campaign map.
 
    Dialogue_Event: campaign_vo_cs_enemy_region_generic
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_hellforge_customisation_category
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_intimidated
        State Path: VO_Culture.VO_Actor.VO_Culture
    Dialogue_Event: campaign_vo_cs_hellforge_customisation_unit
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_tzarkan_calls_and_taunts
        State Path: VO_Actor.Generic_Actor_TzArkan_Sanity
    Dialogue_Event: campaign_vo_cs_near_sea
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_victory
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_settlement_vassal_enlist
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_forbidden_workshop_purchase_doomrocket
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_in_forest
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_summon_elector_counts_panel_open_vo
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_monster_pens_dilemma_lustria
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_weather_hot
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_pre_battle_siege_break
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_city_public_order_low
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_great_victory
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_captives_release
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_wef_daiths_forge
        State Path: VO_Actor.VO_Campaign_Daiths_Forge
    Dialogue_Event: campaign_vo_cs_other_character_details_panel_low_loyalty
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_spam_click
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_in_mountains
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_settlement_raze
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_pre_battle_siege_continue
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_other_character_details_panel_neutral
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_city_under_siege
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_proximity
        State Path: VO_Actor.VO_Actor
    Dialogue_Event: campaign_vo_cs_forbidden_workshop_upgrade_weapon_teams
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_city_riot
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_settlement_loot
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_settlement_occupy
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_settlement_do_nothing
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_weather_cold
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_great_defeat
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_city_other_generic
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_close_defeat
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_captives_enslave
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_sea_storm
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_in_snow
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_city_buildings_damaged
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_defeat
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_neutral
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_forbidden_workshop_upgrade_doomwheel
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_tzarkan_whispers
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_forbidden_workshop_upgrade_doomflayer
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_settlement_occupy_factory
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_monster_pens_event
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_monster_pens_dilemma_ghrond
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_pre_battle_fight_battle
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_settlement_occupy_outpost
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_close_victory
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_confident
        State Path: VO_Culture.VO_Actor.VO_Culture
    Dialogue_Event: campaign_vo_cs_post_battle_captives_execute
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_pre_battle_retreat
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_sacrifice_to_sotek
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_on_sea
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_settlement_sack
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_city_high_corruption
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_other_character_details_panel_positive
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_monster_pens_dilemma_naggaroth
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_monster_pens_dilemma_old_world
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_settlement_reinstate_elector_count
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_settlement_occupy_tower
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_hellforge_accept
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_in_rain
        State Path: VO_Actor
    Dialogue_Event: campaign_vo_cs_city_own_generic
        State Path: VO_Culture.VO_Actor
    Dialogue_Event: campaign_vo_cs_post_battle_settlement_establish_foreign_slot
        State Path: VO_Culture.VO_Actor
 
= Non-VO Audio Modding =
The non-VO audio modding side of the AssetEditor tools is almost ready for release. When it is you will be able to use it to make Events for non-VO audio using templates provided. You can also do this in Wwise but like VO audio modding it is a slightly complicated process.
 
= Music Audio Modding =
WIP more info soon.
 
= Replacing Vanilla Audio =
Replacing vanilla audio is essentially the fourth type of audio modding, however the key word is replacing. It means you are overriding vanilla audio rather than creating 'new' audio stuff.
 
An example of what can be done by replacing vanilla audio is the excellent [https://steamcommunity.com/sharedfiles/filedetails/?id=3091079691 Smart Throgg] mod by Oh_Man.
 
[[File:Replacing audio 3.jpg|thumb|alt=|Browsing the Audio Explorer to find a wem (step 2).]]
 
'''1.''' First make sure you have the Skip loading wem (sound) files setting unticked in your Asset Editor settings.
 
[[File:Replacing audio 4.jpg|thumb|alt=|Finding the ID of a voice actor (step 3).]] 
 
'''2.''' There are 2 types of sound events in WH3, normal 'events' and 'dialogue_events'. We'll start with replacing the audio for normal events. These are basically any event whose string includes the word Throgg.
 
[[File:Replacing audio 6.jpg|thumb|alt=|Finding the voice actor ID in a bnk dump (step 5).]]
 
Go to Tools > Audio > Audio Explorer.  Searching for the event ''Play_Nor_Throgg_Dip_Emp_Greet_Pos_01'' we can see that the corresponding sound for that event is 718902042.wem.
 
In RPFM replace that .wem file in your pack with your own. Repeat this process for all events whose names include Throgg.
 
'''3.''' Next we will deal with dialogue_events. The .wem files for these are slightly harder to find as AE doesn't (currently) have deeper browsing to search for nodes of Dialogue_Events. Searching the Dialogue_Event ''frontend_vo_character_select'' and selecting ''wh_dlc08_vo_actor_Norsca_Throgg'' we can see the .wem files that play here e.g. 37798848.wem. We can also see the ID that Wwise hashes ''wh_dlc08_vo_actor_Norsca_Throgg'' into which is 2590048255.
 
[[File:Replacing audio 7.jpg|thumb|alt=|Finding the Dialogue_Event ID in a bnk dump (step 6).]]
 
'''4.''' This works for dialogue_events that we know the name of such as this but what about all the others we can't remember? That would involve manually searching with the Audio Explorer until you found every instance of ''wh_dlc08_vo_actor_Norsca_Throgg'' which isn't a good idea. So instead we use RPFM to export all the soundbanks that would contain the relevant dialogue_events.
 
Those .bnk files are:
frontend_vo__core.bnk
campaign_vo_conversational__core.bnk
campaign_vo_conversational__warhammer3.bnk
campaign_vo__core.bnk
battle_vo_orders__core.bnk
battle_vo_generals_speech__core.bnk
battle_vo_generals_speech__warhammer3.bnk
battle_vo_conversational__core.bnk
battle_vo_conversational__warhammer3.bnk
 
Using campaign_vo__core.bnk as an example, load the .bnk in Wwiser, then click Dump banks. This will output an XML file of the contents of the .bnk which we can then search through.
 
'''5.''' We know from the Audio Explorer that ''wh_dlc08_vo_actor_Norsca_Throgg'' is hashed by Wwise into the ID 2590048255. So using whichever programme you want to browse the XML file ctrl+f for that ID and it will show every node which contains that ID.
 
'''6.''' Scroll up until you get to the dialogue_event parent of that node and copy the ID (va) for that dialogue_event e.g. 87890740.
 
'''7.''' Now back in the Audio Explorer go to File > Load HIRC from ID and search for 87890740.
 
'''8.''' This will show you that dialogue_event on the right hand side. Scroll down all the way to the bottom and you will see the original string that 87890740 was hashed from — campaign_vo_stance_default. If it's a long text to scroll through copy the text into a text document, click on the bottom of the scroll bar, and you get to the bottom much quicker!
 
'''9.''' Search the Audio Explorer for this Dialogue_Event and look for wh_dlc08_vo_actor_Norsca_Throgg. Replace the .wem files shown there. Repeat this process for every instance of 2590048255 in each of those .bnk files. campaign_vo__core.bnk is by far the biggest, the others will have less to do so don't be put off! That's it.
 
= Converting Between File Types =
The tools can be downloaded [https://github.com/Pear-231/Audio-Modding-Stuff/tree/main/File%20Converters here].
 
Requirements:
 
1. [https://www.audiokinetic.com/en/download/ Wwise (version 2019.2.15.7667)]
 
2. [https://ffmpeg.org/ FFMPEG]
 
3. [https://github.com/vgmstream/vgmstream vgmstream]


    battle_vo_order_attack
== ivf to mp4, mp4 to ivf, mp3 to wav (FFMPEG) ==
    battle_vo_order_generic_response
1. Place the bat file in "C:\installation_location\ffmpeg\bin"
    battle_vo_order_halt
    battle_vo_order_move
    battle_vo_order_select
    battle_vo_order_withdraw
    battle_vo_order_withdraw_tactical


Situationally used and entirely unnecessary if you don't want to use them:
2. Place the files to convert in "C:\installation_location\ffmpeg\bin"


    battle_vo_order_flying_charge
3. Run the bat file.
    battle_vo_order_formation_lock
    battle_vo_order_formation_unlock 
    battle_vo_order_group_created
    battle_vo_order_group_disbanded
    battle_vo_order_guard_off
    battle_vo_order_guard_on
    battle_vo_order_melee_off
    battle_vo_order_melee_on
    battle_vo_order_fire_at_will_off
    battle_vo_order_fire_at_will_on
    battle_vo_order_skirmish_off
    battle_vo_order_skirmish_on
    battle_vo_order_special_ability
    battle_vo_order_change_formation
    battle_vo_order_change_ammo
    battle_vo_order_climb
    battle_vo_order_man_siege_tower
    battle_vo_order_move_ram
    battle_vo_order_move_siege_tower
    battle_vo_order_pick_up_engine
    battle_vo_order_short_order
    battle_vo_order_move_alternative
    battle_vo_order_attack_alternative
    battle_vo_order_bat_mode_capture_neg
    battle_vo_order_bat_mode_capture_pos
    battle_vo_order_bat_mode_survival
    battle_vo_order_bat_speeches
    battle_vo_order_battle_continue_battle
    battle_vo_order_battle_quit_battle


=== Conversational Battle VO ===
== wem to wav (vgmstream) ==
This is usually the chitter chatter that goes on between units.
1. Place the bat file in "C:\installation_location\vgmstream"


    battle_vo_conversation_allied_unit_routing
2. Place the files to convert in "C:\installation_location\vgmstream"
    battle_vo_conversation_clash
    battle_vo_conversation_def_own_army_murderous_prowess_100_percent
    battle_vo_conversation_def_own_army_murderous_prowess_75_percent
    battle_vo_conversation_dissapointment
    battle_vo_conversation_encouragement
    battle_vo_conversation_enemy_army_at_chokepoint
    battle_vo_conversation_enemy_army_black_arks_triggered
    battle_vo_conversation_enemy_army_has_many_cannons
    battle_vo_conversation_enemy_skaven_unit_revealed
    battle_vo_conversation_enemy_unit_at_rear
    battle_vo_conversation_enemy_unit_charging
    battle_vo_conversation_enemy_unit_chariot_charge
    battle_vo_conversation_enemy_unit_dragon
    battle_vo_conversation_enemy_unit_flanking
    battle_vo_conversation_enemy_unit_flying
    battle_vo_conversation_enemy_unit_large_creature
    battle_vo_conversation_enemy_unit_revealed
    battle_vo_conversation_enemy_unit_spell_cast
    battle_vo_conversation_environment_ground_type_forest
    battle_vo_conversation_environment_ground_type_mud
    battle_vo_conversation_environment_in_cave
    battle_vo_conversation_environment_in_water
    battle_vo_conversation_environment_weather_cold
    battle_vo_conversation_environment_weather_desert
    battle_vo_conversation_environment_weather_rain
    battle_vo_conversation_environment_weather_snow 
    battle_vo_conversation_own_army_at_chokepoint
    battle_vo_conversation_own_army_black_arks_triggered
    battle_vo_conversation_own_army_caused_damage
    battle_vo_conversation_own_army_missile_amount_inferior
    battle_vo_conversation_own_army_missile_amount_superior
    battle_vo_conversation_own_army_peasants_fleeing
    battle_vo_conversation_own_army_spell_cast
    battle_vo_conversation_own_unit_artillery_fire
    battle_vo_conversation_own_unit_artillery_firing
    battle_vo_conversation_own_unit_artillery_reload
    battle_vo_conversation_own_unit_fearful
    battle_vo_conversation_own_unit_moving
    battle_vo_conversation_own_unit_routing
    battle_vo_conversation_own_unit_under_dragon_firebreath_attack
    battle_vo_conversation_own_unit_under_ranged_attack
    battle_vo_conversation_own_unit_wavering
    battle_vo_conversation_proximity
    battle_vo_conversation_siege_attack
    battle_vo_conversation_siege_defence
    battle_vo_conversation_storm_of_magic
    battle_vo_conversation_def_own_army_murderous_prowess_100_percent
    battle_vo_conversation_def_own_army_murderous_prowess_75_percent
    battle_vo_conversation_hef_own_army_air_units
    battle_vo_conversation_hef_own_army_low_stength
    battle_vo_conversation_lzd_own_army_dino_rampage
    battle_vo_conversation_skv_own_unit_spawn_units
    battle_vo_conversation_skv_own_unit_tactical_withdraw
    battle_vo_conversation_skv_own_unit_warpfire_artillery


=== Frontend ===
3. Run the bat file.
The frontend VO which plays when you select a faction to play as.


  frontend_vo_character_select
== wav to wem ==
1. Put your wav files in "C:\wav_to_wem\convert\input".


=== Campaign VO ===
2. Run convert.bat
These are events which play on the campaign map.
3. Get your wem files from "C:wav_to_wem\convert\output".


    campaign_vo_agent_action_failed
4. If it still doesn't work for you, in convert.txt change "C:\Program Files (x86)\Audiokinetic\Wwise 2019.2.15.7667\Authoring\x64\Release\bin\WwiseCLI.exe" to whatever the location is of WwiseCLI.exe on your computer then resave it as convert.bat. Oh and make sure Wwise (version 2019.2.15.7667) is installed.
    campaign_vo_agent_action_success
    campaign_vo_attack
    campaign_vo_created
    campaign_vo_diplomacy_negative
    campaign_vo_diplomacy_positive
    campaign_vo_diplomacy_selected
    campaign_vo_move
    campaign_vo_move_garrisoning
    campaign_vo_move_next_turn
    campaign_vo_new_commander
    campaign_vo_no
    campaign_vo_no_short
    campaign_vo_post_battle_defeat
    campaign_vo_post_battle_victory
    campaign_vo_retreat
    campaign_vo_selected
    campaign_vo_selected_allied
    campaign_vo_selected_fail
    campaign_vo_selected_first_time
    campaign_vo_selected_neutral
    campaign_vo_selected_short
    campaign_vo_ship_dock
    campaign_vo_stance_ambush
    campaign_vo_stance_channeling
    campaign_vo_stance_default
    campaign_vo_stance_double_time
    campaign_vo_stance_land_raid
    campaign_vo_stance_march
    campaign_vo_stance_patrol
    campaign_vo_stance_set_camp
    campaign_vo_stance_settle
    campaign_vo_yes
    campaign_vo_yes_short
    campaign_vo_yes_short_aggressive
    campaign_vo_cam_disband
    campaign_vo_cam_disbanded_neg
    campaign_vo_cam_disbanded_pos
    campaign_vo_cam_skill_weapon_tree
    campaign_vo_cam_skill_weapon_tree_response
    campaign_vo_cam_tech_tree
    campaign_vo_cam_tech_tree_response
    campaign_vo_level_up
    campaign_vo_mounted_creature
    campaign_vo_recruit_units
    campaign_vo_retreat
    campaign_vo_special_ability
    campaign_vo_stance_astromancy
    campaign_vo_stance_muster
    campaign_vo_stance_raise_dead
    campaign_vo_stance_set_camp_raiding
    campaign_vo_stance_stalking
    campaign_vo_stance_tunneling


===Campaign Conversational VO ===
== ca_vp8 to ivf ==
Conversational VO that happens on the campaign map.
1. Click on a .ca_vp8 file in RPFM and click Convert to IVF


    campaign_vo_cs_city_buildings_damaged
== ivf to ca_vp8 ==
    campaign_vo_cs_city_high_corruption
1. Change your file's extension from .ivf to .ca_vp8.
    campaign_vo_cs_city_other_generic
2. Import your file to RPFM.
    campaign_vo_cs_city_own_generic
3. Click on your file and click Convert to CAMV.
    campaign_vo_cs_city_public_order_low
    campaign_vo_cs_city_riot
    campaign_vo_cs_city_under_siege
    campaign_vo_cs_confident
    campaign_vo_cs_enemy_region_generic
    campaign_vo_cs_forbidden_workshop_purchase_doomrocket
    campaign_vo_cs_forbidden_workshop_upgrade_doomflayer
    campaign_vo_cs_forbidden_workshop_upgrade_doomwheel
    campaign_vo_cs_forbidden_workshop_upgrade_weapon_teams
    campaign_vo_cs_hellforge_accept
    campaign_vo_cs_hellforge_customisation_category
    campaign_vo_cs_hellforge_customisation_unit
    campaign_vo_cs_in_forest
    campaign_vo_cs_in_mountains
    campaign_vo_cs_in_rain
    campaign_vo_cs_in_snow
    campaign_vo_cs_intimidated
    campaign_vo_cs_monster_pens_dilemma_ghrond
    campaign_vo_cs_monster_pens_dilemma_lustria
    campaign_vo_cs_monster_pens_dilemma_naggaroth
    campaign_vo_cs_monster_pens_dilemma_old_world
    campaign_vo_cs_monster_pens_event
    campaign_vo_cs_near_sea
    campaign_vo_cs_neutral
    campaign_vo_cs_on_sea
    campaign_vo_cs_other_character_details_panel_low_loyalty
    campaign_vo_cs_other_character_details_panel_neutral
    campaign_vo_cs_other_character_details_panel_positive
    campaign_vo_cs_post_battle_captives_enslave
    campaign_vo_cs_post_battle_captives_execute
    campaign_vo_cs_post_battle_captives_release
    campaign_vo_cs_post_battle_close_defeat
    campaign_vo_cs_post_battle_close_victory
    campaign_vo_cs_post_battle_defeat
    campaign_vo_cs_post_battle_great_defeat
    campaign_vo_cs_post_battle_great_victory
    campaign_vo_cs_post_battle_settlement_do_nothing
    campaign_vo_cs_post_battle_settlement_establish_foreign_slot
    campaign_vo_cs_post_battle_settlement_loot
    campaign_vo_cs_post_battle_settlement_occupy
    campaign_vo_cs_post_battle_settlement_occupy_factory
    campaign_vo_cs_post_battle_settlement_occupy_outpost
    campaign_vo_cs_post_battle_settlement_occupy_tower
    campaign_vo_cs_post_battle_settlement_raze
    campaign_vo_cs_post_battle_settlement_reinstate_elector_count
    campaign_vo_cs_post_battle_settlement_sack
    campaign_vo_cs_post_battle_settlement_vassal_enlist
    campaign_vo_cs_post_battle_victory
    campaign_vo_cs_pre_battle_fight_battle
    campaign_vo_cs_pre_battle_retreat
    campaign_vo_cs_pre_battle_siege_break
    campaign_vo_cs_pre_battle_siege_continue
    campaign_vo_cs_proximity
    campaign_vo_cs_sacrifice_to_sotek
    campaign_vo_cs_sea_storm
    campaign_vo_cs_spam_click
    campaign_vo_cs_summon_elector_counts_panel_open_vo
    campaign_vo_cs_tzarkan_calls_and_taunts
    campaign_vo_cs_tzarkan_whispers
    campaign_vo_cs_weather_cold
    campaign_vo_cs_weather_hot
    campaign_vo_cs_wef_daiths_forge
    gotrek_felix_arrival
    gotrek_felix_departure

Latest revision as of 06:28, 13 February 2024

After a long time, audio modding is now possible. This is entirely down to the years of research and work developing the tools by Ole and ChaosRobie.

The Basics

The Total War games use an audio engine called Wwise. It is a very powerful but complex system. In short Wwise produces these things called soundbanks (.bnk files) which store information about how audio is played in the game.

If you want to mod audio it would probably be a good idea to have some understanding of the basics of Wwise. Some of this is covered below, however for a more foundational understanding read the WWiser documentation, and watch the Wwise 101 and 201 YouTube tutorial series.

Types of Audio

One way of categorising audio in WH3 is as VO, non-VO, and music. VO means voiceover. CA refers to this simply as VO. Strictly speaking audio can just be categorised as Events and Dialogue_Events, but breaking it down into those three categories is more relevant to the game.

VO

The VO audio system is controlled with Dialogue_Events. VO audio is typically everything associated with a unit speaking. Whether that's a character on the campaign map, or a unit in battle, it will be VO. An example of a VO Dialogue_Event is campaign_vo_selected.

You can currently mod VO audio by building a Wwise project to do so, or making a request to the Audio Mixer dev team and they will do it for you. More info on VO audio modding can be found here. Eventually VO audio modding will be a simple process handled within the AssetEditor audio tools.

Non-VO

The non-VO audio system is controlled with 'normal' Events. Some examples of non-VO audio are sounds for movies, abilities, magic, UI etc. basically anything non-VO or music. An example of a non-VO audio Event is Play_Movie_warhammer3_prologue_pro_int. Events are set to various things for example, ritual completion in the rituals_tables, in the db tables.

You can currently mod VO audio by building a Wwise project to do so. The non-VO audio modding side of the AssetEditor tools is almost ready for release. When it is you will be able to use it to make Events for non-VO audio using templates provided. More info on non-VO audio modding can be found here.

Music

The music system is again controlled with 'normal' Events. An example of a music Event is Global_Music_Play. It is set to a faction in the cultures_tables.

More info on music audio modding can be found here.

Modding music is possible but is still being researched further.

Wwise Objects

In Wwise there are things called objects. Some common objects we will interact with are Events, Containers, Sounds, Actor Mixers, and States. These are explained below.

Events

Everything starts with an Event. There are two Event types, Event and Dialog_Event. The game will typically refer to Events either in script, anim.meta file, or db tables.

Event

The first Event type is Event. Slightly confusing yes I know.

The process behind a sound playing is as follows.

Some condition in game is met to trigger an event, for example a db entry.

After the Event is triggered there is a chain of object that leads you to the actual audio played.

For example this basic Event will play a random sound from a collection of two:

Karl_Eating_Goblin_Event => Karl_Eating_Goblin_Event_ActionPlay => Random Container => Soundx.wem and soundy.wem.

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

Dialogue_Event

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 Dialogue_Event is triggered, the game sets variables which are used to lookup the child node, which typically points to a Container which in turn points to sounds.

So for example taking a look at the campaign_vo_move Dialogue_Event, if you move Karl Franz on the campaign map the game sees that you've just moved the big man. The campaign_vo_move Dialogue_Event is triggered and follows the State path defined for the vo_actor State for Karl Franz and plays the audio for Franz moving on the campaign map.

e.g. wh_main_vo_actor_Empire_KarlFranz.Any => Random Container => Soundx.wem

For more information on all the different Dialogue_Events in the game refer to here.

Containers

One type of Container is a Random Container. They are an organisational and control tool for sound objects. When triggered a Random Container would play one of its sounds, you guessed it, at random!

Sounds

Sound objects are how sound files are represented within WWise. Wwise uses .wav files, and exports them as .wem files.

Actor Mixers

Actor Mixers serve as an organisational and control tool for sound objects. It allows you to break sounds down into 'folders'. Mixers control who owns the sounds - if it's a UI sound, game sound, battle sound and so on. This is important to make the sound play as not all Actor Mixers have their volume set at all times.

States

States are a Wwise object used to path to specific Containers or Sounds based on certain conditions being met in Game. For example, when you move a character on the campaign map there is a State for whether they are moving at sea, in mountains, desert etc. Dialogue_Events and music use states to trigger sounds to play based on certain game conditions. An example of a State used with Dialogue_Events is a vo_actor. You can set a vo_actor for a unit in the main_units table in the Audio Voiceover Actor Group column e.g. wh2_dlc09_vo_actor_Tomb_Kings_Arkhan. This condition in game is then 'activated' when you are using that unit. An example for music is in cultures_tables. Here you can set the State for each Culture's music, for example the State for the Tomb Kings is tomb_kings.

The Tools

The main tools used in audio modding are: Audio Explorer, Audio Project Compiler, Wwise, Bnk Patcher, Dat Builder, File Converters, Dialogue Event Merger, Wwiser.

Some of these tools do the same thing just in different ways so you should read up on them individually.

Audio Explorer

The Audio Explorer is a powerful tool within the AssetEditor for exploring the audio data in the game. It can be accessed within the AssetEditor by going to Tools ==> Audio ==> Audio Explorer.

Audio Project Compiler

This tool is currently being redeveloped. This section of the wiki will be updated once that's done.

The Audio Project Compiler is a tool within the AssetEditor which you can use to build custom audio instead of using Wwise. It has templates for different types of custom sound. Fill in a few details, run the compiler then you're good to go!

Wwise

Wwise is the audio engine that WH3 uses. We can use it to build custom audio into the game. The advantage to using Wwise over the Audio Project Compiler is that it has a vast amount of functionality. The Audio Project Compiler is essentially a very very simple version of Wwise.

It is free for projects containing up to 200 unique sounds. If you need than 200 sounds you can contact Wwise and to request a non-commercial licence which allows unlimited sounds. Audiokinetic have already provided non-commercial licences for several WH3 audio modding projects so should do so again.

Wwise can be downloaded here. For WH3 audio modding you need version 2019.2.15.7667.

The Audio Mixer Wwise project can be downloaded here.

Bnk Patcher

This tool is intended for use by anyone who wishes to use Wwise rather than the AssetEditor Audio Project Compiler to mod audio. There are some advantanges (and disadvantages) to using Wwise over the AssetEditor. The main advantage is that you can use the full set of features that Wwise offers which is vast. The AssetEditor audio tools are a very simple and much more user friendly tool.

CA use a custom version of Wwise for WH3 audio. Different versions of Wwise produce objects in different formats. The closest public release of Wwise to CA's version is 2019.2.15.7667. CA's version of Wwise produces a different header in their soundbanks, and produces some music objects in a different format to Wwise version 2019.2.15.7667. Therefore a patcher is required.

The tool can be downloaded here.

Dat Builder

The Dat Builder tool is intended for use by anyone who wishes to use Wwise rather than the AssetEditor's Audio Project Compiler to mod audio. It is a script to write the dat file necessary for custom non-VO audio.

The tool can be downloaded here.

File Converters

Some tools to convert to and from the common file types used in audio modding. More info on using each can be found in Converting Between File Types.

The tools can be downloaded here.

Dialogue_Event Merger

This is an excellent tool created by ChaosRobie which enables VO. The Audio Mixer mod uses this to merge the new custom VO created within Wwise into the vanilla soundbanks.

The tool can be downloaded here.

Wwiser

Wwiser is a Wwise .bnk parser, to assist in handling audio from games using the Wwise engine. It can be used to view soundbanks and find information about each object in the bnk.

Wwiser can be downloaded here.

Using the Audio Explorer

The Audio Explorer is a powerful tool within the AssetEditor that has many use cases. Some of these are detailed below.

Learning Wwise

The tool allows pretty much all Wwise objects to be explored. This is very useful to learn how you later can use the Audio Project Complier to add new sounds. Under extra you can pick between Events and Dialog_Events.

The left side shows the full graph of the selected event, while the right side shows a detailed view of the Wwise data of the selected node.

Finding Sounds

How to make sense of the sound names in total war

Using this tool, it's very easy to lean which sound file is linked to what event.

Say you want to make a mod that replaces all of Throggs diplomacy lines. Doing a search in the database will give you all the events used, you can then look that up in the events view.

If one takes the event Play_Nor_Throgg_Dip_Dwf_Greet_Neg_02 which is for when Throgg talks to dwarfs, one can see that this is linked to the sound file 605570708.wem.

For a detailed guide on replacing vanilla audio refer to this section.

Playing Sounds

How to make sense of the sound names in total war

Once you've found a sound you can then play it!

Click on the sound, then click the Play Sound button.

If it doesn't play make sure you have the Skip loading wem (sound) files setting unticked in your Asset Editor settings.

Researching Dialogue_Events

You can browse for specific Dialogue_Events to see what State paths they contain and what sounds each State path plays.

Let's say you want to make your own voice acting for a character of yours. You have looked through the list of all the Dialogue_Events, and you want to look more into what exactly the voice acting for the battle_vo_order_attack Dialogue_Event sounds like in vanilla.

How to find the correct ActorMixer for adding custom sounds

So search the Audio Explorer for a Dialogue_Event e.g. battle_vo_order_attack.

Then browse to a voice actor of your choosing, for example Karl Franz. There you can see what his voice acting for this Dialogue_Event sounds like and make your own for your character in a similar vein.

Understanding Actor Mixers and Audio Busses

All sounds have to be connected to a mixer (which in turn is connected to a bus). Not all busses have their volume set at all times. For example the UI and Battle bus is not both enabled at the same time. Because of this its important that the correct mixer is selected when adding new sounds. When selecting a Sound node on the left side, "Parent structure" is added on the right side. Here you can see the mixers and busses connected to the sound.

VO Audio Modding

VO audio modding is a slightly complicated process and requires you to be familiar with Wwise. Tools are in development to make VO audio modding a much simpler process done within the AssetEditor. Until then, you can either learn how to do this in Wwise or make a request to the Audio Mixer team in the Audio Mixer Requests thread in the Modding Den Discord server.

State Paths

Dialogue_Events are what the game uses for VO. Dialogue_Events are triggered when a set of conditions in game are met. These conditions are represented by State paths. State paths are made up of States, and States are part of State Groups.

You can see State paths by inspecting a Dialogue Event e.g. campaign_vo_move in the Audio Explorer. There you will see all the State paths associated with that Dialogue_Event e.g.: wh2_dlc13_vo_actor_Empire_Markus_Wulfhart.Any. Refer to Researching Dialogue_Events for more info on how to do this.

Characters with multiple state conditions in the same Dialogue_Event

Referring to the list of Dialogue_Events below we can see the State Groups that make up the State path of a Dialogue_Event e.g.: campaign_vo_move - [VO_Actor.VO_Campaign_Order_Move_Type].

Referring to the list of Game-Defined States and Modder-Defined States we can see what States we can set within each State Group in a State path.

Each State Group in the path is separated by a ".". In the State path wh2_dlc13_vo_actor_Empire_Markus_Wulfhart.Any the first State Group is VO_Actor. The State that is being used within this State Group is wh2_dlc13_vo_actor_Empire_Markus_Wulfhart. The second State Group is VO_Campaign_Order_Move_Type. The State being used here is Any.

That State path means that it will play the audio linked to the State path if the character you are telling to move is using the VO_Actor key wh2_dlc13_vo_actor_Empire_Markus_Wulfhart and it is moving on the campaign map while the 'Any' State is supplied by the game - that is to say while any of the States in the State Group are true i.e. moving either on land or at sea.

Similarly a State path of wh2_dlc13_vo_actor_Empire_Markus_Wulfhart.sea means that the related audio will play if the character is moving on the campaign map while the 'sea' State is supplied by the game - that is to say while moving at sea.

If a character is moving at sea and has a 'sea' State path then that will take priority over an 'Any' State path. Likewise if a character does not have a 'land' State path then their 'Any' State path will play while on land.

State Groups & States

Below is a full list of all the different State Groups and States used in Dialogue_Events. You cannot add new game-defined States but you can add 'modder-defined' States.

Game-Defined States

When a Dialogue Event contains these State Groups it should use one of the below States from that State Group.

   State Group: Battle_Type
       State: Monster_Hunt
       State: Normal
       State: Quest_Battle
       State: Survival_Battle
       State: Any
   State Group: Generic_Actor_TzArkan_Sanity
       State: Gone
       State: High
       State: Waning
       State: Any
   State Group: VO_Battle_Conversation_Clash_Type
       State: clash
       State: clash_combat
       State: pre_clash
       State: Any
   State Group: VO_Battle_Order_Air_Unit
       State: no
       State: yes
       State: Any
   StateGroup: VO_Battle_Order_Artillery_Range
       State: out_of_range
       State: within_range
       State: Any
   State Group: VO_Battle_Order_Speed
       State: fast
       State: normal
       State: Any
   State Group: VO_Battle_Order_Urgency
       State: heightened
       State: normal
       State: threatened
       State: Any
   State Group: VO_Battle_Unit_Type
       State: artillery
       State: cavalry
       State: default
       State: guns
       State: melee
       State: ranged
       State: Any
   State Group: VO_Battle_Vehicle_Ammo_Type
       State: Artilley_Canister
       State: Artilley_Explosive
       State: Any
   State Group: VO_Campaign_Daiths_Forge
       State: Ancillary_Not_Received
       State: Ancillary_Received
       State: Ancillary_Upgraded
       State: Any
   State Group: VO_Campaign_Order_Move_Type
       State: land
       State: sea
       State: Any
   State Group: VO_Campaign_Special_Ability
       State: vo_campaign_action_enemy_army
       State: vo_campaign_action_enemy_character
       State: vo_campaign_action_enemy_region
       State: vo_campaign_action_enemy_settlement
       State: vo_campaign_action_own_army
       State: vo_campaign_action_own_army_embed_while_specific_character_present
       State: vo_campaign_action_own_region
       State: vo_campaign_action_passive
       State: vo_campaign_action_summon_volcano
       State: Any

Modder-Defined States

When a Dialogue Event contains these State Groups it should use one of the below States from that State Group. When defining your_state_key it can be whatever you choose, likewise some_vanilla_key, ideally the key would be named following the vanilla naming convention. If you're looking to use a vanilla key, for example to use the Dialogue_Event battle_vo_conversation_proximity - [VO_Actor.VO_Actor], where you want your custom VO_Actor to interact with a vanilla VO_Actor e.g. [your_state_key.some_vanilla_key], you can refer to the db entry for the vanilla character and retrieve their VO_Actor key from there.

   State Group: VO_Actor
       State: your_state_key
       State: some_vanilla_key
       State: Any
   State Group: VO_Culture
       State: your_state_key
       State: some_vanilla_key
       State: Any
   State Group: VO_Faction_Leader
       State: your_state_key
       State: some_vanilla_key
       State: Any
   State Group: VO_Battle_Selection
       State: your_state_key
       State: some_vanilla_key
       State: Any
   State Group: VO_Battle_Special_Ability
       State: your_state_key
       State: some_vanilla_key
       State: Any

Dialogue Events

Below is a full list of all the Dialogue_Events in the game along with the State path that they use which is made up of State Groups separated by ".". You can add custom audio for each of these Dialogue_Events. To find out exactly what each Dialogue_Event is used for refer to Researching Dialogue_Events.

So for example, campaign_vo_selected is for when you select one of your own characters on the campaign map. Or battle_vo_order_attack is for when you tell one of your units to attack another in battle. Or campaign_vo_cs_proximity is for when certain characters are within proximity of each other on the campaign map.

Battle VO

This stuff happens in a battle. You don't need to use every single battle_vo Dialogue_Event if you don't want to. If your character does not have any sound for a particular Dialogue_Event then it will play the sounds from the battle_vo_order_generic_response Dialogue_Event.

   Dialogue_Event: battle_vo_order_bat_mode_survival
       State Path: VO_Actor
   Dialogue_Event: battle_vo_order_guard_on
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_order_bat_mode_capture_pos
       State Path: VO_Actor.Battle_Type
   Dialogue_Event: battle_vo_order_halt
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_order_special_ability
       State Path: VO_Culture.VO_Actor.VO_Battle_Special_Ability.VO_Battle_Selection.VO_Battle_Order_Urgency
   Dialogue_Event: battle_vo_order_battle_continue_battle
       State Path: VO_Actor
   Dialogue_Event: battle_vo_order_climb
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_order_withdraw_tactical
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_order_pick_up_engine
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_order_move_alternative
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_order_withdraw
       State Path: VO_Culture.VO_Actor.VO_Battle_Order_Urgency
   Dialogue_Event: battle_vo_order_move_siege_tower
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_order_change_ammo
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Vehicle_Ammo_Type
   Dialogue_Event: battle_vo_order_attack
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Unit_Type.VO_Battle_Order_Urgency.VO_Faction_Leader.VO_Battle_Order_Artillery_Range
   Dialogue_Event: battle_vo_order_skirmish_off
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_order_generic_response
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Unit_Type.VO_Battle_Order_Urgency
   Dialogue_Event: battle_vo_order_fire_at_will_on
       State Path: VO_Culture.VO_Actor.VO_Battle_Order_Urgency.VO_Battle_Selection
   Dialogue_Event: battle_vo_order_short_order
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_order_change_formation
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_order_formation_lock
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_order_move
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Order_Speed.VO_Battle_Order_Urgency.VO_Battle_Order_Air_Unit.VO_Faction_Leader
   Dialogue_Event: battle_vo_order_fire_at_will_off
       State Path: VO_Culture.VO_Actor.VO_Battle_Order_Urgency.VO_Battle_Selection
   Dialogue_Event: battle_vo_order_man_siege_tower
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_order_move_ram
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_order_group_created
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_order_group_disbanded
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_order_skirmish_on
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_order_melee_off
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_order_flying_charge
       State Path: VO_Culture
   Dialogue_Event: battle_vo_order_attack_alternative
       State Path: VO_Culture.VO_Actor.VO_Battle_Unit_Type.VO_Battle_Order_Urgency
   Dialogue_Event: battle_vo_order_melee_on
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_order_battle_quit_battle
       State Path: VO_Actor
   Dialogue_Event: battle_vo_order_bat_speeches
       State Path: VO_Actor
   Dialogue_Event: battle_vo_order_formation_unlock
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_order_guard_off
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_order_bat_mode_capture_neg
       State Path: VO_Actor
   Dialogue_Event: battle_vo_order_select
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Order_Urgency.VO_Faction_Leader

Conversational Battle VO

This is the chitter chatter that goes on between units.

   Dialogue_Event: battle_vo_conversation_own_unit_under_ranged_attack
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_enemy_unit_chariot_charge
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_hef_own_army_low_stength
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_own_army_missile_amount_inferior
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_enemy_unit_flanking
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_dissapointment
       State Path: VO_Culture.VO_Actor.VO_Culture
   Dialogue_Event: battle_vo_conversation_enemy_unit_flying
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_skv_own_unit_warpfire_artillery
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_enemy_unit_charging
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_environment_weather_snow
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_enemy_army_has_many_cannons
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_environment_in_water
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_own_unit_fearful
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_hef_own_army_air_units
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_own_unit_under_dragon_firebreath_attack
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_own_unit_artillery_reload
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_enemy_unit_revealed
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_own_army_caused_damage
       State Path: VO_Culture.VO_Battle_Selection.VO_Actor
   Dialogue_Event: battle_vo_conversation_own_army_peasants_fleeing
       State Path: VO_Actor
   Dialogue_Event: battle_vo_conversation_enemy_army_black_arks_triggered
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_skv_own_unit_tactical_withdraw
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_clash
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Conversation_Clash_Type.VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_environment_in_cave
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_own_unit_artillery_firing
       State Path: VO_Culture.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_siege_defence
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Conversation_Clash_Type
   Dialogue_Event: battle_vo_conversation_environment_weather_cold
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_storm_of_magic
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_lzd_own_army_dino_rampage
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_encouragement
       State Path: VO_Culture.VO_Actor.VO_Culture
   Dialogue_Event: battle_vo_conversation_own_unit_routing
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_environment_ground_type_forest
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_def_own_army_murderous_prowess_75_percent
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_allied_unit_routing
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_enemy_skaven_unit_revealed
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_skv_own_unit_spawn_units
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_own_army_spell_cast
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_siege_attack
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection.VO_Battle_Conversation_Clash_Type
   Dialogue_Event: battle_vo_conversation_def_own_army_murderous_prowess_100_percent
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_own_unit_moving
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_environment_weather_desert
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_enemy_unit_at_rear
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_enemy_unit_large_creature
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_own_army_black_arks_triggered
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_environment_weather_rain
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_own_army_at_chokepoint
       State Path: VO_Culture.VO_Battle_Selection.VO_Actor
   Dialogue_Event: battle_vo_conversation_enemy_unit_spell_cast
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_own_army_missile_amount_superior
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_own_unit_artillery_fire
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_environment_ground_type_mud
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: battle_vo_conversation_enemy_army_at_chokepoint
       State Path: VO_Culture.VO_Battle_Selection.VO_Actor
   Dialogue_Event: battle_vo_conversation_own_unit_wavering
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_enemy_unit_dragon
       State Path: VO_Culture.VO_Actor.VO_Battle_Selection
   Dialogue_Event: battle_vo_conversation_proximity
       State Path: VO_Actor.VO_Actor

Frontend

The frontend VO which plays when you select a faction to play as.

   Dialogue_Event: frontend_vo_character_select
       State Path: VO_Actor

Campaign VO

These are events which play on the campaign map.

   Dialogue_Event: campaign_vo_stance_default
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_no
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_stance_stalking
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_selected_allied
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_post_battle_defeat
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_level_up
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_yes
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_stance_settle
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_retreat
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_recruit_units
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_yes_short
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_agent_action_success
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_stance_astromancy
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_ship_dock
       State Path: VO_Actor.VO_Campaign_Order_Move_Type
   Dialogue_Event: campaign_vo_post_battle_victory
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_mounted_creature
       State Path: VO_Culture
   Dialogue_Event: campaign_vo_stance_patrol
       State Path: VO_Actor
   Dialogue_Event: gotrek_felix_departure
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_move_garrisoning
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_move_next_turn
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_stance_tunneling
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_new_commander
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_diplomacy_negative
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_stance_channeling
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_created
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_selected_fail
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_stance_land_raid
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_agent_action_failed
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_selected_first_time
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_move
       State Path: VO_Actor.VO_Campaign_Order_Move_Type
   Dialogue_Event: campaign_vo_attack
       State Path: VO_Actor.VO_Campaign_Order_Move_Type
   Dialogue_Event: campaign_vo_cam_tech_tree_response
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cam_disband
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_stance_muster
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_stance_double_time
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cam_disbanded_pos
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_special_ability
       State Path: VO_Actor.VO_Campaign_Special_Ability
   Dialogue_Event: campaign_vo_stance_ambush
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_stance_raise_dead
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_selected_neutral
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_stance_march
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cam_disbanded_neg
       State Path: VO_Actor
   Dialogue_Event: gotrek_felix_arrival
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_no_short
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cam_skill_weapon_tree
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_stance_set_camp_raiding
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_diplomacy_positive
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_diplomacy_selected
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_yes_short_aggressive
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_stance_set_camp
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cam_skill_weapon_tree_response
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_selected_short
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cam_tech_tree
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_selected
       State Path: VO_Actor

Campaign Conversational VO

The chitter chatter that occurs on the campaign map.

   Dialogue_Event: campaign_vo_cs_enemy_region_generic
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_hellforge_customisation_category
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_intimidated
       State Path: VO_Culture.VO_Actor.VO_Culture
   Dialogue_Event: campaign_vo_cs_hellforge_customisation_unit
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_tzarkan_calls_and_taunts
       State Path: VO_Actor.Generic_Actor_TzArkan_Sanity
   Dialogue_Event: campaign_vo_cs_near_sea
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_victory
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_settlement_vassal_enlist
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_forbidden_workshop_purchase_doomrocket
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_in_forest
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_summon_elector_counts_panel_open_vo
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_monster_pens_dilemma_lustria
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_weather_hot
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_pre_battle_siege_break
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_city_public_order_low
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_great_victory
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_captives_release
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_wef_daiths_forge
       State Path: VO_Actor.VO_Campaign_Daiths_Forge
   Dialogue_Event: campaign_vo_cs_other_character_details_panel_low_loyalty
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_spam_click
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_in_mountains
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_settlement_raze
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_pre_battle_siege_continue
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_other_character_details_panel_neutral
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_city_under_siege
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_proximity
       State Path: VO_Actor.VO_Actor
   Dialogue_Event: campaign_vo_cs_forbidden_workshop_upgrade_weapon_teams
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_city_riot
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_settlement_loot
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_settlement_occupy
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_settlement_do_nothing
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_weather_cold
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_great_defeat
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_city_other_generic
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_close_defeat
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_captives_enslave
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_sea_storm
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_in_snow
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_city_buildings_damaged
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_defeat
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_neutral
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_forbidden_workshop_upgrade_doomwheel
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_tzarkan_whispers
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_forbidden_workshop_upgrade_doomflayer
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_settlement_occupy_factory
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_monster_pens_event
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_monster_pens_dilemma_ghrond
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_pre_battle_fight_battle
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_settlement_occupy_outpost
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_close_victory
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_confident
       State Path: VO_Culture.VO_Actor.VO_Culture
   Dialogue_Event: campaign_vo_cs_post_battle_captives_execute
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_pre_battle_retreat
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_sacrifice_to_sotek
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_on_sea
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_settlement_sack
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_city_high_corruption
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_other_character_details_panel_positive
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_monster_pens_dilemma_naggaroth
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_monster_pens_dilemma_old_world
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_settlement_reinstate_elector_count
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_settlement_occupy_tower
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_hellforge_accept
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_in_rain
       State Path: VO_Actor
   Dialogue_Event: campaign_vo_cs_city_own_generic
       State Path: VO_Culture.VO_Actor
   Dialogue_Event: campaign_vo_cs_post_battle_settlement_establish_foreign_slot
       State Path: VO_Culture.VO_Actor

Non-VO Audio Modding

The non-VO audio modding side of the AssetEditor tools is almost ready for release. When it is you will be able to use it to make Events for non-VO audio using templates provided. You can also do this in Wwise but like VO audio modding it is a slightly complicated process.

Music Audio Modding

WIP more info soon.

Replacing Vanilla Audio

Replacing vanilla audio is essentially the fourth type of audio modding, however the key word is replacing. It means you are overriding vanilla audio rather than creating 'new' audio stuff.

An example of what can be done by replacing vanilla audio is the excellent Smart Throgg mod by Oh_Man.

Browsing the Audio Explorer to find a wem (step 2).

1. First make sure you have the Skip loading wem (sound) files setting unticked in your Asset Editor settings.

Finding the ID of a voice actor (step 3).

2. There are 2 types of sound events in WH3, normal 'events' and 'dialogue_events'. We'll start with replacing the audio for normal events. These are basically any event whose string includes the word Throgg.

Finding the voice actor ID in a bnk dump (step 5).

Go to Tools > Audio > Audio Explorer. Searching for the event Play_Nor_Throgg_Dip_Emp_Greet_Pos_01 we can see that the corresponding sound for that event is 718902042.wem.

In RPFM replace that .wem file in your pack with your own. Repeat this process for all events whose names include Throgg.

3. Next we will deal with dialogue_events. The .wem files for these are slightly harder to find as AE doesn't (currently) have deeper browsing to search for nodes of Dialogue_Events. Searching the Dialogue_Event frontend_vo_character_select and selecting wh_dlc08_vo_actor_Norsca_Throgg we can see the .wem files that play here e.g. 37798848.wem. We can also see the ID that Wwise hashes wh_dlc08_vo_actor_Norsca_Throgg into which is 2590048255.

Finding the Dialogue_Event ID in a bnk dump (step 6).

4. This works for dialogue_events that we know the name of such as this but what about all the others we can't remember? That would involve manually searching with the Audio Explorer until you found every instance of wh_dlc08_vo_actor_Norsca_Throgg which isn't a good idea. So instead we use RPFM to export all the soundbanks that would contain the relevant dialogue_events.

Those .bnk files are: frontend_vo__core.bnk campaign_vo_conversational__core.bnk campaign_vo_conversational__warhammer3.bnk campaign_vo__core.bnk battle_vo_orders__core.bnk battle_vo_generals_speech__core.bnk battle_vo_generals_speech__warhammer3.bnk battle_vo_conversational__core.bnk battle_vo_conversational__warhammer3.bnk

Using campaign_vo__core.bnk as an example, load the .bnk in Wwiser, then click Dump banks. This will output an XML file of the contents of the .bnk which we can then search through.

5. We know from the Audio Explorer that wh_dlc08_vo_actor_Norsca_Throgg is hashed by Wwise into the ID 2590048255. So using whichever programme you want to browse the XML file ctrl+f for that ID and it will show every node which contains that ID.

6. Scroll up until you get to the dialogue_event parent of that node and copy the ID (va) for that dialogue_event e.g. 87890740.

7. Now back in the Audio Explorer go to File > Load HIRC from ID and search for 87890740.

8. This will show you that dialogue_event on the right hand side. Scroll down all the way to the bottom and you will see the original string that 87890740 was hashed from — campaign_vo_stance_default. If it's a long text to scroll through copy the text into a text document, click on the bottom of the scroll bar, and you get to the bottom much quicker!

9. Search the Audio Explorer for this Dialogue_Event and look for wh_dlc08_vo_actor_Norsca_Throgg. Replace the .wem files shown there. Repeat this process for every instance of 2590048255 in each of those .bnk files. campaign_vo__core.bnk is by far the biggest, the others will have less to do so don't be put off! That's it.

Converting Between File Types

The tools can be downloaded here.

Requirements:

1. Wwise (version 2019.2.15.7667)

2. FFMPEG

3. vgmstream

ivf to mp4, mp4 to ivf, mp3 to wav (FFMPEG)

1. Place the bat file in "C:\installation_location\ffmpeg\bin"

2. Place the files to convert in "C:\installation_location\ffmpeg\bin"

3. Run the bat file.

wem to wav (vgmstream)

1. Place the bat file in "C:\installation_location\vgmstream"

2. Place the files to convert in "C:\installation_location\vgmstream"

3. Run the bat file.

wav to wem

1. Put your wav files in "C:\wav_to_wem\convert\input".

2. Run convert.bat 3. Get your wem files from "C:wav_to_wem\convert\output".

4. If it still doesn't work for you, in convert.txt change "C:\Program Files (x86)\Audiokinetic\Wwise 2019.2.15.7667\Authoring\x64\Release\bin\WwiseCLI.exe" to whatever the location is of WwiseCLI.exe on your computer then resave it as convert.bat. Oh and make sure Wwise (version 2019.2.15.7667) is installed.

ca_vp8 to ivf

1. Click on a .ca_vp8 file in RPFM and click Convert to IVF

ivf to ca_vp8

1. Change your file's extension from .ivf to .ca_vp8. 2. Import your file to RPFM. 3. Click on your file and click Convert to CAMV.