mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Merge pull request #547 from WizardCM/audio-active
Requests, Events: Add support for Audio Active
This commit is contained in:
commit
2d4dd580b4
@ -271,6 +271,8 @@ void WSEvents::connectSourceSignals(obs_source_t* source) {
|
||||
signal_handler_connect(sh, "volume", OnSourceVolumeChange, this);
|
||||
signal_handler_connect(sh, "audio_sync", OnSourceAudioSyncOffsetChanged, this);
|
||||
signal_handler_connect(sh, "audio_mixers", OnSourceAudioMixersChanged, this);
|
||||
signal_handler_connect(sh, "audio_activate", OnSourceAudioActivated, this);
|
||||
signal_handler_connect(sh, "audio_deactivate", OnSourceAudioDeactivated, this);
|
||||
|
||||
signal_handler_connect(sh, "filter_add", OnSourceFilterAdded, this);
|
||||
signal_handler_connect(sh, "filter_remove", OnSourceFilterRemoved, this);
|
||||
@ -303,6 +305,8 @@ void WSEvents::disconnectSourceSignals(obs_source_t* source) {
|
||||
signal_handler_disconnect(sh, "volume", OnSourceVolumeChange, this);
|
||||
signal_handler_disconnect(sh, "audio_sync", OnSourceAudioSyncOffsetChanged, this);
|
||||
signal_handler_disconnect(sh, "audio_mixers", OnSourceAudioMixersChanged, this);
|
||||
signal_handler_disconnect(sh, "audio_activate", OnSourceAudioActivated, this);
|
||||
signal_handler_disconnect(sh, "audio_deactivate", OnSourceAudioDeactivated, this);
|
||||
|
||||
signal_handler_disconnect(sh, "filter_add", OnSourceFilterAdded, this);
|
||||
signal_handler_disconnect(sh, "filter_remove", OnSourceFilterRemoved, this);
|
||||
@ -1098,6 +1102,52 @@ void WSEvents::OnSourceMuteStateChange(void* param, calldata_t* data) {
|
||||
self->broadcastUpdate("SourceMuteStateChanged", fields);
|
||||
}
|
||||
|
||||
/**
|
||||
* A source has removed audio.
|
||||
*
|
||||
* @return {String} `sourceName` Source name
|
||||
*
|
||||
* @api events
|
||||
* @name SourceAudioDeactivated
|
||||
* @category sources
|
||||
* @since unreleased
|
||||
*/
|
||||
void WSEvents::OnSourceAudioDeactivated(void* param, calldata_t* data) {
|
||||
auto self = reinterpret_cast<WSEvents*>(param);
|
||||
|
||||
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
|
||||
if (!source) {
|
||||
return;
|
||||
}
|
||||
|
||||
OBSDataAutoRelease fields = obs_data_create();
|
||||
obs_data_set_string(fields, "sourceName", obs_source_get_name(source));
|
||||
self->broadcastUpdate("SourceAudioDeactivated", fields);
|
||||
}
|
||||
|
||||
/**
|
||||
* A source has added audio.
|
||||
*
|
||||
* @return {String} `sourceName` Source name
|
||||
*
|
||||
* @api events
|
||||
* @name SourceAudioActivated
|
||||
* @category sources
|
||||
* @since unreleased
|
||||
*/
|
||||
void WSEvents::OnSourceAudioActivated(void* param, calldata_t* data) {
|
||||
auto self = reinterpret_cast<WSEvents*>(param);
|
||||
|
||||
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
|
||||
if (!source) {
|
||||
return;
|
||||
}
|
||||
|
||||
OBSDataAutoRelease fields = obs_data_create();
|
||||
obs_data_set_string(fields, "sourceName", obs_source_get_name(source));
|
||||
self->broadcastUpdate("SourceAudioActivated", fields);
|
||||
}
|
||||
|
||||
/**
|
||||
* The audio sync offset of a source has changed.
|
||||
*
|
||||
|
@ -126,6 +126,8 @@ private:
|
||||
static void OnSourceMuteStateChange(void* param, calldata_t* data);
|
||||
static void OnSourceAudioSyncOffsetChanged(void* param, calldata_t* data);
|
||||
static void OnSourceAudioMixersChanged(void* param, calldata_t* data);
|
||||
static void OnSourceAudioActivated(void* param, calldata_t* data);
|
||||
static void OnSourceAudioDeactivated(void* param, calldata_t* data);
|
||||
|
||||
static void OnSourceRename(void* param, calldata_t* data);
|
||||
|
||||
|
@ -95,6 +95,7 @@ const QHash<QString, RpcMethodHandler> WSRequestHandler::messageMap {
|
||||
{ "ToggleMute", &WSRequestHandler::ToggleMute },
|
||||
{ "SetMute", &WSRequestHandler::SetMute },
|
||||
{ "GetMute", &WSRequestHandler::GetMute },
|
||||
{ "GetAudioActive", &WSRequestHandler::GetAudioActive },
|
||||
{ "SetSourceName", &WSRequestHandler::SetSourceName },
|
||||
{ "SetSyncOffset", &WSRequestHandler::SetSyncOffset },
|
||||
{ "GetSyncOffset", &WSRequestHandler::GetSyncOffset },
|
||||
|
@ -112,6 +112,7 @@ class WSRequestHandler {
|
||||
RpcResponse ToggleMute(const RpcRequest&);
|
||||
RpcResponse SetMute(const RpcRequest&);
|
||||
RpcResponse GetMute(const RpcRequest&);
|
||||
RpcResponse GetAudioActive(const RpcRequest&);
|
||||
RpcResponse SetSourceName(const RpcRequest&);
|
||||
RpcResponse SetSyncOffset(const RpcRequest&);
|
||||
RpcResponse GetSyncOffset(const RpcRequest&);
|
||||
|
@ -345,6 +345,40 @@ RpcResponse WSRequestHandler::ToggleMute(const RpcRequest& request)
|
||||
return request.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the audio's active status of a specified source.
|
||||
*
|
||||
* @param {String} `sourceName` Source name.
|
||||
*
|
||||
* @return {boolean} `audioActive` Audio active status of the source.
|
||||
*
|
||||
* @api requests
|
||||
* @name GetAudioActive
|
||||
* @category sources
|
||||
* @since unreleased
|
||||
*/
|
||||
RpcResponse WSRequestHandler::GetAudioActive(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");
|
||||
}
|
||||
|
||||
OBSDataAutoRelease response = obs_data_create();
|
||||
obs_data_set_bool(response, "audioActive", obs_source_audio_active(source));
|
||||
|
||||
return request.success(response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets (aka rename) the name of a source. Also works with scenes since scenes are technically sources in OBS.
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user