From afb7863891c7817a5a1e4b9a98a1e09dd7aa2a32 Mon Sep 17 00:00:00 2001 From: Gerald Date: Fri, 25 Nov 2016 16:16:56 +0100 Subject: [PATCH 1/4] Fixed #96 internal buffer overflow --- src/jack.cxx | 9 ++++++--- src/jack.hxx | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/jack.cxx b/src/jack.cxx index 23a010d..b6551d3 100644 --- a/src/jack.cxx +++ b/src/jack.cxx @@ -84,7 +84,7 @@ Jack::Jack( std::string name ) : clientActive(false) { jack = this; - + lastnframes=0; samplerate = jack_get_sample_rate( client ); LUPPP_NOTE("Samplerate %i", samplerate ); @@ -494,7 +494,7 @@ void Jack::processFrames(int nframes) metronome->process( nframes, &buffers ); /// mix input, reverb & post-sidechain in - for(unsigned int i = 0; i < buffers.nframes; i++) + for(unsigned int i = 0; i < nframes; i++) { float input= buffers.audio[Buffers::MASTER_INPUT][i] * inputVol; @@ -574,8 +574,9 @@ void Jack::processFrames(int nframes) // JACK in multiple parts internally in Luppp: used for processing bar() / beat() // if a full JACK nframes has been processed, this is extra work: its not that expensive /// update buffers by nframes - if(nframes Date: Sat, 26 Nov 2016 09:19:07 +0000 Subject: [PATCH 2/4] Fix compiler warning about \0, use \n instead --- src/jack.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jack.cxx b/src/jack.cxx index b6551d3..e3726cf 100644 --- a/src/jack.cxx +++ b/src/jack.cxx @@ -218,7 +218,7 @@ Jack::Jack( std::string name ) : if(gui->enablePerTrackOutput) { char name[50]; - sprintf(name,"track_%d\0",i); + sprintf(name,"track_%d\n",i); trackJackOutputPorts[i]=jack_port_register( client, name, JACK_DEFAULT_AUDIO_TYPE, From 3a6138a0bedf41267ea4ff160ccca2fbcdac23df Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Wed, 16 Nov 2016 23:10:30 +0100 Subject: [PATCH 3/4] removed unused code (fixes #131) [HvH] I modified this commit - a few changes I didn't like, for example removing the src/config.hxx debug variables - I know they are commented, but I use the regularly during development to get extra prints. So this commit removed some of your changes - just a note that you're not wondering where the changes went :) Thanks for the PR! --- src/avtk/avtk_box.h | 49 ------------- src/avtk/avtk_image.h | 11 --- src/avtk/avtk_sidechain_gain.h | 121 +-------------------------------- src/avtk/bindings.cxx | 63 ----------------- src/controller/genericmidi.cxx | 2 +- src/gridlogic.cxx | 20 +----- src/looper.cxx | 2 +- 7 files changed, 4 insertions(+), 264 deletions(-) diff --git a/src/avtk/avtk_box.h b/src/avtk/avtk_box.h index 69bae61..4efe59f 100644 --- a/src/avtk/avtk_box.h +++ b/src/avtk/avtk_box.h @@ -106,55 +106,6 @@ class Box : public Fl_Widget h = H; redraw(); } - - /* - int handle(int event) - { - - switch(event) - { - case FL_PUSH: - if ( Fl::event_state(FL_BUTTON3) && Fl::event_y() < y + 20 ) - { - const char* name = fl_input( "Track name: ", "" ); - if ( name ) - { - free( (char*) label ); - label = strdup( name ); - redraw(); - } - return 1; - } - - redraw(); - return 1; - case FL_DRAG: { - int t = Fl::event_inside(this); - if (t != highlight) { - redraw(); - } - } - return 1; - case FL_RELEASE: - if (highlight) { - highlight = 0; - redraw(); - do_callback(); - } - return 1; - case FL_SHORTCUT: - if ( test_shortcut() ) - { - do_callback(); - return 1; - } - return 0; - default: - return Fl_Widget::handle(event); - } - - } - */ }; } // Avtk diff --git a/src/avtk/avtk_image.h b/src/avtk/avtk_image.h index b6a01a2..c73b398 100644 --- a/src/avtk/avtk_image.h +++ b/src/avtk/avtk_image.h @@ -85,17 +85,6 @@ class Image : public Fl_Widget x = gui->getWindowWidth() - w; } - /* - Fl_Widget::resize(X,Y,W,H); - - - x = X; - y = Y; - w = W; - h = H; - */ - - redraw(); } diff --git a/src/avtk/avtk_sidechain_gain.h b/src/avtk/avtk_sidechain_gain.h index b2b283d..5c11d95 100644 --- a/src/avtk/avtk_sidechain_gain.h +++ b/src/avtk/avtk_sidechain_gain.h @@ -165,55 +165,6 @@ class SidechainGain : public Fl_Slider cairo_line_to( cr, x + w, y + h * 0.25 + h/2 * _release ); cairo_set_source_rgba( cr, 1.0, 0.0, 0.f , 1 ); cairo_stroke( cr ); - /* - float makeupGainPx = makeupGain * h * 0.5; - - float xDist = 0.1 * w; - float yDist = 0.1 * h; - - float xThresh = x + (w * 0.25) + (w*0.5) * threshVal; - float yThresh = y + (h * 0.25) + (h*0.5)*(1-threshVal); - - float startx = xThresh - xDist; - float starty = yThresh + yDist; - - float cp1x = xThresh; - float cp1y = yThresh - makeupGainPx; - - float cp2x = xThresh; - float cp2y = yThresh - makeupGainPx; - - float endx = xThresh + (xDist*1.2); - float endy = yThresh - (yDist*1.2)*(1-ratioVal) - makeupGainPx; - - // normal line (greyed) - cairo_move_to( cr, x , y + h ); - cairo_line_to( cr, x + w, y ); - cairo_set_source_rgba( cr, 66 / 255.f, 66 / 255.f , 66 / 255.f , 0.5 ); - cairo_set_line_width(cr, 1.4); - cairo_stroke( cr ); - - cairo_move_to( cr, x , y + h - makeupGainPx ); - cairo_line_to( cr, startx, starty - makeupGainPx ); - - // draw curve - cairo_curve_to( cr, cp1x, cp1y, cp2x, cp2y, endx, endy ); - - cairo_line_to( cr, x + w, y + (h/4)*ratioVal + (h)*(1-threshVal)*(0.5*ratioVal) - makeupGainPx ); - - cairo_line_to( cr, x + w, y + h ); - cairo_line_to( cr, x , y + h ); - cairo_close_path(cr); - - cairo_set_source_rgba( cr, 0 / 255.f, 153 / 255.f , 255 / 255.f , 0.21 ); - cairo_fill_preserve(cr); - - cairo_set_source_rgba( cr, 0 / 255.f, 153 / 255.f , 255 / 255.f , 1 ); - cairo_set_line_width(cr, 1.5); - cairo_set_line_join( cr, CAIRO_LINE_JOIN_ROUND); - cairo_set_line_cap ( cr, CAIRO_LINE_CAP_ROUND); - cairo_stroke( cr ); - */ // stroke outline cairo_rectangle(cr, x, y, w, h); @@ -251,77 +202,7 @@ class SidechainGain : public Fl_Slider } int handle(int event) - { - /* - switch(event) - { - case FL_PUSH: - highlight = 0; - mouseRightClicked = false; - if ( Fl::event_button() == FL_RIGHT_MOUSE ) - { - active = !active; - redraw(); - mouseRightClicked = true; - do_callback(); - } - return 1; - case FL_DRAG: - { - if ( Fl::event_state(FL_BUTTON1) ) - { - if ( mouseClicked == false ) // catch the "click" event - { - mouseClickedX = Fl::event_x(); - mouseClickedY = Fl::event_y(); - mouseClicked = true; - } - - float deltaX = mouseClickedX - Fl::event_x(); - float deltaY = mouseClickedY - Fl::event_y(); - - float valX = value(); - valX -= deltaX / 100.f; - float valY = makeupGain; - valY += deltaY / 100.f; - - if ( valX > 1.0 ) valX = 1.0; - if ( valX < 0.0 ) valX = 0.0; - - if ( valY > 1.0 ) valY = 1.0; - if ( valY < 0.0 ) valY = 0.0; - - //handle_drag( value + deltaY ); - set_value( valX ); - makeupGain = valY; - - mouseClickedX = Fl::event_x(); - mouseClickedY = Fl::event_y(); - redraw(); - do_callback(); - } - } - return 1; - case FL_RELEASE: - mouseRightClicked = false; - if (highlight) { - highlight = 0; - redraw(); - do_callback(); - } - mouseClicked = false; - return 1; - case FL_SHORTCUT: - if ( test_shortcut() ) - { - do_callback(); - return 1; - } - return 0; - default: - return Fl_Widget::handle(event); - } - */ + { //TODO needed? return 0; } diff --git a/src/avtk/bindings.cxx b/src/avtk/bindings.cxx index ab731e3..3835849 100644 --- a/src/avtk/bindings.cxx +++ b/src/avtk/bindings.cxx @@ -155,67 +155,4 @@ void Bindings::resize(int X, int Y, int W, int H) redraw(); } -/* -int Bindings::handle(int event) -{ - switch(event) - { - case FL_PUSH: - highlight = 0; - redraw(); - return 1; - case FL_DRAG: - { - if ( Fl::event_state(FL_BUTTON1) ) - { - if ( mouseClicked == false ) // catch the "click" event - { - mouseClickedX = Fl::event_x(); - mouseClickedY = Fl::event_y(); - mouseClicked = true; - } - - float delta = (mouseClickedY - Fl::event_y() ) / float(h); - // handle the x / y swap, and the inverting of direction (mouseX / Y relative) - if ( orientationHorizontal ) - delta = ( Fl::event_x() - mouseClickedX ) / float(w); - - float valY = value(); - valY += delta; - - if ( valY > 1.0 ) valY = 1.0; - if ( valY < 0.0 ) valY = 0.0; - - set_value( valY ); - - mouseClickedX = Fl::event_x(); - mouseClickedY = Fl::event_y(); - redraw(); - do_callback(); - } - } - return 1; - case FL_ENTER: - return 1; - case FL_RELEASE: - if (highlight) { - highlight = 0; - redraw(); - do_callback(); - } - mouseClicked = false; - return 1; - case FL_SHORTCUT: - if ( test_shortcut() ) - { - do_callback(); - return 1; - } - return 0; - default: - return Fl_Widget::handle(event); - } -} -*/ - } // namespace Avtk diff --git a/src/controller/genericmidi.cxx b/src/controller/genericmidi.cxx index b8d71f1..e191931 100644 --- a/src/controller/genericmidi.cxx +++ b/src/controller/genericmidi.cxx @@ -601,7 +601,7 @@ void GenericMIDI::setSceneState(int t, int scene, GridLogic::State s) void GenericMIDI::reset() -{ +{//TODO needed? /* unsigned char data[3]; // setup "volume" style rotary display diff --git a/src/gridlogic.cxx b/src/gridlogic.cxx index 2d07d9a..3eb9370 100644 --- a/src/gridlogic.cxx +++ b/src/gridlogic.cxx @@ -215,25 +215,7 @@ void GridLogic::pressed( int track, int scene ) { //LUPPP_NOTE("netralizing & qStop on scene %i due to press on %i", i, scene ); LooperClip* ilc = jack->getLooper( track )->getClip( i ); - /* - if ( ilc->getState() == GridLogic::STATE_EMPTY || - ilc->getState() == GridLogic::STATE_STOPPED ) - { - // pass - } - else if ( ilc->somethingQueued() ) - { - LUPPP_NOTE("netralizing & qStop on scene %i due to press on %i", i, scene ); - ilc->neutralize(); - jack->getControllerUpdater()->setSceneState(track, i, ilc->getState() ); - } - else // catch all others, netralize & stop - { - ilc->neutralize(); - ilc->queueStop(); - jack->getControllerUpdater()->setSceneState(track, i, ilc->getState() ); - } - */ + ilc->neutralize(); ilc->queueStop(); jack->getControllerUpdater()->setSceneState(track, i, ilc->getState() ); diff --git a/src/looper.cxx b/src/looper.cxx index 34d3e9d..27732d7 100644 --- a/src/looper.cxx +++ b/src/looper.cxx @@ -72,7 +72,7 @@ LooperClip* Looper::getClip(int scene) } void Looper::beat() -{ +{//TODO needed? //FIXME: Need to keep looperClips in sync when there exists no int N // such that playSpeed*N==1 // for(int i=0;i Date: Sat, 26 Nov 2016 09:47:12 +0000 Subject: [PATCH 4/4] Fixed #117 Master Returns now re-enabled --- src/jack.cxx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/jack.cxx b/src/jack.cxx index e3726cf..6c39c84 100644 --- a/src/jack.cxx +++ b/src/jack.cxx @@ -528,10 +528,8 @@ void Jack::processFrames(int nframes) if(fabs(masterVol-masterVolLag)>=fabs(masterVolDiff/10.0)) masterVolLag+=masterVolDiff/10.0; /// mixdown returns into master buffers - // FIXME: Returns broken, due to metronome glitch in master output: buffer - // writing issue or such. See #95 on github - buffers.audio[Buffers::JACK_MASTER_OUT_L][i] = L * masterVolLag;// (L + returnL*returnVol) * masterVol; - buffers.audio[Buffers::JACK_MASTER_OUT_R][i] = R * masterVolLag;// (R + returnR*returnVol) * masterVol; + buffers.audio[Buffers::JACK_MASTER_OUT_L][i] = (L + returnL*returnVol) * masterVolLag; + buffers.audio[Buffers::JACK_MASTER_OUT_R][i] = (R + returnR*returnVol) * masterVolLag; /// write SEND content to JACK port buffers.audio[Buffers::JACK_SEND_OUT][i] = buffers.audio[Buffers::SEND][i];