mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-08-29 12:45:28 -05:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
267855fded | ||
|
|
4bdebb7feb | ||
|
|
ab5f69d2ef |
@@ -119,7 +119,7 @@
|
|||||||
<string notr="true">ms</string>
|
<string notr="true">ms</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>50</number>
|
<number>10</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>20000</number>
|
<number>20000</number>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
#include <QTextStream>
|
||||||
#include <QDirIterator>
|
#include <QDirIterator>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
@@ -135,7 +136,7 @@ bool AdvSceneSwitcher::eventFilter(QObject *obj, QEvent *event)
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Saving and loading
|
* Saving and loading
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
static void AskForBackup(obs_data_t *obj);
|
static void AskForBackup(const QString &json);
|
||||||
|
|
||||||
static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *)
|
static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *)
|
||||||
{
|
{
|
||||||
@@ -156,16 +157,25 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *)
|
|||||||
switcher->Stop();
|
switcher->Stop();
|
||||||
|
|
||||||
switcher->m.lock();
|
switcher->m.lock();
|
||||||
obs_data_t *obj =
|
OBSDataAutoRelease obj =
|
||||||
obs_data_get_obj(save_data, "advanced-scene-switcher");
|
obs_data_get_obj(save_data, "advanced-scene-switcher");
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
obj = obs_data_create();
|
obj = obs_data_create();
|
||||||
}
|
}
|
||||||
if (switcher->VersionChanged(obj, g_GIT_SHA1)) {
|
if (switcher->VersionChanged(obj, g_GIT_SHA1)) {
|
||||||
AskForBackup(obj);
|
auto json = obs_data_get_json(obj);
|
||||||
|
static QString jsonQString = json ? json : "";
|
||||||
|
std::thread t([]() {
|
||||||
|
obs_queue_task(
|
||||||
|
OBS_TASK_UI,
|
||||||
|
[](void *) {
|
||||||
|
AskForBackup(jsonQString);
|
||||||
|
},
|
||||||
|
nullptr, false);
|
||||||
|
});
|
||||||
|
t.detach();
|
||||||
}
|
}
|
||||||
switcher->LoadSettings(obj);
|
switcher->LoadSettings(obj);
|
||||||
obs_data_release(obj);
|
|
||||||
switcher->m.unlock();
|
switcher->m.unlock();
|
||||||
|
|
||||||
if (!switcher->stop) {
|
if (!switcher->stop) {
|
||||||
@@ -174,12 +184,12 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AskForBackup(obs_data_t *obj)
|
static void AskForBackup(const QString &json)
|
||||||
{
|
{
|
||||||
bool backupSettings = DisplayMessage(
|
const bool backupWasConfirmed = DisplayMessage(
|
||||||
obs_module_text("AdvSceneSwitcher.askBackup"), true);
|
obs_module_text("AdvSceneSwitcher.askBackup"), true, false);
|
||||||
|
|
||||||
if (!backupSettings) {
|
if (!backupWasConfirmed) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,8 +208,8 @@ static void AskForBackup(obs_data_t *obj)
|
|||||||
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
auto out = QTextStream(&file);
|
||||||
obs_data_save_json(obj, file.fileName().toUtf8().constData());
|
out << json;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
|||||||
@@ -62,17 +62,17 @@ MacroConditionAudio::~MacroConditionAudio()
|
|||||||
bool MacroConditionAudio::CheckOutputCondition()
|
bool MacroConditionAudio::CheckOutputCondition()
|
||||||
{
|
{
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
auto s = obs_weak_source_get_source(_audioSource.GetSource());
|
OBSSourceAutoRelease source =
|
||||||
|
obs_weak_source_get_source(_audioSource.GetSource());
|
||||||
|
|
||||||
|
// peak will have a value from -60 db to 0 db so we need to scale it
|
||||||
double curVolume = ((double)_peak + 60) * 1.7;
|
double curVolume = ((double)_peak + 60) * 1.7;
|
||||||
|
|
||||||
switch (_outputCondition) {
|
switch (_outputCondition) {
|
||||||
case OutputCondition::ABOVE:
|
case OutputCondition::ABOVE:
|
||||||
// peak will have a value from -60 db to 0 db
|
|
||||||
ret = curVolume > _volume;
|
ret = curVolume > _volume;
|
||||||
break;
|
break;
|
||||||
case OutputCondition::BELOW:
|
case OutputCondition::BELOW:
|
||||||
// peak will have a value from -60 db to 0 db
|
|
||||||
ret = curVolume < _volume;
|
ret = curVolume < _volume;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -84,21 +84,21 @@ bool MacroConditionAudio::CheckOutputCondition()
|
|||||||
|
|
||||||
// Reset for next check
|
// Reset for next check
|
||||||
_peak = -std::numeric_limits<float>::infinity();
|
_peak = -std::numeric_limits<float>::infinity();
|
||||||
obs_source_release(s);
|
|
||||||
if (_audioSource.GetType() == SourceSelection::Type::VARIABLE) {
|
if (_audioSource.GetType() == SourceSelection::Type::VARIABLE) {
|
||||||
ResetVolmeter();
|
ResetVolmeter();
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret && source;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MacroConditionAudio::CheckVolumeCondition()
|
bool MacroConditionAudio::CheckVolumeCondition()
|
||||||
{
|
{
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
auto s = obs_weak_source_get_source(_audioSource.GetSource());
|
OBSSourceAutoRelease source =
|
||||||
|
obs_weak_source_get_source(_audioSource.GetSource());
|
||||||
|
|
||||||
float curVolume = obs_source_get_volume(s);
|
float curVolume = obs_source_get_volume(source);
|
||||||
bool muted = obs_source_muted(s);
|
bool muted = obs_source_muted(source);
|
||||||
|
|
||||||
switch (_volumeCondition) {
|
switch (_volumeCondition) {
|
||||||
case VolumeCondition::ABOVE:
|
case VolumeCondition::ABOVE:
|
||||||
@@ -126,10 +126,9 @@ bool MacroConditionAudio::CheckVolumeCondition()
|
|||||||
}
|
}
|
||||||
|
|
||||||
SetTempVarValue("configured_volume", std::to_string(curVolume));
|
SetTempVarValue("configured_volume", std::to_string(curVolume));
|
||||||
SetTempVarValue("muted", muted ? "true" : "false");
|
SetTempVarValue("muted", (source && muted) ? "true" : "false");
|
||||||
|
|
||||||
obs_source_release(s);
|
return ret && source;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MacroConditionAudio::CheckSyncOffset()
|
bool MacroConditionAudio::CheckSyncOffset()
|
||||||
@@ -139,8 +138,9 @@ bool MacroConditionAudio::CheckSyncOffset()
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
auto s = obs_weak_source_get_source(_audioSource.GetSource());
|
OBSSourceAutoRelease source =
|
||||||
auto curOffset = obs_source_get_sync_offset(s) / nsPerMs;
|
obs_weak_source_get_source(_audioSource.GetSource());
|
||||||
|
auto curOffset = obs_source_get_sync_offset(source) / nsPerMs;
|
||||||
if (_outputCondition == OutputCondition::ABOVE) {
|
if (_outputCondition == OutputCondition::ABOVE) {
|
||||||
ret = curOffset > _syncOffset;
|
ret = curOffset > _syncOffset;
|
||||||
} else {
|
} else {
|
||||||
@@ -148,8 +148,7 @@ bool MacroConditionAudio::CheckSyncOffset()
|
|||||||
}
|
}
|
||||||
SetVariableValue(std::to_string(curOffset));
|
SetVariableValue(std::to_string(curOffset));
|
||||||
SetTempVarValue("sync_offset", std::to_string(curOffset));
|
SetTempVarValue("sync_offset", std::to_string(curOffset));
|
||||||
obs_source_release(s);
|
return ret && source;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MacroConditionAudio::CheckMonitor()
|
bool MacroConditionAudio::CheckMonitor()
|
||||||
@@ -159,13 +158,13 @@ bool MacroConditionAudio::CheckMonitor()
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
auto s = obs_weak_source_get_source(_audioSource.GetSource());
|
OBSSourceAutoRelease source =
|
||||||
ret = obs_source_get_monitoring_type(s) == _monitorType;
|
obs_weak_source_get_source(_audioSource.GetSource());
|
||||||
|
ret = obs_source_get_monitoring_type(source) == _monitorType;
|
||||||
SetVariableValue("");
|
SetVariableValue("");
|
||||||
SetTempVarValue("monitor",
|
SetTempVarValue("monitor",
|
||||||
std::to_string(obs_source_get_monitoring_type(s)));
|
std::to_string(obs_source_get_monitoring_type(source)));
|
||||||
obs_source_release(s);
|
return ret && source;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MacroConditionAudio::CheckBalance()
|
bool MacroConditionAudio::CheckBalance()
|
||||||
@@ -175,8 +174,9 @@ bool MacroConditionAudio::CheckBalance()
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
auto s = obs_weak_source_get_source(_audioSource.GetSource());
|
OBSSourceAutoRelease source =
|
||||||
auto curBalance = obs_source_get_balance_value(s);
|
obs_weak_source_get_source(_audioSource.GetSource());
|
||||||
|
auto curBalance = obs_source_get_balance_value(source);
|
||||||
if (_outputCondition == OutputCondition::ABOVE) {
|
if (_outputCondition == OutputCondition::ABOVE) {
|
||||||
ret = curBalance > _balance;
|
ret = curBalance > _balance;
|
||||||
} else {
|
} else {
|
||||||
@@ -184,8 +184,7 @@ bool MacroConditionAudio::CheckBalance()
|
|||||||
}
|
}
|
||||||
SetVariableValue(std::to_string(curBalance));
|
SetVariableValue(std::to_string(curBalance));
|
||||||
SetTempVarValue("balance", std::to_string(curBalance));
|
SetTempVarValue("balance", std::to_string(curBalance));
|
||||||
obs_source_release(s);
|
return ret && source;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MacroConditionAudio::CheckCondition()
|
bool MacroConditionAudio::CheckCondition()
|
||||||
@@ -239,13 +238,12 @@ obs_volmeter_t *AddVolmeterToSource(MacroConditionAudio *entry,
|
|||||||
obs_volmeter_t *volmeter = obs_volmeter_create(OBS_FADER_LOG);
|
obs_volmeter_t *volmeter = obs_volmeter_create(OBS_FADER_LOG);
|
||||||
obs_volmeter_add_callback(volmeter, MacroConditionAudio::SetVolumeLevel,
|
obs_volmeter_add_callback(volmeter, MacroConditionAudio::SetVolumeLevel,
|
||||||
entry);
|
entry);
|
||||||
obs_source_t *as = obs_weak_source_get_source(source);
|
OBSSourceAutoRelease audioSource = obs_weak_source_get_source(source);
|
||||||
if (!obs_volmeter_attach_source(volmeter, as)) {
|
if (!obs_volmeter_attach_source(volmeter, audioSource)) {
|
||||||
const char *name = obs_source_get_name(as);
|
const char *name = obs_source_get_name(audioSource);
|
||||||
blog(LOG_WARNING, "failed to attach volmeter to source %s",
|
blog(LOG_WARNING, "failed to attach volmeter to source %s",
|
||||||
name);
|
name);
|
||||||
}
|
}
|
||||||
obs_source_release(as);
|
|
||||||
|
|
||||||
return volmeter;
|
return volmeter;
|
||||||
}
|
}
|
||||||
@@ -455,10 +453,9 @@ MacroConditionAudioEdit::MacroConditionAudioEdit(
|
|||||||
void MacroConditionAudioEdit::UpdateVolmeterSource()
|
void MacroConditionAudioEdit::UpdateVolmeterSource()
|
||||||
{
|
{
|
||||||
delete _volMeter;
|
delete _volMeter;
|
||||||
obs_source_t *soruce = obs_weak_source_get_source(
|
OBSSourceAutoRelease soruce = obs_weak_source_get_source(
|
||||||
_entryData->_audioSource.GetSource());
|
_entryData->_audioSource.GetSource());
|
||||||
_volMeter = new VolControl(soruce);
|
_volMeter = new VolControl(soruce.Get());
|
||||||
obs_source_release(soruce);
|
|
||||||
|
|
||||||
QLayout *layout = this->layout();
|
QLayout *layout = this->layout();
|
||||||
layout->addWidget(_volMeter);
|
layout->addWidget(_volMeter);
|
||||||
|
|||||||
Reference in New Issue
Block a user