probably fixed cmd

This commit is contained in:
Stefano D'Angelo 2024-01-25 15:53:06 +01:00
parent 906ecf4033
commit 15af961437
3 changed files with 103 additions and 21 deletions

View File

@ -300,11 +300,11 @@ JNI_FUNC(nativeAudioStart)(JNIEnv* env, jobject thiz) {
if (audio_bus_data[j].index == AUDIO_BUS_IN)
for (char k = 0; k < audio_bus_data[j].channels; k++, ix++, ixb++)
x[ix] = x_buf + BLOCK_SIZE * ixb;
# if NUM_NON_OPT_CHANNELS_IN > NUM_CHANNELS_IN
# if NUM_NON_OPT_CHANNELS_IN > NUM_CHANNELS_IN
else if (!audio_bus_data[j].optional)
for (char k = 0; k < audio_bus_data[j].channels; k++, ix++)
x[ix] = zero;
# endif
# endif
else
for (char k = 0; k < audio_bus_data[j].channels; k++, ix++)
x[ix] = NULL;
@ -326,11 +326,11 @@ JNI_FUNC(nativeAudioStart)(JNIEnv* env, jobject thiz) {
if (audio_bus_data[j].index == AUDIO_BUS_OUT)
for (char k = 0; k < audio_bus_data[j].channels; k++, iy++, iyb++)
y[iy] = y_buf + BLOCK_SIZE * iyb;
# if NUM_NON_OPT_CHANNELS_OUT > NUM_CHANNELS_OUT
# if NUM_NON_OPT_CHANNELS_OUT > NUM_CHANNELS_OUT
else if (!audio_bus_data[j].optional)
for (char k = 0; k < audio_bus_data[j].channels; k++, iy++)
y[iy] = zero;
# endif
# endif
else
for (char k = 0; k < audio_bus_data[j].channels; k++, iy++)
y[iy] = NULL;

View File

@ -1,10 +1,39 @@
#define AUDIO_BUS_IN {{=it.product.buses.findIndex(x => x.type == "audio" && x.direction == "input" && !x.cv && !x.sidechain)}}
#define AUDIO_BUS_OUT {{=it.product.buses.findIndex(x => x.type == "audio" && x.direction == "output" && !x.cv && !x.sidechain)}}
#define NUM_AUDIO_BUSES_IN {{=it.product.buses.filter(x => x.type == "audio" && x.direction == "input").length}}
#define NUM_AUDIO_BUSES_OUT {{=it.product.buses.filter(x => x.type == "audio" && x.direction == "output").length}}
#define NUM_CHANNELS_IN {{=it.product.buses.filter(x => x.type == "audio" && x.direction == "input" && !x.cv && !x.sidechain) ? (it.product.buses.filter(x => x.type == "audio" && x.direction == "input" && !x.cv && !x.sidechain)[0].channels == "mono" ? 1 : 2) : 0}}
#define NUM_CHANNELS_OUT {{=it.product.buses.filter(x => x.type == "audio" && x.direction == "output" && !x.cv && !x.sidechain) ? (it.product.buses.filter(x => x.type == "audio" && x.direction == "output" && !x.cv && !x.sidechain)[0].channels == "mono" ? 1 : 2) : 0}}
#define AUDIO_BUS_IN {{=it.product.buses.findIndex(x => x.type == "audio" && x.direction == "input" && !x.cv && !x.sidechain)}}
#define AUDIO_BUS_OUT {{=it.product.buses.findIndex(x => x.type == "audio" && x.direction == "output" && !x.cv && !x.sidechain)}}
#define PARAMETERS_N {{=it.product.parameters.length}}
#define NUM_CHANNELS_IN {{=it.product.buses.filter(x => x.type == "audio" && x.direction == "input" && !x.cv && !x.sidechain) ? (it.product.buses.filter(x => x.type == "audio" && x.direction == "input" && !x.cv && !x.sidechain)[0].channels == "mono" ? 1 : 2) : 0}}
#define NUM_CHANNELS_OUT {{=it.product.buses.filter(x => x.type == "audio" && x.direction == "output" && !x.cv && !x.sidechain) ? (it.product.buses.filter(x => x.type == "audio" && x.direction == "output" && !x.cv && !x.sidechain)[0].channels == "mono" ? 1 : 2) : 0}}
#define NUM_NON_OPT_CHANNELS_IN {{=it.product.buses.filter(x => x.type == "audio" && x.direction == "input" && !x.optional).reduce((a, x) => a + (x.channels == "mono" ? 1 : 2), 0)}}
#define NUM_NON_OPT_CHANNELS_OUT {{=it.product.buses.filter(x => x.type == "audio" && x.direction == "output" && !x.optional).reduce((a, x) => a + (x.channels == "mono" ? 1 : 2), 0)}}
#define NUM_ALL_CHANNELS_IN {{=it.product.buses.filter(x => x.type == "audio" && x.direction == "input").reduce((a, x) => a + (x.channels == "mono" ? 1 : 2), 0)}}
#define NUM_ALL_CHANNELS_OUT {{=it.product.buses.filter(x => x.type == "audio" && x.direction == "output").reduce((a, x) => a + (x.channels == "mono" ? 1 : 2), 0)}}
#define NUM_MIDI_INPUTS {{=it.product.buses.filter(x => x.type == "midi" && x.direction == "input").length}}
#if (AUDIO_BUS_IN >= 0) || (AUDIO_BUS_OUT >= 0)
static struct {
size_t index;
char out;
char optional;
char channels;
} audio_bus_data[NUM_AUDIO_BUSES_IN + NUM_AUDIO_BUSES_OUT] = {
{{~it.product.buses :b:i}}
{{?b.type == "audio"}}
{
/* .index = */ {{=i}},
/* .out = */ {{=b.direction == "output" ? 1 : 0}},
/* .optional = */ {{=b.optional ? 1 : 0}},
/* .channels = */ {{=b.channels == "mono" ? 1 : 2}}
},
{{?}}
{{~}}
};
#endif
#define PARAMETERS_N {{=it.product.parameters.length}}
#if PARAMETERS_N > 0

View File

@ -13,11 +13,18 @@
plugin instance;
void * mem;
#if NUM_CHANNELS_IN > 0
float * x[NUM_CHANNELS_IN];
#if (NUM_NON_OPT_CHANNELS_IN > NUM_CHANNELS_IN) || (NUM_NON_OPT_CHANNELS_OUT > NUM_CHANNELS_OUT)
float zero[BLOCK_SIZE];
#endif
#if NUM_CHANNELS_OUT > 0
float * y[NUM_CHANNELS_OUT];
#if NUM_ALL_CHANNELS_IN > 0
float * x[NUM_ALL_CHANNELS_IN];
#else
const float ** x = NULL;
#endif
#if NUM_ALL_CHANNELS_OUT > 0
float * y[NUM_ALL_CHANNELS_OUT];
#else
float ** y = NULL;
#endif
float fs = 44100.f;
size_t bufsize = 128;
@ -271,10 +278,30 @@ int main(int argc, char * argv[]) {
fprintf(stderr, "Out of memory\n");
return EXIT_FAILURE;
}
for (size_t i = 0; i < NUM_CHANNELS_IN; i++)
x[i] = x_buf + i * bufsize;
#else
float ** x = NULL;
#endif
#if NUM_ALL_CHANNELS_IN > 0
# if AUDIO_BUS_IN >= 0
size_t ix = 0;
size_t ixb = 0;
for (size_t j = 0; j < NUM_AUDIO_BUSES_IN + NUM_AUDIO_BUSES_OUT; j++) {
if (audio_bus_data[j].out)
continue;
if (audio_bus_data[j].index == AUDIO_BUS_IN)
for (char k = 0; k < audio_bus_data[j].channels; k++, ix++, ixb++)
x[ix] = x_buf + bufsize * ixb;
# if NUM_NON_OPT_CHANNELS_IN > NUM_CHANNELS_IN
else if (!audio_bus_data[j].optional)
for (char k = 0; k < audio_bus_data[j].channels; k++, ix++)
x[ix] = zero;
# endif
else
for (char k = 0; k < audio_bus_data[j].channels; k++, ix++)
x[ix] = NULL;
}
# else
for (size_t i = 0; i < NUM_ALL_CHANNELS_IN; i++)
x[i] = NULL;
# endif
#endif
#if NUM_CHANNELS_OUT > 0
@ -292,10 +319,30 @@ int main(int argc, char * argv[]) {
fprintf(stderr, "Out of memory\n");
return EXIT_FAILURE;
}
for (size_t i = 0; i < NUM_CHANNELS_IN; i++)
y[i] = y_buf + i * bufsize;
#else
float ** y = NULL;
#endif
#if NUM_ALL_CHANNELS_OUT > 0
# if AUDIO_BUS_OUT >= 0
size_t iy = 0;
size_t iyb = 0;
for (size_t j = 0; j < NUM_AUDIO_BUSES_IN + NUM_AUDIO_BUSES_OUT; j++) {
if (!audio_bus_data[j].out)
continue;
if (audio_bus_data[j].index == AUDIO_BUS_OUT)
for (char k = 0; k < audio_bus_data[j].channels; k++, iy++, iyb++)
y[iy] = y_buf + bufsize * iyb;
# if NUM_NON_OPT_CHANNELS_OUT > NUM_CHANNELS_OUT
else if (!audio_bus_data[j].optional)
for (char k = 0; k < audio_bus_data[j].channels; k++, iy++)
y[iy] = zero;
# endif
else
for (char k = 0; k < audio_bus_data[j].channels; k++, iy++)
y[iy] = NULL;
}
# else
for (size_t i = 0; i < NUM_ALL_CHANNELS_OUT; i++)
y[i] = NULL;
# endif
#endif
#if NUM_CHANNELS_OUT > 0
@ -320,7 +367,13 @@ int main(int argc, char * argv[]) {
int32_t n = tinywav_read_f(&tw_in, x, bufsize);
if (n == 0)
break;
#if (NUM_NON_OPT_CHANNELS_IN > NUM_CHANNELS_IN) || (NUM_NON_OPT_CHANNELS_OUT > NUM_CHANNELS_OUT)
memset(zero, 0, bufsize * sizeof(float));
#endif
plugin_process(&instance, (const float **)x, y, n);
# if PARAMETERS_N > 0
for (size_t j = 0; j < PARAMETERS_N; j++) {
if (!param_data[j].out)