Add helper util to build rdf.
parent
d86d43eddd
commit
a460b65485
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
CFLAGS := -Wall -O3 -g -D_GNU_SOURCE
|
CFLAGS := -Wall -O3 -g -D_GNU_SOURCE
|
||||||
LDFLAGS := -lm
|
LDFLAGS := -lm
|
||||||
|
|
||||||
|
@ -9,7 +10,7 @@ $(PTAPOBJ): CFLAGS += `pkg-config lv2 --cflags`
|
||||||
$(PTAPO): LDFLAGS += `pkg-config lv2 --libs`
|
$(PTAPO): LDFLAGS += `pkg-config lv2 --libs`
|
||||||
|
|
||||||
PTAPUISRC := ptapui.cpp
|
PTAPUISRC := ptapui.cpp
|
||||||
PTAPUIOBJ := $(PTAPUISRC:.cpp=.o) ../pui/*.o
|
PTAPUIOBJ := $(PTAPUISRC:.cpp=.o)
|
||||||
PTAPUIO := ptapui.so
|
PTAPUIO := ptapui.so
|
||||||
|
|
||||||
$(PTAPUIOBJ): CFLAGS += `pkg-config lv2 ftgl pugl-0 --cflags`
|
$(PTAPUIOBJ): CFLAGS += `pkg-config lv2 ftgl pugl-0 --cflags`
|
||||||
|
@ -17,7 +18,7 @@ $(PTAPUIO): LDFLAGS += `pkg-config lv2 ftgl pugl-0 --libs`
|
||||||
|
|
||||||
CPP := g++
|
CPP := g++
|
||||||
|
|
||||||
all: $(PTAPO) $(PTAPUIO)
|
all: $(PTAPO) $(PTAPUIO) ptap.ttl
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm $(PTAPOBJ) $(PTAPO) $(PTAPUIOBJ) $(PTAPUIO)
|
rm $(PTAPOBJ) $(PTAPO) $(PTAPUIOBJ) $(PTAPUIO)
|
||||||
|
@ -25,11 +26,21 @@ clean:
|
||||||
depend:
|
depend:
|
||||||
makedepend $(PTAPSRC)
|
makedepend $(PTAPSRC)
|
||||||
|
|
||||||
|
ptap.ttl: ptap_helper
|
||||||
|
./ptap_helper rdf $@
|
||||||
|
|
||||||
|
ptap_helper: ptap_helper.cpp ptap.h
|
||||||
|
$(CPP) $(CFLAGS) $(LDFLAGS) $< -o $@
|
||||||
|
|
||||||
|
$(PTAPOBJ): $(PTAPSRC) ptap.h
|
||||||
|
|
||||||
|
$(PTAPUIOBJ): $(PTAPUISRC) ptap.h
|
||||||
|
|
||||||
$(PTAPO): $(PTAPOBJ)
|
$(PTAPO): $(PTAPOBJ)
|
||||||
$(CPP) $(LDFLAGS) -shared -fPIC -Wl,-soname,$(PTAPO) $(PTAPOBJ) -o $@
|
$(CPP) $(LDFLAGS) -shared -fPIC -Wl,-soname,$(PTAPO) $(PTAPOBJ) -o $@
|
||||||
|
|
||||||
$(PTAPUIO): $(PTAPUIOBJ)
|
$(PTAPUIO): $(PTAPUIOBJ) ../pui/*.o
|
||||||
$(CPP) $(LDFLAGS) -shared -fPIC -Wl,-soname,$(PTAPUIO) $(PTAPUIOBJ) -o $@
|
$(CPP) $(LDFLAGS) -shared -fPIC -Wl,-soname,$(PTAPUIO) $(PTAPUIOBJ) ../pui/*.o -o $@
|
||||||
|
|
||||||
%.o: %.cpp
|
%.o: %.cpp
|
||||||
$(CPP) -c -fPIC $(CFLAGS) $< -o $@
|
$(CPP) -c -fPIC $(CFLAGS) $< -o $@
|
||||||
|
|
210
ptap/default.ttl
210
ptap/default.ttl
|
@ -11,243 +11,237 @@
|
||||||
lv2:appliesTo <urn:fuzzle:ptap> ;
|
lv2:appliesTo <urn:fuzzle:ptap> ;
|
||||||
rdfs:label "Default" ;
|
rdfs:label "Default" ;
|
||||||
lv2:port [
|
lv2:port [
|
||||||
lv2:symbol "left_1_gain" ;
|
lv2:symbol "out_1_gain" ;
|
||||||
pset:value 0.0
|
|
||||||
] , [
|
|
||||||
lv2:symbol "left_2_gain" ;
|
|
||||||
pset:value 0.0
|
|
||||||
] , [
|
|
||||||
lv2:symbol "left_3_gain" ;
|
|
||||||
pset:value 0.0
|
|
||||||
] , [
|
|
||||||
lv2:symbol "left_4_gain" ;
|
|
||||||
pset:value 0.0
|
|
||||||
] , [
|
|
||||||
lv2:symbol "left_5_gain" ;
|
|
||||||
pset:value 0.0
|
|
||||||
] , [
|
|
||||||
lv2:symbol "left_6_gain" ;
|
|
||||||
pset:value 0.0
|
|
||||||
] , [
|
|
||||||
lv2:symbol "left_gain" ;
|
|
||||||
pset:value 1.0
|
pset:value 1.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "left_l_gain" ;
|
lv2:symbol "out_1_gain_1" ;
|
||||||
|
pset:value 0.0
|
||||||
|
] , [
|
||||||
|
lv2:symbol "out_1_gain_2" ;
|
||||||
|
pset:value 0.0
|
||||||
|
] , [
|
||||||
|
lv2:symbol "out_1_gain_3" ;
|
||||||
|
pset:value 0.0
|
||||||
|
] , [
|
||||||
|
lv2:symbol "out_1_gain_4" ;
|
||||||
|
pset:value 0.0
|
||||||
|
] , [
|
||||||
|
lv2:symbol "out_1_gain_5" ;
|
||||||
|
pset:value 0.0
|
||||||
|
] , [
|
||||||
|
lv2:symbol "out_1_gain_6" ;
|
||||||
|
pset:value 0.0
|
||||||
|
] , [
|
||||||
|
lv2:symbol "out_1_input_1" ;
|
||||||
pset:value 1.0
|
pset:value 1.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "left_r_gain" ;
|
lv2:symbol "out_1_input_2" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "left_unused" ;
|
lv2:symbol "out_2_gain" ;
|
||||||
pset:value 0.0
|
|
||||||
] , [
|
|
||||||
lv2:symbol "right_1_gain" ;
|
|
||||||
pset:value 0.0
|
|
||||||
] , [
|
|
||||||
lv2:symbol "right_2_gain" ;
|
|
||||||
pset:value 0.0
|
|
||||||
] , [
|
|
||||||
lv2:symbol "right_3_gain" ;
|
|
||||||
pset:value 0.0
|
|
||||||
] , [
|
|
||||||
lv2:symbol "right_4_gain" ;
|
|
||||||
pset:value 0.0
|
|
||||||
] , [
|
|
||||||
lv2:symbol "right_5_gain" ;
|
|
||||||
pset:value 0.0
|
|
||||||
] , [
|
|
||||||
lv2:symbol "right_6_gain" ;
|
|
||||||
pset:value 0.0
|
|
||||||
] , [
|
|
||||||
lv2:symbol "right_gain" ;
|
|
||||||
pset:value 1.0
|
pset:value 1.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "right_l_gain" ;
|
lv2:symbol "out_2_gain_1" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "right_r_gain" ;
|
lv2:symbol "out_2_gain_2" ;
|
||||||
|
pset:value 0.0
|
||||||
|
] , [
|
||||||
|
lv2:symbol "out_2_gain_3" ;
|
||||||
|
pset:value 0.0
|
||||||
|
] , [
|
||||||
|
lv2:symbol "out_2_gain_4" ;
|
||||||
|
pset:value 0.0
|
||||||
|
] , [
|
||||||
|
lv2:symbol "out_2_gain_5" ;
|
||||||
|
pset:value 0.0
|
||||||
|
] , [
|
||||||
|
lv2:symbol "out_2_gain_6" ;
|
||||||
|
pset:value 0.0
|
||||||
|
] , [
|
||||||
|
lv2:symbol "out_2_input_1" ;
|
||||||
|
pset:value 0.0
|
||||||
|
] , [
|
||||||
|
lv2:symbol "out_2_input_2" ;
|
||||||
pset:value 1.0
|
pset:value 1.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "right_unused" ;
|
lv2:symbol "tap_1_delay" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t1_1_gain" ;
|
lv2:symbol "tap_1_gain" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t1_2_gain" ;
|
lv2:symbol "tap_1_gain_1" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t1_3_gain" ;
|
lv2:symbol "tap_1_gain_2" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t1_4_gain" ;
|
lv2:symbol "tap_1_gain_3" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t1_5_gain" ;
|
lv2:symbol "tap_1_gain_4" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t1_6_gain" ;
|
lv2:symbol "tap_1_gain_5" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t1_delay" ;
|
lv2:symbol "tap_1_gain_6" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t1_gain" ;
|
lv2:symbol "tap_1_input_1" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t1_l_gain" ;
|
lv2:symbol "tap_1_input_2" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t1_r_gain" ;
|
lv2:symbol "tap_2_delay" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t2_1_gain" ;
|
lv2:symbol "tap_2_gain" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t2_2_gain" ;
|
lv2:symbol "tap_2_gain_1" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t2_3_gain" ;
|
lv2:symbol "tap_2_gain_2" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t2_4_gain" ;
|
lv2:symbol "tap_2_gain_3" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t2_5_gain" ;
|
lv2:symbol "tap_2_gain_4" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t2_6_gain" ;
|
lv2:symbol "tap_2_gain_5" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t2_delay" ;
|
lv2:symbol "tap_2_gain_6" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t2_gain" ;
|
lv2:symbol "tap_2_input_1" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t2_l_gain" ;
|
lv2:symbol "tap_2_input_2" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t2_r_gain" ;
|
lv2:symbol "tap_3_delay" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t3_1_gain" ;
|
lv2:symbol "tap_3_gain" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t3_2_gain" ;
|
lv2:symbol "tap_3_gain_1" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t3_3_gain" ;
|
lv2:symbol "tap_3_gain_2" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t3_4_gain" ;
|
lv2:symbol "tap_3_gain_3" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t3_5_gain" ;
|
lv2:symbol "tap_3_gain_4" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t3_6_gain" ;
|
lv2:symbol "tap_3_gain_5" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t3_delay" ;
|
lv2:symbol "tap_3_gain_6" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t3_gain" ;
|
lv2:symbol "tap_3_input_1" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t3_l_gain" ;
|
lv2:symbol "tap_3_input_2" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t3_r_gain" ;
|
lv2:symbol "tap_4_delay" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t4_2_gain" ;
|
lv2:symbol "tap_4_gain" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t4_3_gain" ;
|
lv2:symbol "tap_4_gain_1" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t4_4_gain" ;
|
lv2:symbol "tap_4_gain_2" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t4_4_gain" ;
|
lv2:symbol "tap_4_gain_3" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t4_5_gain" ;
|
lv2:symbol "tap_4_gain_4" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t4_6_gain" ;
|
lv2:symbol "tap_4_gain_5" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t4_delay" ;
|
lv2:symbol "tap_4_gain_6" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t4_gain" ;
|
lv2:symbol "tap_4_input_1" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t4_l_gain" ;
|
lv2:symbol "tap_4_input_2" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t4_r_gain" ;
|
lv2:symbol "tap_5_delay" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t5_2_gain" ;
|
lv2:symbol "tap_5_gain" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t5_3_gain" ;
|
lv2:symbol "tap_5_gain_1" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t5_4_gain" ;
|
lv2:symbol "tap_5_gain_2" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t5_5_gain" ;
|
lv2:symbol "tap_5_gain_3" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t5_5_gain" ;
|
lv2:symbol "tap_5_gain_4" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t5_6_gain" ;
|
lv2:symbol "tap_5_gain_5" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t5_delay" ;
|
lv2:symbol "tap_5_gain_6" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t5_gain" ;
|
lv2:symbol "tap_5_input_1" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t5_l_gain" ;
|
lv2:symbol "tap_5_input_2" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t5_r_gain" ;
|
lv2:symbol "tap_6_delay" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t6_2_gain" ;
|
lv2:symbol "tap_6_gain" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t6_3_gain" ;
|
lv2:symbol "tap_6_gain_1" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t6_4_gain" ;
|
lv2:symbol "tap_6_gain_2" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t6_5_gain" ;
|
lv2:symbol "tap_6_gain_3" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t6_6_gain" ;
|
lv2:symbol "tap_6_gain_4" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t6_6_gain" ;
|
lv2:symbol "tap_6_gain_5" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t6_delay" ;
|
lv2:symbol "tap_6_gain_6" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t6_gain" ;
|
lv2:symbol "tap_6_input_1" ;
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] , [
|
] , [
|
||||||
lv2:symbol "t6_l_gain" ;
|
lv2:symbol "tap_6_input_2" ;
|
||||||
pset:value 0.0
|
|
||||||
] , [
|
|
||||||
lv2:symbol "t6_r_gain" ;
|
|
||||||
pset:value 0.0
|
pset:value 0.0
|
||||||
] .
|
] .
|
||||||
|
|
126
ptap/ptap.cpp
126
ptap/ptap.cpp
|
@ -4,34 +4,27 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <lv2.h>
|
#include <lv2.h>
|
||||||
|
#include "ptap.h"
|
||||||
|
|
||||||
#define CHANNELS 2
|
|
||||||
#define TAPS 6
|
|
||||||
#define BUFFER_SECONDS 10
|
#define BUFFER_SECONDS 10
|
||||||
|
|
||||||
struct Tap {
|
|
||||||
float *t_gain[TAPS + CHANNELS];
|
|
||||||
float *gain;
|
|
||||||
float *delay;
|
|
||||||
};
|
|
||||||
|
|
||||||
static const int CONTROLS_PER_TAP = sizeof (Tap) / sizeof (float *);
|
|
||||||
|
|
||||||
struct PTap
|
struct PTap
|
||||||
{
|
{
|
||||||
double sample_rate;
|
double sample_rate;
|
||||||
size_t buffer_max;
|
size_t buffer_max;
|
||||||
|
|
||||||
Tap tap[TAPS + CHANNELS];
|
/* Ports */
|
||||||
|
struct {
|
||||||
|
float *in[NUM_CHANNELS];
|
||||||
|
float *out[NUM_CHANNELS];
|
||||||
|
float *matrix[NUM_GAINS][NUM_GAINS];
|
||||||
|
float *gain[NUM_GAINS];
|
||||||
|
float *delay[NUM_TAPS];
|
||||||
|
} ports;
|
||||||
|
|
||||||
float *buffers[TAPS]; ///< Tap audio buffers
|
float *buffers[NUM_TAPS]; ///< Tap audio buffers
|
||||||
const float *buffers_end[TAPS]; ///< Audio buffer end points
|
const float *buffers_end[NUM_TAPS]; ///< Audio buffer end points
|
||||||
float *wp[TAPS]; ///< Write pointers
|
float *wp[NUM_TAPS]; ///< Write pointers
|
||||||
|
|
||||||
float *in_l;
|
|
||||||
float *in_r;
|
|
||||||
float *out_l;
|
|
||||||
float *out_r;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static LV2_Handle ptap_instantiate(
|
static LV2_Handle ptap_instantiate(
|
||||||
|
@ -45,7 +38,7 @@ static LV2_Handle ptap_instantiate(
|
||||||
ptap->sample_rate = sample_rate;
|
ptap->sample_rate = sample_rate;
|
||||||
ptap->buffer_max = ptap->sample_rate * BUFFER_SECONDS + 1;
|
ptap->buffer_max = ptap->sample_rate * BUFFER_SECONDS + 1;
|
||||||
|
|
||||||
for (int i = 0; i < TAPS; i++) {
|
for (int i = 0; i < NUM_TAPS; i++) {
|
||||||
ptap->buffers[i] = new float[ptap->buffer_max]();
|
ptap->buffers[i] = new float[ptap->buffer_max]();
|
||||||
|
|
||||||
if (ptap->buffers[i] == NULL) {
|
if (ptap->buffers[i] == NULL) {
|
||||||
|
@ -68,54 +61,53 @@ static LV2_Handle ptap_instantiate(
|
||||||
static void ptap_connect_port(LV2_Handle lv2instance, uint32_t port, void *data)
|
static void ptap_connect_port(LV2_Handle lv2instance, uint32_t port, void *data)
|
||||||
{
|
{
|
||||||
PTap *ptap = (PTap *)lv2instance;
|
PTap *ptap = (PTap *)lv2instance;
|
||||||
Tap *tap;
|
|
||||||
float *fdata = (float *)data;
|
float *fdata = (float *)data;
|
||||||
|
|
||||||
/* Audio ports */
|
/* Audio ports */
|
||||||
if (port < 4) {
|
if (port >= TAP_INS && port < TAP_OUTS) {
|
||||||
switch (port) {
|
port -= TAP_INS;
|
||||||
case 0: ptap->in_l = fdata; break;
|
ptap->ports.in[port] = fdata;
|
||||||
case 1: ptap->in_r = fdata; break;
|
|
||||||
case 2: ptap->out_l = fdata; break;
|
|
||||||
case 3: ptap->out_r = fdata; break;
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
port -= 4;
|
if (port >= TAP_OUTS && port < TAP_MATRIX) {
|
||||||
|
port -= TAP_OUTS;
|
||||||
int tap_index = port / CONTROLS_PER_TAP;
|
ptap->ports.out[port] = fdata;
|
||||||
|
|
||||||
if (tap_index < TAPS + CHANNELS) {
|
|
||||||
tap = &ptap->tap[tap_index];
|
|
||||||
} else {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tap_port = port % CONTROLS_PER_TAP;
|
if (port >= TAP_MATRIX && port < TAP_GAINS) {
|
||||||
|
port -= TAP_MATRIX;
|
||||||
if (tap_port < TAPS + CHANNELS) {
|
ptap->ports.matrix[port / NUM_GAINS][port % NUM_GAINS] = fdata;
|
||||||
tap->t_gain[tap_port] = fdata;
|
|
||||||
} else if (tap_port - TAPS == 2) {
|
|
||||||
tap->gain = fdata;
|
|
||||||
} else if (tap_port - TAPS == 3) {
|
|
||||||
tap->delay = fdata;
|
|
||||||
} else {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (port >= TAP_GAINS && port < TAP_DELAYS) {
|
||||||
|
port -= TAP_GAINS;
|
||||||
|
ptap->ports.gain[port] = fdata;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (port >= TAP_DELAYS && port < TAP_END) {
|
||||||
|
port -= TAP_DELAYS;
|
||||||
|
ptap->ports.delay[port] = fdata;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, "Unknown port index %u\n", port);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ptap_run(LV2_Handle lv2instance, uint32_t sample_count)
|
static void ptap_run(LV2_Handle lv2instance, uint32_t sample_count)
|
||||||
{
|
{
|
||||||
PTap *ptap = (PTap *)lv2instance;
|
PTap *ptap = (PTap *)lv2instance;
|
||||||
|
|
||||||
const float *readp[TAPS + CHANNELS];
|
const float *readp[NUM_GAINS];
|
||||||
float gain[TAPS + CHANNELS];
|
float gain[NUM_GAINS];
|
||||||
bool check_overflow = false;
|
bool check_overflow = false;
|
||||||
|
|
||||||
/* Position read pointers behind write pointers */
|
/* Position read pointers behind write pointers */
|
||||||
for (int i = 0; i < TAPS; i++) {
|
for (int i = 0; i < NUM_TAPS; i++) {
|
||||||
int delay = *ptap->tap[i].delay * ptap->sample_rate;
|
int delay = *ptap->ports.delay[i] * ptap->sample_rate;
|
||||||
/* Zero delay results in processing order dependencies. Tapiir doesn't permit it either... */
|
/* Zero delay results in processing order dependencies. Tapiir doesn't permit it either... */
|
||||||
if (delay < 1) delay = 1;
|
if (delay < 1) delay = 1;
|
||||||
readp[i] = ptap->wp[i] - delay;
|
readp[i] = ptap->wp[i] - delay;
|
||||||
|
@ -124,41 +116,37 @@ static void ptap_run(LV2_Handle lv2instance, uint32_t sample_count)
|
||||||
}
|
}
|
||||||
if (ptap->wp[i] + sample_count >= ptap->buffers_end[i]) check_overflow = true;
|
if (ptap->wp[i] + sample_count >= ptap->buffers_end[i]) check_overflow = true;
|
||||||
if (readp[i] + sample_count >= ptap->buffers_end[i]) check_overflow = true;
|
if (readp[i] + sample_count >= ptap->buffers_end[i]) check_overflow = true;
|
||||||
gain[i] = *ptap->tap[i].gain;
|
gain[i] = *ptap->ports.gain[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
float *out_l = ptap->out_l;
|
float *out[NUM_CHANNELS];
|
||||||
float *out_r = ptap->out_r;
|
for (int i = 0; i < NUM_CHANNELS; i++) {
|
||||||
|
out[i] = ptap->ports.out[i];
|
||||||
readp[TAPS ] = ptap->in_l;
|
readp[NUM_TAPS + i] = ptap->ports.in[i];
|
||||||
readp[TAPS + 1] = ptap->in_r;
|
gain[NUM_TAPS + i] = *ptap->ports.gain[NUM_TAPS + i];
|
||||||
gain[TAPS ] = *ptap->tap[TAPS ].gain;
|
}
|
||||||
gain[TAPS + 1] = *ptap->tap[TAPS + 1].gain;
|
|
||||||
|
|
||||||
while (sample_count--) {
|
while (sample_count--) {
|
||||||
float rp[TAPS + CHANNELS];
|
float rp[NUM_GAINS];
|
||||||
float wp[TAPS + CHANNELS];
|
float wp[NUM_GAINS];
|
||||||
|
|
||||||
/* Read input to local buffers */
|
/* Read input to local buffers */
|
||||||
for (int i = 0; i < TAPS + CHANNELS; i++) rp[i] = *readp[i]++;
|
for (int i = 0; i < NUM_GAINS; i++) rp[i] = *readp[i]++;
|
||||||
|
|
||||||
/* Process delays */
|
/* Process delays */
|
||||||
for (int i = 0; i < TAPS + CHANNELS; i++) {
|
for (int i = 0; i < NUM_GAINS; i++) {
|
||||||
const Tap *tap = &ptap->tap[i];
|
|
||||||
|
|
||||||
float sample = 0;
|
float sample = 0;
|
||||||
for (int j = 0; j < TAPS + CHANNELS; j++) sample += rp[j] * *tap->t_gain[j];
|
for (int j = 0; j < NUM_GAINS; j++) sample += rp[j] * *ptap->ports.matrix[i][j];
|
||||||
wp[i] = sample * gain[i];
|
wp[i] = sample * gain[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Write outputs */
|
/* Write outputs */
|
||||||
for (int i = 0; i < TAPS; i++) *ptap->wp[i]++ = wp[i];
|
for (int i = 0; i < NUM_TAPS; i++) *ptap->wp[i]++ = wp[i];
|
||||||
*out_l++ = wp[TAPS];
|
for (int i = 0; i < NUM_CHANNELS; i++) *out[i]++ = wp[NUM_TAPS + i];
|
||||||
*out_r++ = wp[TAPS + 1];
|
|
||||||
|
|
||||||
/* Check read/write pointers */
|
/* Check read/write pointers */
|
||||||
if (check_overflow) {
|
if (check_overflow) {
|
||||||
for (int i = 0; i < TAPS; i++) {
|
for (int i = 0; i < NUM_TAPS; i++) {
|
||||||
if (ptap->wp[i] >= ptap->buffers_end[i]) ptap->wp[i] = ptap->buffers[i];
|
if (ptap->wp[i] >= ptap->buffers_end[i]) ptap->wp[i] = ptap->buffers[i];
|
||||||
if (readp[i] >= ptap->buffers_end[i]) readp[i] = ptap->buffers[i];
|
if (readp[i] >= ptap->buffers_end[i]) readp[i] = ptap->buffers[i];
|
||||||
}
|
}
|
||||||
|
@ -170,7 +158,7 @@ static void ptap_cleanup(LV2_Handle lv2instance)
|
||||||
{
|
{
|
||||||
PTap *ptap = (PTap *)lv2instance;
|
PTap *ptap = (PTap *)lv2instance;
|
||||||
|
|
||||||
for (int i = 0; i < TAPS; i++) {
|
for (int i = 0; i < NUM_TAPS; i++) {
|
||||||
delete ptap->buffers[i];
|
delete ptap->buffers[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,7 +167,7 @@ static void ptap_cleanup(LV2_Handle lv2instance)
|
||||||
|
|
||||||
static const LV2_Descriptor s_lv2descriptor =
|
static const LV2_Descriptor s_lv2descriptor =
|
||||||
{
|
{
|
||||||
"urn:fuzzle:ptap",
|
PTAP_URI,
|
||||||
&ptap_instantiate,
|
&ptap_instantiate,
|
||||||
&ptap_connect_port,
|
&ptap_connect_port,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef PTAP_H
|
||||||
|
#define PTAP_H
|
||||||
|
|
||||||
|
#define PTAP_URI "urn:fuzzle:ptap"
|
||||||
|
|
||||||
|
#define NUM_TAPS 6
|
||||||
|
#define NUM_CHANNELS 2
|
||||||
|
|
||||||
|
#define NUM_GAINS (NUM_TAPS + NUM_CHANNELS)
|
||||||
|
|
||||||
|
enum {
|
||||||
|
TAP_INS,
|
||||||
|
TAP_OUTS = TAP_INS + NUM_CHANNELS,
|
||||||
|
TAP_MATRIX = TAP_OUTS + NUM_CHANNELS,
|
||||||
|
TAP_GAINS = TAP_MATRIX + NUM_GAINS * NUM_GAINS,
|
||||||
|
TAP_DELAYS = TAP_GAINS + NUM_GAINS,
|
||||||
|
TAP_END = TAP_DELAYS + NUM_TAPS,
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* PTAP_H */
|
|
@ -0,0 +1,129 @@
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
#include <lv2.h>
|
||||||
|
#include <lv2/lv2plug.in/ns/extensions/ui/ui.h>
|
||||||
|
#include "ptap.h"
|
||||||
|
|
||||||
|
static bool _last;
|
||||||
|
|
||||||
|
static void addport(FILE *fp, const char *type, const char *type2, const char *symbol, const char *name, int index, const char *additional = "")
|
||||||
|
{
|
||||||
|
fprintf(fp,
|
||||||
|
" [\n"
|
||||||
|
" a lv2:%s , lv2:%s ;\n"
|
||||||
|
" lv2:index %d ;\n"
|
||||||
|
" lv2:symbol \"%s\" ;\n"
|
||||||
|
" lv2:name \"%s\" ;\n"
|
||||||
|
"%s"
|
||||||
|
" ]%c\n",
|
||||||
|
type, type2, index, symbol, name, additional,_last ? '.' : ',');
|
||||||
|
}
|
||||||
|
|
||||||
|
static void addttl(const char *file)
|
||||||
|
{
|
||||||
|
FILE *fp = fopen(file, "w");
|
||||||
|
char symbol[128];
|
||||||
|
char name[128];
|
||||||
|
|
||||||
|
fputs( "@prefix lv2: <" LV2_CORE_URI "#> .\n"
|
||||||
|
"@prefix ui: <" LV2_UI_URI "#> .\n"
|
||||||
|
"@prefix foaf: <http://xmlns.com/foaf/0.1/> .\n"
|
||||||
|
"@prefix doap: <http://usefulinc.com/ns/doap#> .\n"
|
||||||
|
"\n"
|
||||||
|
"<" PTAP_URI ">\n"
|
||||||
|
" a lv2:Plugin , lv2:DelayPlugin ;\n"
|
||||||
|
" lv2:binary <ptap.so> ;\n"
|
||||||
|
" doap:maintainer [\n"
|
||||||
|
" foaf:name \"Peter Nelson\" ;\n"
|
||||||
|
" foaf:homepage <http://fuzzle.org/~petern/ptap/> ;\n"
|
||||||
|
" foaf:mbox <mailto:peter@fuzzle.org> ;\n"
|
||||||
|
" ];\n"
|
||||||
|
" doap:name \"PTap\" ;\n"
|
||||||
|
" doap:license <http://usefulinc.com/doap/licenses/gpl> ;\n"
|
||||||
|
" ui:ui <" PTAP_URI "#X11UI> ;\n"
|
||||||
|
" lv2:port\n"
|
||||||
|
, fp);
|
||||||
|
|
||||||
|
for (int i = 0; i < NUM_CHANNELS; i++) {
|
||||||
|
sprintf(symbol, "in_%d", i + 1);
|
||||||
|
sprintf(name, "Audio In %d", i + 1);
|
||||||
|
addport(fp, "InputPort", "AudioPort", symbol, name, TAP_INS + i);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < NUM_CHANNELS; i++) {
|
||||||
|
sprintf(symbol, "out_%d", i + 1);
|
||||||
|
sprintf(name, "Audio Out %d", i + 1);
|
||||||
|
addport(fp, "OutputPort", "AudioPort", symbol, name, TAP_OUTS + i);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < NUM_TAPS; i++) {
|
||||||
|
for (int j = 0; j < NUM_TAPS; j++) {
|
||||||
|
sprintf(symbol, "tap_%d_gain_%d", i + 1, j + 1);
|
||||||
|
sprintf(name, "Tap %d - Gain %d", i + 1, j + 1);
|
||||||
|
addport(fp, "InputPort", "ControlPort", symbol, name, TAP_MATRIX + i * NUM_GAINS + j,
|
||||||
|
" lv2:minimum -1.0 ;\n"
|
||||||
|
" lv2:default 0.0 ;\n"
|
||||||
|
" lv2:maximum 1.0 ;\n");
|
||||||
|
}
|
||||||
|
for (int j = 0; j < NUM_CHANNELS; j++) {
|
||||||
|
sprintf(symbol, "tap_%d_input_%d", i + 1, j + 1);
|
||||||
|
sprintf(name, "Tap %d - Input %d", i + 1, j + 1);
|
||||||
|
addport(fp, "InputPort", "ControlPort", symbol, name, TAP_MATRIX + i * NUM_GAINS + NUM_TAPS + j,
|
||||||
|
" lv2:minimum -1.0 ;\n"
|
||||||
|
" lv2:default 0.0 ;\n"
|
||||||
|
" lv2:maximum 1.0 ;\n");
|
||||||
|
}
|
||||||
|
sprintf(symbol, "tap_%d_gain", i + 1);
|
||||||
|
sprintf(name, "Tap %d - Gain", i + 1);
|
||||||
|
addport(fp, "InputPort", "ControlPort", symbol, name, TAP_GAINS + i,
|
||||||
|
" lv2:minimum -1.0 ;\n"
|
||||||
|
" lv2:default 0.0 ;\n"
|
||||||
|
" lv2:maximum 1.0 ;\n");
|
||||||
|
|
||||||
|
sprintf(symbol, "tap_%d_delay", i + 1);
|
||||||
|
sprintf(name, "Tap %d - Delay", i + 1);
|
||||||
|
addport(fp, "InputPort", "ControlPort", symbol, name, TAP_DELAYS + i,
|
||||||
|
" lv2:minimum 0.0 ;\n"
|
||||||
|
" lv2:default 0.0 ;\n"
|
||||||
|
" lv2:maximum 10.0 ;\n");
|
||||||
|
}
|
||||||
|
for (int i = 0; i < NUM_CHANNELS; i++) {
|
||||||
|
for (int j = 0; j < NUM_TAPS; j++) {
|
||||||
|
sprintf(symbol, "out_%d_gain_%d", i + 1, j + 1);
|
||||||
|
sprintf(name, "Output %d - Gain %d", i + 1, j + 1);
|
||||||
|
addport(fp, "InputPort", "ControlPort", symbol, name, TAP_MATRIX + (i + NUM_TAPS) * NUM_GAINS + j,
|
||||||
|
" lv2:minimum -1.0 ;\n"
|
||||||
|
" lv2:default 0.0 ;\n"
|
||||||
|
" lv2:maximum 1.0 ;\n");
|
||||||
|
}
|
||||||
|
for (int j = 0; j < NUM_CHANNELS; j++) {
|
||||||
|
sprintf(symbol, "out_%d_input_%d", i + 1, j + 1);
|
||||||
|
sprintf(name, "Output %d - Input %d", i + 1, j + 1);
|
||||||
|
addport(fp, "InputPort", "ControlPort", symbol, name, TAP_MATRIX + (i + NUM_TAPS) * NUM_GAINS + NUM_TAPS + j,
|
||||||
|
i == j ?
|
||||||
|
" lv2:minimum -1.0 ;\n"
|
||||||
|
" lv2:default 1.0 ;\n"
|
||||||
|
" lv2:maximum 1.0 ;\n"
|
||||||
|
:
|
||||||
|
" lv2:minimum -1.0 ;\n"
|
||||||
|
" lv2:default 0.0 ;\n"
|
||||||
|
" lv2:maximum 1.0 ;\n");
|
||||||
|
}
|
||||||
|
if (i == NUM_CHANNELS - 1) _last = true;
|
||||||
|
sprintf(symbol, "out_%d_gain", i + 1);
|
||||||
|
sprintf(name, "Output %d - Gain", i + 1);
|
||||||
|
addport(fp, "InputPort", "ControlPort", symbol, name, TAP_GAINS + NUM_TAPS + i,
|
||||||
|
" lv2:minimum -1.0 ;\n"
|
||||||
|
" lv2:default 1.0 ;\n"
|
||||||
|
" lv2:maximum 1.0 ;\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
if (!strcmp(argv[1], "rdf")) {
|
||||||
|
addttl(argv[2]);
|
||||||
|
} else if (!strcmp(argv[1], "h")) {
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,8 +11,7 @@
|
||||||
#include <pugl/pugl.h>
|
#include <pugl/pugl.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include "../pui/pui.h"
|
#include "../pui/pui.h"
|
||||||
|
#include "ptap.h"
|
||||||
#define TAPS 6
|
|
||||||
|
|
||||||
/*struct PTapUI : PTextures {
|
/*struct PTapUI : PTextures {
|
||||||
PuglView *view;
|
PuglView *view;
|
||||||
|
@ -63,8 +62,11 @@ void PTapUI::InitWidgets()
|
||||||
|
|
||||||
int padding = 4;
|
int padding = 4;
|
||||||
|
|
||||||
int c_w = (widget->w - padding * 3) * 0.5f;
|
int cols = 2;
|
||||||
int c_h = (widget->h - 25 - padding * 5) * 0.25f;
|
int rows = (NUM_TAPS + NUM_CHANNELS + cols - 1) / cols;
|
||||||
|
|
||||||
|
int c_w = (widget->w - padding * cols - padding) / cols;
|
||||||
|
int c_h = (widget->h - 25 - padding * rows - padding) / rows;
|
||||||
|
|
||||||
Container *t = new Container();
|
Container *t = new Container();
|
||||||
t->colour = Colour(0, 0, 0, .5f);
|
t->colour = Colour(0, 0, 0, .5f);
|
||||||
|
@ -77,9 +79,9 @@ void PTapUI::InitWidgets()
|
||||||
int slide_w = 25;
|
int slide_w = 25;
|
||||||
// int slide_h = c_h - 25;
|
// int slide_h = c_h - 25;
|
||||||
|
|
||||||
for (int i = 0; i < TAPS + 2; i++) {
|
for (int i = 0; i < NUM_TAPS + NUM_CHANNELS; i++) {
|
||||||
Container *c = new VBox();
|
Container *c = new VBox();
|
||||||
if (i < TAPS) c->frame = Colour(0, 0, 0, .15f);
|
if (i < NUM_TAPS) c->frame = Colour(0, 0, 0, .15f);
|
||||||
c->x = (i & 1) * (c_w + padding) + padding;
|
c->x = (i & 1) * (c_w + padding) + padding;
|
||||||
c->y = (i >> 1) * (c_h + padding) + padding + 25;
|
c->y = (i >> 1) * (c_h + padding) + padding + 25;
|
||||||
c->w = c_w;
|
c->w = c_w;
|
||||||
|
@ -96,22 +98,22 @@ void PTapUI::InitWidgets()
|
||||||
c->Pack(c_strip);
|
c->Pack(c_strip);
|
||||||
|
|
||||||
Container *c_taps = new HBox();
|
Container *c_taps = new HBox();
|
||||||
if (i >= TAPS) c_taps->colour = Colour(1, 1, 1, 0.15f);
|
if (i >= NUM_TAPS) c_taps->colour = Colour(1, 1, 1, 0.15f);
|
||||||
c_taps->w = slide_w * TAPS;
|
c_taps->w = slide_w * NUM_TAPS;
|
||||||
c_strip->Pack(c_taps);
|
c_strip->Pack(c_taps);
|
||||||
|
|
||||||
Container *c_ins = new HBox();
|
Container *c_ins = new HBox();
|
||||||
if (i >= TAPS) c_ins->colour = Colour(1, 1, 1, 0.15f);
|
if (i >= NUM_TAPS) c_ins->colour = Colour(1, 1, 1, 0.15f);
|
||||||
c_ins->w = slide_w * 2;
|
c_ins->w = slide_w * NUM_CHANNELS;
|
||||||
c_strip->Pack(c_ins);
|
c_strip->Pack(c_ins);
|
||||||
|
|
||||||
if (i < TAPS) {
|
if (i < NUM_TAPS) {
|
||||||
snprintf(tmp, sizeof tmp, "Tap %d", i + 1);
|
snprintf(tmp, sizeof tmp, "Tap %d", i + 1);
|
||||||
} else {
|
} else {
|
||||||
strncpy(tmp, i == TAPS ? "Left Out" : "Right Out", sizeof tmp);
|
strncpy(tmp, i == NUM_TAPS ? "Left Out" : "Right Out", sizeof tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int j = 0; j < TAPS; j++) {
|
for (int j = 0; j < NUM_TAPS; j++) {
|
||||||
Slider *slider = new VSlider();
|
Slider *slider = new VSlider();
|
||||||
strncpy(slider->group, tmp, sizeof slider->group);
|
strncpy(slider->group, tmp, sizeof slider->group);
|
||||||
snprintf(slider->label, sizeof slider->label, "%d", j + 1);
|
snprintf(slider->label, sizeof slider->label, "%d", j + 1);
|
||||||
|
@ -124,11 +126,11 @@ void PTapUI::InitWidgets()
|
||||||
slider->w = slide_w;
|
slider->w = slide_w;
|
||||||
slider->min = -1.f;
|
slider->min = -1.f;
|
||||||
slider->max = 1.f;
|
slider->max = 1.f;
|
||||||
slider->port = (i * 10) + 4 + j;
|
slider->port = TAP_MATRIX + i * NUM_GAINS + j;
|
||||||
c_taps->Pack(slider);
|
c_taps->Pack(slider);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int j = 0; j < 2; j++) {
|
for (int j = 0; j < NUM_CHANNELS; j++) {
|
||||||
Slider *slider = new VSlider();
|
Slider *slider = new VSlider();
|
||||||
strncpy(slider->group, tmp, sizeof slider->group);
|
strncpy(slider->group, tmp, sizeof slider->group);
|
||||||
strncpy(slider->label, j == 0 ? "Left" : "Right", sizeof slider->label);
|
strncpy(slider->label, j == 0 ? "Left" : "Right", sizeof slider->label);
|
||||||
|
@ -136,29 +138,29 @@ void PTapUI::InitWidgets()
|
||||||
slider->w = slide_w;
|
slider->w = slide_w;
|
||||||
slider->min = -1.f;
|
slider->min = -1.f;
|
||||||
slider->max = 1.f;
|
slider->max = 1.f;
|
||||||
slider->port = (i * 10) + 4 + TAPS + j;
|
slider->port = TAP_MATRIX + i * NUM_GAINS + NUM_TAPS + j;
|
||||||
c_ins->Pack(slider);
|
c_ins->Pack(slider);
|
||||||
}
|
}
|
||||||
|
|
||||||
Slider *gain = new VSlider();
|
Slider *gain = new VSlider();
|
||||||
strncpy(gain->group, tmp, sizeof gain->group);
|
strncpy(gain->group, tmp, sizeof gain->group);
|
||||||
strncpy(gain->label, "Gain", sizeof gain->label);
|
strncpy(gain->label, "Gain", sizeof gain->label);
|
||||||
gain->big = i >= TAPS;
|
gain->big = i >= NUM_TAPS;
|
||||||
gain->colour = Colour(1, .2f, .2f, 1);
|
gain->colour = Colour(1, .2f, .2f, 1);
|
||||||
gain->w = slide_w;
|
gain->w = slide_w;
|
||||||
gain->min = -1.f;
|
gain->min = -1.f;
|
||||||
gain->max = 1.f;
|
gain->max = 1.f;
|
||||||
gain->port = (i * 10) + 4 + TAPS + 2;
|
gain->port = TAP_GAINS + i;
|
||||||
c_strip->Pack(gain);
|
c_strip->Pack(gain);
|
||||||
|
|
||||||
if (i < TAPS) {
|
if (i < NUM_TAPS) {
|
||||||
Knob *delay = new Knob();
|
Knob *delay = new Knob();
|
||||||
strncpy(delay->group, tmp, sizeof delay->group);
|
strncpy(delay->group, tmp, sizeof delay->group);
|
||||||
strncpy(delay->label, "Delay", sizeof delay->label);
|
strncpy(delay->label, "Delay", sizeof delay->label);
|
||||||
delay->w = -1;
|
delay->w = -1;
|
||||||
delay->min = 0.f;
|
delay->min = 0.f;
|
||||||
delay->max = 10.f;
|
delay->max = 10.f;
|
||||||
delay->port = (i * 10) + 4 + TAPS + 3;
|
delay->port = TAP_DELAYS + i;
|
||||||
c_strip->Pack(delay);
|
c_strip->Pack(delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,7 +223,7 @@ static LV2UI_Handle ptapui_instantiate(
|
||||||
PTapUI *pui = new PTapUI();
|
PTapUI *pui = new PTapUI();
|
||||||
pui->write = write_function;
|
pui->write = write_function;
|
||||||
pui->controller = controller;
|
pui->controller = controller;
|
||||||
pui->width = 700;
|
pui->width = 250 + 50 * (NUM_TAPS + NUM_CHANNELS + 1);
|
||||||
pui->height = 660;
|
pui->height = 660;
|
||||||
pui->exit = false;
|
pui->exit = false;
|
||||||
|
|
||||||
|
@ -273,7 +275,7 @@ static const void *ptapui_extension_data(const char *uri)
|
||||||
|
|
||||||
static const LV2UI_Descriptor s_lv2uidescriptor =
|
static const LV2UI_Descriptor s_lv2uidescriptor =
|
||||||
{
|
{
|
||||||
"urn:fuzzle:ptap#X11UI",
|
PTAP_URI "#X11UI",
|
||||||
&ptapui_instantiate,
|
&ptapui_instantiate,
|
||||||
&ptapui_cleanup,
|
&ptapui_cleanup,
|
||||||
&ptapui_port_event,
|
&ptapui_port_event,
|
||||||
|
|
Loading…
Reference in New Issue