fix handler of fader (pitchbend) messages in Mackie Control so that the outbound...
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 2 Oct 2015 14:22:00 +0000 (10:22 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 2 Oct 2015 14:22:00 +0000 (10:22 -0400)
Pitch bend values really can span 0 to 16384, not 16383

libs/surfaces/mackie/fader.cc
libs/surfaces/mackie/surface.cc

index cc43bf3387e3062cda1690215f1e220d8a7dca47..46e46cf797d97146eee063f3625ca4e3aea2d028 100644 (file)
 
 #include <cmath>
 
+#include "pbd/compose.h"
+
+#include "ardour/debug.h"
+
 #include "fader.h"
 #include "surface.h"
 #include "control_group.h"
@@ -26,6 +30,7 @@
 
 using namespace ArdourSurface;
 using namespace Mackie;
+using namespace PBD;
 
 Control*
 Fader::factory (Surface& surface, int id, const char* name, Group& group)
@@ -54,6 +59,7 @@ Fader::update_message ()
                return MidiByteArray();
        }
 
-       int posi = lrintf (0x3fff * position);
+       int posi = lrintf (16384.0 * position);
+       DEBUG_TRACE (DEBUG::MackieControl, string_compose ("generate fader message for position %1 (%2)\n", position, posi));
        return MidiByteArray  (3, 0xe0 + id(), posi & 0x7f, posi >> 7);
 }
index 5a56e0b00d7ce21b5954bb7674f7cd46e038c054..3b57c33579da7f8a3473a7473185b8c7b59102fe 100644 (file)
@@ -396,8 +396,8 @@ Surface::handle_midi_pitchbend_message (MIDI::Parser&, MIDI::pitchbend_t pb, uin
         * when we connected to the per-channel pitchbend events.
         */
 
-       DEBUG_TRACE (DEBUG::MackieControl, string_compose ("Surface::handle_midi_pitchbend_message on port %3, fader = %1 value = %2\n",
-                                                          fader_id, pb, _number));
+       DEBUG_TRACE (DEBUG::MackieControl, string_compose ("Surface::handle_midi_pitchbend_message on port %3, fader = %1 value = %2 (%4)\n",
+                                                          fader_id, pb, _number, pb/16384.0));
        
        if (_mcp.device_info().no_handshake()) {
                turn_it_on ();
@@ -407,7 +407,7 @@ Surface::handle_midi_pitchbend_message (MIDI::Parser&, MIDI::pitchbend_t pb, uin
 
        if (fader) {
                Strip* strip = dynamic_cast<Strip*> (&fader->group());
-               float pos = (pb >> 4)/1023.0; // only the top 10 bytes are used
+               float pos = pb / 16384.0;
                if (strip) {
                        strip->handle_fader (*fader, pos);
                } else {