diff --git a/src/fmod_server.cpp b/src/fmod_server.cpp index a28b0f33..6eebbd79 100644 --- a/src/fmod_server.cpp +++ b/src/fmod_server.cpp @@ -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) { @@ -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) { diff --git a/src/studio/fmod_event.cpp b/src/studio/fmod_event.cpp index a9b5be93..f8e76131 100644 --- a/src/studio/fmod_event.cpp +++ b/src/studio/fmod_event.cpp @@ -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)); @@ -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 {