mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Requests: Add SetAudioTracks and GetAudioTracks (#690)
* Requests: Add SetAudioTracks and GetAudioTracks * Renamed mixer to track. * Fix: Prevent pushing track out of range * Fix: Changed result values back to track. * Fix: Changed source parameter to sourceName. * Fix: Updated @param. * Revert "Fix: Updated @param." This reverts commit 24a5eb6fabf9ddccd1bd0176cb695408e46306f9.
This commit is contained in:
parent
01c898b104
commit
b13822db8d
@ -121,6 +121,8 @@ const QHash<QString, RpcMethodHandler> WSRequestHandler::messageMap{
|
|||||||
{ "GetSourceTypesList", &WSRequestHandler::GetSourceTypesList },
|
{ "GetSourceTypesList", &WSRequestHandler::GetSourceTypesList },
|
||||||
{ "GetVolume", &WSRequestHandler::GetVolume },
|
{ "GetVolume", &WSRequestHandler::GetVolume },
|
||||||
{ "SetVolume", &WSRequestHandler::SetVolume },
|
{ "SetVolume", &WSRequestHandler::SetVolume },
|
||||||
|
{ "SetAudioTracks", &WSRequestHandler::SetAudioTracks },
|
||||||
|
{ "GetAudioTracks", &WSRequestHandler::GetAudioTracks },
|
||||||
{ "GetMute", &WSRequestHandler::GetMute },
|
{ "GetMute", &WSRequestHandler::GetMute },
|
||||||
{ "SetMute", &WSRequestHandler::SetMute },
|
{ "SetMute", &WSRequestHandler::SetMute },
|
||||||
{ "ToggleMute", &WSRequestHandler::ToggleMute },
|
{ "ToggleMute", &WSRequestHandler::ToggleMute },
|
||||||
|
@ -138,6 +138,8 @@ class WSRequestHandler {
|
|||||||
RpcResponse GetSourceTypesList(const RpcRequest&);
|
RpcResponse GetSourceTypesList(const RpcRequest&);
|
||||||
RpcResponse GetVolume(const RpcRequest&);
|
RpcResponse GetVolume(const RpcRequest&);
|
||||||
RpcResponse SetVolume(const RpcRequest&);
|
RpcResponse SetVolume(const RpcRequest&);
|
||||||
|
RpcResponse SetAudioTracks(const RpcRequest&);
|
||||||
|
RpcResponse GetAudioTracks(const RpcRequest&);
|
||||||
RpcResponse GetMute(const RpcRequest&);
|
RpcResponse GetMute(const RpcRequest&);
|
||||||
RpcResponse SetMute(const RpcRequest&);
|
RpcResponse SetMute(const RpcRequest&);
|
||||||
RpcResponse ToggleMute(const RpcRequest&);
|
RpcResponse ToggleMute(const RpcRequest&);
|
||||||
|
@ -315,6 +315,96 @@ RpcResponse WSRequestHandler::SetVolume(const RpcRequest& request)
|
|||||||
return request.success();
|
return request.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes whether an audio track is active for a source.
|
||||||
|
*
|
||||||
|
* @param {String} `sourceName` Source name.
|
||||||
|
* @param {int} `track` Audio tracks 1-6.
|
||||||
|
* @param {boolean} `active` Whether audio track is active or not.
|
||||||
|
*
|
||||||
|
* @api requests
|
||||||
|
* @name SetTracks
|
||||||
|
* @category sources
|
||||||
|
* @since unreleased
|
||||||
|
*/
|
||||||
|
RpcResponse WSRequestHandler::SetAudioTracks(const RpcRequest& request)
|
||||||
|
{
|
||||||
|
if (!request.hasField("sourceName") || !request.hasField("track") || !request.hasField("active")) {
|
||||||
|
return request.failed("missing request parameters");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString sourceName = obs_data_get_string(request.parameters(), "sourceName");
|
||||||
|
bool active = obs_data_get_bool(request.parameters(), "active");
|
||||||
|
int track = obs_data_get_int(request.parameters(), "track")-1;
|
||||||
|
|
||||||
|
if (sourceName.isEmpty() || track > 5 || track < 0) {
|
||||||
|
return request.failed("invalid request parameters");
|
||||||
|
}
|
||||||
|
|
||||||
|
OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8());
|
||||||
|
if (!source) {
|
||||||
|
return request.failed("specified source doesn't exist");
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t mixers = obs_source_get_audio_mixers(source);
|
||||||
|
|
||||||
|
if (active && !(mixers & (1 << track)))
|
||||||
|
mixers |= (1 << track);
|
||||||
|
else if (mixers & (1 << track))
|
||||||
|
mixers &= ~(1 << track);
|
||||||
|
|
||||||
|
obs_source_set_audio_mixers(source, mixers);
|
||||||
|
|
||||||
|
return request.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets whether an audio track is active for a source.
|
||||||
|
*
|
||||||
|
* @param {String} `sourceName` Source name.
|
||||||
|
*
|
||||||
|
* @return {boolean} `track1`
|
||||||
|
* @return {boolean} `track2`
|
||||||
|
* @return {boolean} `track3`
|
||||||
|
* @return {boolean} `track4`
|
||||||
|
* @return {boolean} `track5`
|
||||||
|
* @return {boolean} `track6`
|
||||||
|
*
|
||||||
|
* @api requests
|
||||||
|
* @name GetTracks
|
||||||
|
* @category sources
|
||||||
|
* @since unreleased
|
||||||
|
*/
|
||||||
|
RpcResponse WSRequestHandler::GetAudioTracks(const RpcRequest& request)
|
||||||
|
{
|
||||||
|
if (!request.hasField("sourceName")) {
|
||||||
|
return request.failed("missing request parameters");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString sourceName = obs_data_get_string(request.parameters(), "sourceName");
|
||||||
|
if (sourceName.isEmpty()) {
|
||||||
|
return request.failed("invalid request parameters");
|
||||||
|
}
|
||||||
|
|
||||||
|
OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8());
|
||||||
|
if (!source) {
|
||||||
|
return request.failed("specified source doesn't exist");
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t mixers = obs_source_get_audio_mixers(source);
|
||||||
|
|
||||||
|
OBSDataAutoRelease response = obs_data_create();
|
||||||
|
obs_data_set_string(response, "name", obs_source_get_name(source));
|
||||||
|
obs_data_set_bool(response, "track1", mixers & (1 << 0));
|
||||||
|
obs_data_set_bool(response, "track2", mixers & (1 << 1));
|
||||||
|
obs_data_set_bool(response, "track3", mixers & (1 << 2));
|
||||||
|
obs_data_set_bool(response, "track4", mixers & (1 << 3));
|
||||||
|
obs_data_set_bool(response, "track5", mixers & (1 << 4));
|
||||||
|
obs_data_set_bool(response, "track6", mixers & (1 << 5));
|
||||||
|
return request.success(response);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the mute status of a specified source.
|
* Get the mute status of a specified source.
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user