The FMOD mixer can be controlled with all its functions in Godot. In this tutorial I’ll show yow how to control the volume of busses, VCAs and trigger snapshots directly from Godot using GDScript.
Bus and VCA volume control in Godot 4
Busses and VCAs in Godot can be controlled in two simple steps:
- Getting an instance of a Bus/VCA
- Adjusting the volume of the Bus/VCA
Let’s take a closer look at these steps by showing an example for Busses:
Getting the Bus
Export a BusAsset and also declare Bus variable in your script:
extends Node3D @export var bus_asset: BusAsset var bus: Bus func _ready(): bus = FMODStudioModule.get_studio_system().get_bus(bus_asset.path)
In the inspector you will be able to select the Bus from a list of Busses:
Alternatively, you can use the path of the bus
extends Node3D var bus_path: String = "bus:/TestBus" var bus: Bus func _ready(): bus = FMODStudioModule.get_studio_system().get_bus(bus_path)
If you have generated the GUIDs for your project you can also get the Bus by ID:
extends Node3D var bus: Bus func _ready(): bus = FMODStudioModule.get_studio_system().get_bus_by_id(FMODGuids.Busses.MASTER_BUS)
Setting the volume of a Bus
In this example we set our desired volume for the Bus by calling
set_volume on the
set_volume takes a float value ranging from 0 (mute) to 1 (full volume):
extends Node3D @export var bus_asset: BusAsset var bus: Bus @export_range(0.0, 1.0) var volume: float = 1.0 func _ready(): bus = FMODStudioModule.get_studio_system().get_bus(bus_asset.path) func _process(delta): if bus: bus.set_volume(volume)
Keep in mind that the value set in
set_volume is applied as a scaling factor to the volume level set in FMOD Studio.
Setting the volume of a VCA
Setting the volume of a VCA is very similar to doing it for Busses. Get the
VCA instance using the StudioSystem object and call
set_volume on it:
extends Node3D @export var vca_asset: VCAAsset var vca: VCA @export_range(0.0, 1.0) var volume: float = 1.0 func _ready(): vca = FMODStudioModule.get_studio_system().get_vca(vca_asset.path) func _process(delta): if vca: vca.set_volume(volume)
get_vca_id is also available in this case.
Triggering FMOD Snapshots in Godot
In FMOD, Snapshots are like normal Events. Triggering snapshots consists in playing them back using the StudioEventEmitter nodes or manually playing Events in code.
This is an example of triggering a Snapshot:
extends Node3D var event_path = "snapshot:/TestSnapshot" var event_instance: EventInstance func _ready(): event_instance = FMODRuntime.create_instance_path(event_path) event_instance.start()
As you can see here, only the path of the Event changes. Instead of
event:/ we now use
snapshot:/ to point to the correct path.