mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Introduce useDecibel
bool to GetVolume
and SetVolume
to give a better, built-in option for people to use decibels of attenuation instead of amplitude.
This commit is contained in:
@ -156,12 +156,13 @@ RpcResponse WSRequestHandler::GetSourceTypesList(const RpcRequest& request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the volume of the specified source.
|
* Get the volume of the specified source. Default response uses mul format, NOT SLIDER PERCENTAGE.
|
||||||
*
|
*
|
||||||
* @param {String} `source` Source name.
|
* @param {String} `source` Source name.
|
||||||
|
* @param {boolean (optional)} `useDecibel` Output volume in decibels of attenuation instead of amplitude/mul.
|
||||||
*
|
*
|
||||||
* @return {String} `name` Source name.
|
* @return {String} `name` Source name.
|
||||||
* @return {double} `volume` Volume of the source. Between `0.0` and `1.0`.
|
* @return {double} `volume` Volume of the source. Between `0.0` and `1.0` if using mul, under `0.0` if using dB (since it is attenuating).
|
||||||
* @return {boolean} `muted` Indicates whether the source is muted.
|
* @return {boolean} `muted` Indicates whether the source is muted.
|
||||||
*
|
*
|
||||||
* @api requests
|
* @api requests
|
||||||
@ -175,6 +176,11 @@ RpcResponse WSRequestHandler::GetVolume(const RpcRequest& request)
|
|||||||
return request.failed("missing request parameters");
|
return request.failed("missing request parameters");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool useDecibel = false;
|
||||||
|
if (request.hasField("useDecibel")) {
|
||||||
|
useDecibel = obs_data_get_bool(request.parameters(), "useDecibel");
|
||||||
|
}
|
||||||
|
|
||||||
QString sourceName = obs_data_get_string(request.parameters(), "source");
|
QString sourceName = obs_data_get_string(request.parameters(), "source");
|
||||||
if (sourceName.isEmpty()) {
|
if (sourceName.isEmpty()) {
|
||||||
return request.failed("invalid request parameters");
|
return request.failed("invalid request parameters");
|
||||||
@ -187,33 +193,45 @@ RpcResponse WSRequestHandler::GetVolume(const RpcRequest& request)
|
|||||||
|
|
||||||
OBSDataAutoRelease response = obs_data_create();
|
OBSDataAutoRelease response = obs_data_create();
|
||||||
obs_data_set_string(response, "name", obs_source_get_name(source));
|
obs_data_set_string(response, "name", obs_source_get_name(source));
|
||||||
obs_data_set_double(response, "volume", obs_source_get_volume(source));
|
if (!useDecibel) {
|
||||||
|
obs_data_set_double(response, "volume", obs_source_get_volume(source));
|
||||||
|
} else {
|
||||||
|
float volume = obs_source_get_volume(source);
|
||||||
|
obs_data_set_double(response, "volume", obs_mul_to_db(volume));
|
||||||
|
}
|
||||||
obs_data_set_bool(response, "muted", obs_source_muted(source));
|
obs_data_set_bool(response, "muted", obs_source_muted(source));
|
||||||
|
|
||||||
return request.success(response);
|
return request.success(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the volume of the specified source.
|
* Set the volume of the specified source. Default request format uses mul, NOT SLIDER PERCENTAGE.
|
||||||
*
|
*
|
||||||
* @param {String} `source` Source name.
|
* @param {String} `source` Source name.
|
||||||
* @param {double} `volume` Desired volume. Must be between `0.0` and `1.0`.
|
* @param {double} `volume` Desired volume. Must be between `0.0` and `1.0` for mul, and under 0.0 for dB. Note: OBS will interpret dB values under -100.0 as Inf.
|
||||||
*
|
* @param {boolean (optional)} `useDecibel` Interperet `volume` data as decibels instead of amplitude/mul.
|
||||||
* @api requests
|
*
|
||||||
* @name SetVolume
|
* @api requests
|
||||||
* @category sources
|
* @name SetVolume
|
||||||
* @since 4.0.0
|
* @category sources
|
||||||
*/
|
* @since 4.0.0
|
||||||
|
*/
|
||||||
RpcResponse WSRequestHandler::SetVolume(const RpcRequest& request)
|
RpcResponse WSRequestHandler::SetVolume(const RpcRequest& request)
|
||||||
{
|
{
|
||||||
if (!request.hasField("source") || !request.hasField("volume")) {
|
if (!request.hasField("source") || !request.hasField("volume")) {
|
||||||
return request.failed("missing request parameters");
|
return request.failed("missing request parameters");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool useDecibel = false;
|
||||||
|
if (request.hasField("useDecibel")) {
|
||||||
|
useDecibel = obs_data_get_bool(request.parameters(), "useDecibel");
|
||||||
|
}
|
||||||
|
|
||||||
QString sourceName = obs_data_get_string(request.parameters(), "source");
|
QString sourceName = obs_data_get_string(request.parameters(), "source");
|
||||||
float sourceVolume = obs_data_get_double(request.parameters(), "volume");
|
float sourceVolume = obs_data_get_double(request.parameters(), "volume");
|
||||||
|
|
||||||
if (sourceName.isEmpty() || sourceVolume < 0.0 || sourceVolume > 1.0) {
|
if ((useDecibel && sourceVolume > 0.0) ||
|
||||||
|
(!useDecibel && (sourceVolume < 0.0 || sourceVolume > 1.0)) || (sourceName.isEmpty())) {
|
||||||
return request.failed("invalid request parameters");
|
return request.failed("invalid request parameters");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,7 +240,12 @@ RpcResponse WSRequestHandler::SetVolume(const RpcRequest& request)
|
|||||||
return request.failed("specified source doesn't exist");
|
return request.failed("specified source doesn't exist");
|
||||||
}
|
}
|
||||||
|
|
||||||
obs_source_set_volume(source, sourceVolume);
|
if (!useDecibel) {
|
||||||
|
obs_source_set_volume(source, sourceVolume);
|
||||||
|
} else {
|
||||||
|
float mul = obs_db_to_mul(sourceVolume);
|
||||||
|
obs_source_set_volume(source, mul);
|
||||||
|
}
|
||||||
return request.success();
|
return request.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user