You can directly access FmodServer to access fmod api.
Attach to existing event, 3D positioning
For example you can directly create an instance of an event using FmodServer, set its position attribute, paramters,
etc.
Here is an example:
1 2 3 4 5 6 7 8 910111213141516171819202122232425
extendsSprite2DvarisPlaying:bool=truevarevent:FmodEvent=null# Called when the node enters the scene tree for the first time.func_ready():event=FmodServer.create_event_instance("event:/Vehicles/Car Engine")event.set_2d_attributes(self.global_transform)event.set_parameter_by_name("RPM",600)event.set_volume(2)event.start()# warning-ignore:unused_argumentfunc_process(_delta):ifInput.is_action_just_pressed("space"):isPlaying=!isPlayingif(isPlaying):print("Mower playing")event.set_paused(false)else:print("Mower paused")event.set_paused(true)elifInput.is_action_just_pressed("kill_event"):self.queue_free()
extendsArea2Dvarevent:FmodEvent=nullvaricon:Sprite2D# Called when the node enters the scene tree for the first time.func_ready():event=FmodServer.create_event_instance("event:/Music/Level 02")event.set_callback(Callable(self,"change_color"),FmodServer.FMOD_STUDIO_EVENT_CALLBACK_ALL)body_entered.connect(enter)body_exited.connect(leave)event.start()event.set_paused(true)# warning-ignore:unused_argumentfuncenter(_area):print("enter")event.set_paused(false)# warning-ignore:unused_argumentfuncleave(_area):print("leave")event.set_paused(true)# warning-ignore:unused_argumentfuncchange_color(_dict:Dictionary,type:int):iftype==FmodServer.FMOD_STUDIO_EVENT_CALLBACK_TIMELINE_BEAT:$icon.self_modulate=Color(randf_range(0,1),randf_range(0,1),randf_range(0,1),1)
Playing sounds using FMOD Core / Low Level API
You can also access Fmod low level api to play sound using FmodServer:
extendsArea2D# Declare member variables here. Examples:# var a = 2varmusic:FmodSound=null# Called when the node enters the scene tree for the first time.func_ready():FmodServer.load_file_as_music("res://assets/Music/jingles_SAX07.ogg")# warning-ignore:return_value_discardedbody_entered.connect(enter)# warning-ignore:return_value_discardedbody_exited.connect(leave)# warning-ignore:unused_argumentfuncenter(_area):print("enter")music=FmodServer.create_sound_instance("res://assets/Music/jingles_SAX07.ogg")music.play()# warning-ignore:unused_argumentfuncleave(_area):print("leave")music.release()func_exit_tree():FmodServer.unload_file("res://assets/Music/jingles_SAX07.ogg")
Muting all event
You can mute all event using mute_all_events. This will mute the master bus.
func_ready():FmodServer.set_software_format(0,FmodServer.FMOD_SPEAKERMODE_STEREO,0)FmodServer.init(1024,FmodServer.FMOD_STUDIO_INIT_LIVEUPDATE,FmodServer.FMOD_INIT_NORMAL)FmodServer.set_sound_3d_settings(1.0,64.0,1.0)# load banksFmodServer.load_bank("res://Master.bank",FmodServer.FMOD_STUDIO_LOAD_BANK_NORMAL)FmodServer.load_bank("res://Master.strings.bank",FmodServer.FMOD_STUDIO_LOAD_BANK_NORMAL)FmodServer.load_bank("res://Music.bank",FmodServer.FMOD_STUDIO_LOAD_BANK_NORMAL)# register listenerFmodServer.add_listener(0,self)# play some eventsFmodServer.play_one_shot("event:/Music/Level 02",self)varmy_music_event=FmodServer.create_event_instance("event:/Music/Level 01")FmodServer.start_event(my_music_event)vart=Timer.new()t.set_wait_time(3)t.set_one_shot(true)self.add_child(t)t.start()yield(t,"timeout")FmodServer.mute_all_events();t=Timer.new()t.set_wait_time(3)t.set_one_shot(true)self.add_child(t)t.start()yield(t,"timeout")FmodServer.unmute_all_events()
func_ready():# set up FMODFmodServer.set_software_format(0,FmodServer.FMOD_SPEAKERMODE_STEREO,0)FmodServer.init(1024,FmodServer.FMOD_STUDIO_INIT_LIVEUPDATE,FmodServer.FMOD_INIT_NORMAL)FmodServer.set_sound_3d_settings(1/0,64.0,1.0)# load banksFmodServer.load_bank("res://Master.bank",FmodServer.FMOD_STUDIO_LOAD_BANK_NORMAL)FmodServer.load_bank("res://Master.strings.bank",FmodServer.FMOD_STUDIO_LOAD_BANK_NORMAL)FmodServer.load_bank("res://Music.bank",FmodServer.FMOD_STUDIO_LOAD_BANK_NORMAL)# register listenerFmodServer.add_listener(0,self)# play some eventsFmodServer.play_one_shot("event:/Music/Level 02",self)varmy_music_event=FmodServer.create_event_instance("event:/Music/Level 01")FmodServer.start_event(my_music_event)vart=Timer.new()t.set_wait_time(3)t.set_one_shot(true)self.add_child(t)t.start()yield(t,"timeout")FmodServer.pause_all_events(true)t=Timer.new()t.set_wait_time(3)t.set_one_shot(true)self.add_child(t)t.start()yield(t,"timeout")FmodServer.pause_all_events(false)
Changing the default audio output device
By default, FMOD will use the primary audio output device as determined by the operating system. This can be changed at runtime, ideally through your game's Options Menu.
Here, get_available_drivers() returns an Array which contains a Dictionary for every audio driver found. Each Dictionary contains fields such as the name, sample rate
and speaker config of the respective driver. Most importantly, it contains the id for that driver.
```gdscript
retrieve all available audio drivers
var drivers = FmodServer.get_available_drivers()
# change the audio driver
you must pass in the id of the respective driver
FmodServer.set_driver(id)
# retrieve the id of the currently set driver
var id = FmodServer.get_driver()
123456789
## Reducing audio playback latency
You may encounter that the audio playback has some latency. This may be caused by the DSP buffer size. You can change the value **before** initialisation to adjust it:
```gdscript
FmodServer.set_dsp_buffer_size(512, 4)
# retrieve the buffer length
FmodServer.get_dsp_buffer_length()
# retrieve the number of buffers
FmodServer.get_dsp_num_buffers()
Profiling & querying performance data
get_performance_data returns an object which contains current performance stats for CPU, Memory and File Streaming usage of both FMOD Studio and the Core System.
123456
# called every framevarperf_data=FmodServer.get_performance_data()print(perf_data.CPU)print(perf_data.memory)print(perf_data.file)