diff --git a/src/event.hxx b/src/event.hxx index 92025a2..4eebfe4 100644 --- a/src/event.hxx +++ b/src/event.hxx @@ -38,6 +38,7 @@ namespace Event enum { MASTER_VOL, + MASTER_INPUT_VOL, MASTER_INPUT_TO, MASTER_INPUT_TO_ACTIVE, MASTER_RETURN, @@ -122,11 +123,16 @@ class EventMasterVol : public EventBase int type() { return int(MASTER_VOL); } uint32_t size() { return sizeof(EventMasterVol); } float vol; - - EventMasterVol(float v) - { - vol = v; - } + EventMasterVol(float v = 0) : vol(v){} +}; + +class EventMasterInputVol : public EventBase +{ + public: + int type() { return int(MASTER_INPUT_VOL); } + uint32_t size() { return sizeof(EventMasterInputVol); } + float vol; + EventMasterInputVol(float v = 0) : vol(v){} }; class EventMasterReturn : public EventBase diff --git a/src/eventhandlerdsp.cxx b/src/eventhandlerdsp.cxx index 581b1c8..8259b9b 100644 --- a/src/eventhandlerdsp.cxx +++ b/src/eventhandlerdsp.cxx @@ -60,6 +60,12 @@ void handleDspEvents() jack_ringbuffer_read( rbToDsp, (char*)&ev, sizeof(EventMasterReturn) ); //jack->getLogic()->trackSend( ev.track, ev.send, ev.value ); } break; } + case Event::MASTER_INPUT_VOL: { + if ( availableRead >= sizeof(EventMasterVol) ) { + EventMasterVol ev(0); + jack_ringbuffer_read( rbToDsp, (char*)&ev, sizeof(EventMasterVol) ); + jack->getLogic()->masterInputVol( ev.vol ); + } break; } case Event::MASTER_INPUT_TO: { if ( availableRead >= sizeof(EventMasterInputTo) ) { EventMasterInputTo ev; diff --git a/src/gmastertrack.cxx b/src/gmastertrack.cxx index 30fdbc5..03e2374 100644 --- a/src/gmastertrack.cxx +++ b/src/gmastertrack.cxx @@ -17,6 +17,14 @@ static void gmastertrack_volume_callback(Fl_Widget *w, void *data) writeToDspRingbuffer( &e ); } +static void gmastertrack_inputVolume_callback(Fl_Widget *w, void *data) +{ + Avtk::Volume* b = (Avtk::Volume*)w; + float v = b->value(); + EventMasterInputVol e( v ); + writeToDspRingbuffer( &e ); +} + static void gmastertrack_sidchainKeyButton_callback(Fl_Widget *w, void *data) { Avtk::LightButton* b = (Avtk::LightButton*)w; @@ -129,6 +137,8 @@ GMasterTrack::GMasterTrack(int x, int y, int w, int h, const char* l ) : inputVolume.value(0.5); inputVolume.setOrientationHorizontal(); + inputVolume.callback( gmastertrack_inputVolume_callback, 0 ); + tapTempo.callback( gmastertrack_button_callback, &ID ); metronomeButton.callback( gmastertrack_button_callback, 0 ); diff --git a/src/jack.cxx b/src/jack.cxx index d237aca..9c87f27 100644 --- a/src/jack.cxx +++ b/src/jack.cxx @@ -347,6 +347,11 @@ void Jack::masterVolume(float vol) masterVol = vol; } +void Jack::inputVolume(float v) +{ + inputVol = v * 2; +} + void Jack::inputTo(INPUT_TO to, float v) { switch ( to ) diff --git a/src/jack.hxx b/src/jack.hxx index 9f0f33b..9c33b8a 100644 --- a/src/jack.hxx +++ b/src/jack.hxx @@ -59,7 +59,8 @@ class Jack /// writes MIDI messages to a MidiObserver's port void midiObserverWriteMIDI( int portIndex, unsigned char* data ); - /// set the master volume + /// set the master i/o volume / sends + void inputVolume( float vol ); void masterVolume( float vol ); void inputTo(INPUT_TO to, float v); void inputToActive(INPUT_TO to, bool a); @@ -89,8 +90,10 @@ class Jack // FX DBMeter* inputMeter; DBMeter* masterMeter; - float masterVol; + float inputVol; + float masterVol; + float inputToMixVol; float inputToSendVol; diff --git a/src/logic.cxx b/src/logic.cxx index 68b4d17..c30ecf9 100644 --- a/src/logic.cxx +++ b/src/logic.cxx @@ -20,6 +20,11 @@ void Logic::metronomeEnable(bool b) jack->getControllerUpdater()->metronomeEnable( b ); } +void Logic::masterInputVol( float v ) +{ + jack->inputVolume( v ); +} + void Logic::masterInputTo( Event::INPUT_TO inputTo, float v) { jack->inputTo( inputTo, v ); diff --git a/src/logic.hxx b/src/logic.hxx index d2f477e..e18f4e8 100644 --- a/src/logic.hxx +++ b/src/logic.hxx @@ -28,6 +28,7 @@ class Logic void metronomeEnable(bool b); + void masterInputVol( float v ); void masterInputTo( Event::INPUT_TO inputTo, float v); void masterInputToActive( Event::INPUT_TO inputTo, bool active);