From 918133a342252cc8c27ea6dd5890cca084f5cb30 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 2 Oct 2015 10:22:00 -0400 Subject: fix handler of fader (pitchbend) messages in Mackie Control so that the outbound messages match the inbound ones Pitch bend values really can span 0 to 16384, not 16383 --- libs/surfaces/mackie/fader.cc | 8 +++++++- libs/surfaces/mackie/surface.cc | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'libs') diff --git a/libs/surfaces/mackie/fader.cc b/libs/surfaces/mackie/fader.cc index cc43bf3387..46e46cf797 100644 --- a/libs/surfaces/mackie/fader.cc +++ b/libs/surfaces/mackie/fader.cc @@ -19,6 +19,10 @@ #include +#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); } diff --git a/libs/surfaces/mackie/surface.cc b/libs/surfaces/mackie/surface.cc index 5a56e0b00d..3b57c33579 100644 --- a/libs/surfaces/mackie/surface.cc +++ b/libs/surfaces/mackie/surface.cc @@ -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 (&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 { -- cgit v1.2.3