diff --git a/src/event.hxx b/src/event.hxx index a3f7c71..e7c2365 100644 --- a/src/event.hxx +++ b/src/event.hxx @@ -15,10 +15,19 @@ namespace Event { + enum SEND_TYPE + { + SEND_REV = 0, + SEND_SIDE, + SEND_POST, + }; + enum { MASTER_VOL, RECORD, + + TRACK_SEND, TRACK_SIGNAL_LEVEL, TRACK_VOLUME, @@ -80,6 +89,20 @@ class EventTrackVol : public EventBase } }; +class EventTrackSend : public EventBase +{ + public: + int type() { return int(TRACK_SEND); } + uint32_t size() { return sizeof(EventTrackSend); } + + int track; + SEND_TYPE send; + float value; + + EventTrackSend(){}; + EventTrackSend(int t, SEND_TYPE s, int v): track(t), send(s), value(v){} +}; + class EventLooperState : public EventBase { public: diff --git a/src/eventhandlerdsp.cxx b/src/eventhandlerdsp.cxx index 5e487c4..a81782f 100644 --- a/src/eventhandlerdsp.cxx +++ b/src/eventhandlerdsp.cxx @@ -75,6 +75,22 @@ void handleDspEvents() jack_ringbuffer_read( rbToDsp, (char*)&ev, sizeof(EventTimeTempoTap) ); jack->getTimeManager()->tap(); } break; } + + case Event::TRACK_SEND: { + if ( availableRead >= sizeof(EventTrackSend) ) { + EventTrackSend ev; + jack_ringbuffer_read( rbToDsp, (char*)&ev, sizeof(EventTrackSend) ); + if ( ev.send == SEND_REV ) + jack->getTrackOutput(ev.track)->setReverb( ev.value ); + else if ( ev.send == SEND_SIDE ) + jack->getTrackOutput(ev.track)->setSidechain( ev.value ); + else if ( ev.send == SEND_POST ) + jack->getTrackOutput(ev.track)->setPostSidechain( ev.value ); + else + { + // nothing + } + } break; } default: { // just do nothing diff --git a/src/gtrack.cxx b/src/gtrack.cxx index 9a4db95..5ad8a84 100644 --- a/src/gtrack.cxx +++ b/src/gtrack.cxx @@ -6,6 +6,10 @@ extern Gui* gui; extern void luppp_tooltip(std::string s); + +//void gtrack_reverb_cb(Avtk::Dial *w, void *data) + + void gtrack_button_callback(Fl_Widget *w, void *data) { int track = 0; diff --git a/src/gtrack.hxx b/src/gtrack.hxx index d918e20..f19ea41 100644 --- a/src/gtrack.hxx +++ b/src/gtrack.hxx @@ -24,6 +24,7 @@ using namespace std; +static void gtrack_reverb_cb(Fl_Widget *w, void *data); extern void gtrack_button_callback(Fl_Widget *w, void *data); class GTrack : public Fl_Group @@ -45,9 +46,9 @@ class GTrack : public Fl_Group volume(x+65, y +427, 36, 150, "Vol"), - dial2(x+22, y +440 + 0, 30, 30, "S-C"), - dial3(x+22, y +440 + 50, 30, 30, "P-S"), - dial1(x+22, y +440 +100, 30, 30, "Rev"), + side(x+22, y +440 + 0, 30, 30, "S-C"), + post(x+22, y +440 + 50, 30, 30, "P-S"), + rev (x+22, y +440 +100, 30, 30, "Rev"), progress(x+5, y+ 26, 100, 100, "Source UI") { @@ -55,6 +56,8 @@ class GTrack : public Fl_Group clipSel.setID( ID ); + rev.callback( gtrack_reverb_cb, this ); + volume.callback( gtrack_button_callback, 0 ); progress.maximum(1.0f); @@ -95,14 +98,22 @@ class GTrack : public Fl_Group Avtk::Volume volume; - Avtk::Dial dial1; - Avtk::Dial dial2; - Avtk::Dial dial3; + Avtk::Dial side; + Avtk::Dial post; + Avtk::Dial rev; Fl_Progress progress; static int privateID; }; +void gtrack_reverb_cb(Fl_Widget *w, void *data) +{ + GTrack* track = (GTrack*) data; + EventTrackSend e( track->ID, SEND_REV, ((Avtk::Dial*)w)->value() ); + writeToDspRingbuffer( &e ); + //printf("track %i reverb send %f\n", track->ID, ((Avtk::Dial*)w)->value() ); +} + #endif // LUPPP_G_TRACK_H diff --git a/src/jack.hxx b/src/jack.hxx index 2b3e7fe..e9e1043 100644 --- a/src/jack.hxx +++ b/src/jack.hxx @@ -52,6 +52,10 @@ class Jack { return loopers.at(t); } + TrackOutput* getTrackOutput(int t) + { + return trackOutputs.at(t); + } Metronome* getMetronome(){return &metronome;} TimeManager* getTimeManager(){return &timeManager;} diff --git a/src/trackoutput.hxx b/src/trackoutput.hxx index b662fae..ba85a7a 100644 --- a/src/trackoutput.hxx +++ b/src/trackoutput.hxx @@ -25,22 +25,22 @@ class TrackOutput : public AudioProcessor /// set main mix, 0-1 void setMaster(float value) { - + _toMaster = value; } /// set sidechain mix, 0-1 void setSidechain(float value) { - + _toSidechain = value; } /// set post sidechain mix, 0-1 void setPostSidechain(float value) { - + _toPostSidechain = value; } /// set reverb mix, 0-1 void setReverb(float value) { - + _toReverb = value; } /// copies the track output to master buffer, sidechain & post-side buffer