diff --git a/src/requesthandler/RequestHandler.cpp b/src/requesthandler/RequestHandler.cpp index f3c21599..ca8c54f1 100644 --- a/src/requesthandler/RequestHandler.cpp +++ b/src/requesthandler/RequestHandler.cpp @@ -77,6 +77,8 @@ const std::map RequestHandler::_handlerMap {"ToggleInputMute", &RequestHandler::ToggleInputMute}, {"GetInputVolume", &RequestHandler::GetInputVolume}, {"SetInputVolume", &RequestHandler::SetInputVolume}, + {"GetInputAudioBalance", &RequestHandler::GetInputAudioBalance}, + {"SetInputAudioBalance", &RequestHandler::SetInputAudioBalance}, {"GetInputAudioSyncOffset", &RequestHandler::GetInputAudioSyncOffset}, {"SetInputAudioSyncOffset", &RequestHandler::SetInputAudioSyncOffset}, {"GetInputAudioMonitorType", &RequestHandler::GetInputAudioMonitorType}, diff --git a/src/requesthandler/RequestHandler.h b/src/requesthandler/RequestHandler.h index 19e3fde4..410b6b56 100644 --- a/src/requesthandler/RequestHandler.h +++ b/src/requesthandler/RequestHandler.h @@ -99,6 +99,8 @@ class RequestHandler { RequestResult ToggleInputMute(const Request&); RequestResult GetInputVolume(const Request&); RequestResult SetInputVolume(const Request&); + RequestResult GetInputAudioBalance(const Request&); + RequestResult SetInputAudioBalance(const Request&); RequestResult GetInputAudioSyncOffset(const Request&); RequestResult SetInputAudioSyncOffset(const Request&); RequestResult GetInputAudioMonitorType(const Request&); diff --git a/src/requesthandler/RequestHandler_Inputs.cpp b/src/requesthandler/RequestHandler_Inputs.cpp index f65a3c07..d7018bc9 100644 --- a/src/requesthandler/RequestHandler_Inputs.cpp +++ b/src/requesthandler/RequestHandler_Inputs.cpp @@ -488,6 +488,61 @@ RequestResult RequestHandler::SetInputVolume(const Request& request) return RequestResult::Success(); } +/** + * Gets the audio balance of an input. + * + * @requestField inputName | String | Name of the input to get the audio balance of + * + * @responseField inputAudioBalance | Number | Audio balance value from 0.0-1.0 + * + * @requestType GetInputAudioBalance + * @complexity 2 + * @rpcVersion -1 + * @initialVersion 5.0.0 + * @api requests + * @category inputs + */ +RequestResult RequestHandler::GetInputAudioBalance(const Request& request) +{ + RequestStatus::RequestStatus statusCode; + std::string comment; + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!input) + return RequestResult::Error(statusCode, comment); + + json responseData; + responseData["inputAudioBalance"] = obs_source_get_balance_value(input); + + return RequestResult::Success(responseData); +} + +/** + * Sets the audio balance of an input. + * + * @requestField inputName | String | Name of the input to set the audio balance of + * @requestField inputAudioBalance | Number | New audio balance value | >= 0.0, <= 1.0 + * + * @requestType SetInputAudioBalance + * @complexity 2 + * @rpcVersion -1 + * @initialVersion 5.0.0 + * @api requests + * @category inputs + */ +RequestResult RequestHandler::SetInputAudioBalance(const Request& request) +{ + RequestStatus::RequestStatus statusCode; + std::string comment; + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!(input && request.ValidateNumber("inputAudioBalance", statusCode, comment, 0.0, 1.0))) + return RequestResult::Error(statusCode, comment); + + float inputAudioBalance = request.RequestData["inputAudioBalance"]; + obs_source_set_balance_value(input, inputAudioBalance); + + return RequestResult::Success(); +} + /** * Gets the audio sync offset of an input. *