aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/jalv.c24
-rw-r--r--src/jalv_console.c15
-rw-r--r--src/jalv_gtk.c2
-rw-r--r--src/jalv_internal.h1
4 files changed, 41 insertions, 1 deletions
diff --git a/src/jalv.c b/src/jalv.c
index 8b3592c..c1da3c5 100644
--- a/src/jalv.c
+++ b/src/jalv.c
@@ -795,6 +795,26 @@ jalv_emit_ui_events(Jalv* jalv)
return true;
}
+static bool
+jalv_apply_control_arg(Jalv* jalv, const char* s)
+{
+ char sym[256];
+ float val = 0.0f;
+ if (sscanf(s, "%[^=]=%f", sym, &val) != 2) {
+ fprintf(stderr, "warning: Ignoring invalid value `%s'\n", s);
+ return false;
+ }
+
+ struct Port* port = jalv_port_by_symbol(jalv, sym);
+ if (!port) {
+ fprintf(stderr, "warning: Ignoring value for unknown port `%s'\n", sym);
+ return false;
+ }
+
+ port->control = val;
+ return true;
+}
+
static void
signal_handler(int ignored)
{
@@ -1120,6 +1140,10 @@ main(int argc, char** argv)
jalv_apply_state(&jalv, state);
}
+ for (char** c = jalv.opts.controls; *c; ++c) {
+ jalv_apply_control_arg(&jalv, *c);
+ }
+
/* Set Jack callbacks */
jack_set_process_callback(jalv.jack_client,
&jack_process_cb, (void*)(&jalv));
diff --git a/src/jalv_console.c b/src/jalv_console.c
index 0fb3125..b75bb3c 100644
--- a/src/jalv_console.c
+++ b/src/jalv_console.c
@@ -53,7 +53,11 @@ jalv_ui_port_event(Jalv* jalv,
int
jalv_init(int* argc, char*** argv, JalvOptions* opts)
{
- int a = 1;
+ opts->controls = malloc(sizeof(char*));
+ opts->controls[0] = NULL;
+
+ int n_controls = 0;
+ int a = 1;
for (; a < *argc && (*argv)[a][0] == '-'; ++a) {
if ((*argv)[a][1] == 'h') {
return print_usage((*argv)[0], true);
@@ -75,6 +79,15 @@ jalv_init(int* argc, char*** argv, JalvOptions* opts)
return 1;
}
opts->buffer_size = atoi((*argv)[a]);
+ } else if ((*argv)[a][1] == 'c') {
+ if (++a == *argc) {
+ fprintf(stderr, "Missing argument for -c\n");
+ return 1;
+ }
+ opts->controls = realloc(opts->controls,
+ (++n_controls + 1) * sizeof(char*));
+ opts->controls[n_controls - 1] = (*argv)[a];
+ opts->controls[n_controls] = NULL;
} else if ((*argv)[a][1] == 'd') {
opts->dump = true;
} else {
diff --git a/src/jalv_gtk.c b/src/jalv_gtk.c
index ed7c78b..bb92dbb 100644
--- a/src/jalv_gtk.c
+++ b/src/jalv_gtk.c
@@ -97,6 +97,8 @@ jalv_init(int* argc, char*** argv, JalvOptions* opts)
"Buffer size for plugin <=> UI communication", "SIZE"},
{ "update-frequency", 'r', 0, G_OPTION_ARG_DOUBLE, &opts->update_rate,
"UI update frequency", NULL},
+ { "control", 'c', 0, G_OPTION_ARG_STRING_ARRAY, &opts->controls,
+ "UI update frequency", NULL},
{ 0, 0, 0, 0, 0, 0, 0 } };
GError* error = NULL;
const int err = gtk_init_with_args(
diff --git a/src/jalv_internal.h b/src/jalv_internal.h
index 4952d4f..4531ee6 100644
--- a/src/jalv_internal.h
+++ b/src/jalv_internal.h
@@ -87,6 +87,7 @@ typedef struct {
typedef struct {
char* uuid; ///< Session UUID
char* load; ///< Path for state to load
+ char** controls; ///< Control values
uint32_t buffer_size; ///< Plugin<=>UI communication buffer size
double update_rate; ///< UI update rate in Hz
int dump; ///< Dump communication iff true