Add looping and host sync options to audio file

Signed-off-by: falkTX <falktx@falktx.com>
This commit is contained in:
falkTX 2022-02-08 19:03:50 +00:00
parent 59e7818b41
commit 56bcbb6b94
No known key found for this signature in database
GPG key ID: CDBAA37ABC74FBA0

View file

@ -74,6 +74,21 @@ struct CarlaInternalPluginModule : Module, Thread {
NUM_LIGHTS
};
enum Parameters {
kParameterLooping,
kParameterHostSync,
kParameterVolume,
kParameterEnabled,
kParameterInfoChannels,
kParameterInfoBitRate,
kParameterInfoBitDepth,
kParameterInfoSampleRate,
kParameterInfoLength,
kParameterInfoPosition,
kParameterInfoPoolFill,
kParameterCount
};
CardinalPluginContext* const pcontext;
const NativePluginDescriptor* fCarlaPluginDescriptor = nullptr;
@ -151,7 +166,7 @@ struct CarlaInternalPluginModule : Module, Thread {
fCarlaPluginDescriptor->activate(fCarlaPluginHandle);
// host-sync disabled by default
fCarlaPluginDescriptor->set_parameter_value(fCarlaPluginHandle, 1, 0.0f);
fCarlaPluginDescriptor->set_parameter_value(fCarlaPluginHandle, kParameterHostSync, 0.0f);
startThread();
}
@ -218,6 +233,18 @@ struct CarlaInternalPluginModule : Module, Thread {
DISTRHO_SAFE_ASSERT_RETURN(rootJ != nullptr, nullptr);
json_object_set_new(rootJ, "filepath", json_string(currentFile.c_str()));
if (fCarlaPluginHandle != nullptr)
{
const bool looping = fCarlaPluginDescriptor->get_parameter_value(fCarlaPluginHandle,
kParameterLooping) > 0.5f;
const bool hostSync = fCarlaPluginDescriptor->get_parameter_value(fCarlaPluginHandle,
kParameterLooping) > 0.5f;
json_object_set_new(rootJ, "looping", json_boolean(looping));
json_object_set_new(rootJ, "hostSync", json_boolean(hostSync));
}
return rootJ;
}
@ -241,6 +268,21 @@ struct CarlaInternalPluginModule : Module, Thread {
currentFile.clear();
fileChanged = true;
if (fCarlaPluginHandle == nullptr)
return;
if (json_t* const loopingJ = json_object_get(rootJ, "looping"))
{
const float value = json_boolean_value(loopingJ) ? 1.0f : 0.0f;
fCarlaPluginDescriptor->set_parameter_value(fCarlaPluginHandle, kParameterLooping, value);
}
if (json_t* const hostSyncJ = json_object_get(rootJ, "hostSync"))
{
const float value = json_boolean_value(hostSyncJ) ? 1.0f : 0.0f;
fCarlaPluginDescriptor->set_parameter_value(fCarlaPluginHandle, kParameterHostSync, value);
}
}
void process(const ProcessArgs&) override
@ -594,6 +636,20 @@ struct AudioFileWidget : ModuleWidgetWithSideScrews<23> {
{
menu->addChild(new ui::MenuSeparator);
const bool looping = module->fCarlaPluginDescriptor->get_parameter_value(module->fCarlaPluginHandle,
CarlaInternalPluginModule::kParameterLooping) > 0.5f;
const bool hostSync = module->fCarlaPluginDescriptor->get_parameter_value(module->fCarlaPluginHandle,
CarlaInternalPluginModule::kParameterHostSync) > 0.5f;
menu->addChild(createMenuItem("Looping", looping ? CHECKMARK_STRING : "",
[=]() { module->fCarlaPluginDescriptor->set_parameter_value(module->fCarlaPluginHandle,
CarlaInternalPluginModule::kParameterLooping, looping ? 0.0f : 1.0f); }
));
menu->addChild(createMenuItem("Host sync", hostSync ? CHECKMARK_STRING : "",
[=]() { module->fCarlaPluginDescriptor->set_parameter_value(module->fCarlaPluginHandle,
CarlaInternalPluginModule::kParameterHostSync, hostSync ? 0.0f : 1.0f); }
));
struct LoadAudioFileItem : MenuItem {
CarlaInternalPluginModule* const module;