Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions src/fmod_server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1007,11 +1007,12 @@ void FmodServer::set_global_parameter_by_name_with_label(const String& parameter

float FmodServer::get_global_parameter_by_name(const String& parameter_name) {
float value = 0.f;
float final_value = 0.f;
ERROR_CHECK_WITH_REASON(
system->getParameterByName(parameter_name.utf8().get_data(), &value),
vformat("Cannot get global parameter %s", parameter_name, value)
system->getParameterByName(parameter_name.utf8().get_data(), &value, &final_value),
vformat("Cannot get global parameter %s", parameter_name)
);
return value;
return final_value;
}

void FmodServer::set_global_parameter_by_id(uint64_t parameter_id, const float value) {
Expand All @@ -1030,11 +1031,14 @@ void FmodServer::set_global_parameter_by_id_with_label(uint64_t parameter_id, co

float FmodServer::get_global_parameter_by_id(uint64_t parameter_id) {
float value = -1.f;
// Return the final value so automation and command instruments are reflected,
// matching the FMOD profiler. The first out param is only the requested value.
float final_value = 0.f;
ERROR_CHECK_WITH_REASON(
system->getParameterByID(ulong_to_fmod_parameter_id(parameter_id), &value),
vformat("Cannot set global parameter %d", parameter_id, value)
system->getParameterByID(ulong_to_fmod_parameter_id(parameter_id), &value, &final_value),
vformat("Cannot get global parameter %d", parameter_id)
);
return value;
return final_value;
}

Dictionary FmodServer::get_global_parameter_desc_by_name(const String& parameter_name) {
Expand Down
14 changes: 10 additions & 4 deletions src/studio/fmod_event.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,16 @@ void FmodEvent::_bind_methods() {

float FmodEvent::get_parameter_by_name(const String& parameter_name) const {
float p = -1;
ERROR_CHECK_WITH_REASON(_wrapped->getParameterByName(parameter_name.utf8().get_data(), &p),
// Read the final value: it accounts for automation, modulation, seek speed and
// command instruments, so it matches what the FMOD profiler shows. The first
// out param only reports the value last requested through set_parameter_*.
float final_value = -1;
ERROR_CHECK_WITH_REASON(_wrapped->getParameterByName(parameter_name.utf8().get_data(), &p, &final_value),
vformat("Cannot get parameter %s", parameter_name));
return p;
return final_value;
}


void FmodEvent::set_parameter_by_name(const String& parameter_name, float value) const {
ERROR_CHECK_WITH_REASON(_wrapped->setParameterByName(parameter_name.utf8().get_data(), value),
vformat("Cannot set parameter %s to value %f", parameter_name, value));
Expand All @@ -81,9 +86,10 @@ float FmodEvent::get_parameter_by_id(uint64_t long_id) const {

float FmodEvent::get_parameter_by_fmod_id(const FMOD_STUDIO_PARAMETER_ID& parameter_id) const {
float value = -1.0f;
ERROR_CHECK_WITH_REASON(_wrapped->getParameterByID(parameter_id, &value),
float final_value = -1;
ERROR_CHECK_WITH_REASON(_wrapped->getParameterByID(parameter_id, &value, &final_value),
vformat("Cannot get parameter with id: %d", fmod_parameter_id_to_ulong(parameter_id)));
return value;
return final_value;
}

void FmodEvent::set_parameter_by_id(uint64_t long_id, float value) const {
Expand Down