Send and Read MIDI Positions the right way
authorMichael Fisher <mfisher31@gmail.com>
Fri, 2 Aug 2013 23:23:36 +0000 (18:23 -0500)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 8 Aug 2013 19:26:19 +0000 (15:26 -0400)
gtk2_ardour/midi_tracer.cc
libs/ardour/ticker.cc

index 9d6fa44ceed4cf7e7f81ce9ec6a06c8cf2e6398d..5038cc7b0ac57647bc4de6b0841e0c8f054b3ab5 100644 (file)
@@ -303,8 +303,7 @@ MidiTracer::tracer (Parser&, byte* msg, size_t len)
                } else if (len == 3 && msg[0] == MIDI::position) {
 
                        /* MIDI Song Position */
-                       uint16_t midi_beats = (uint16_t) msg[1];
-                       midi_beats |= msg[2];
+                       int midi_beats = (msg[2] << 7) | msg[1];
                        s += snprintf (&buf[s], bufsize, "%16s %d\n", "Position", (int) midi_beats);
                } else {
 
index 0a4081bec7d63add3a6cf25c3355e9abeb0313c6..f32cdf94152f7f151f958689a0b64eeb5f671b4b 100644 (file)
@@ -386,11 +386,10 @@ MidiClockTicker::send_position_event (uint32_t midi_beats, pframes_t offset)
        }
 
        /* split midi beats into a 14bit value */
-       MIDI::byte msg[3] = {
-               MIDI_CMD_COMMON_SONG_POS,
-               midi_beats & 0x007f,
-               midi_beats & 0x3f80
-       };
+       MIDI::byte msg[3];
+       msg[0] = MIDI_CMD_COMMON_SONG_POS;
+       msg[1] = midi_beats & 0x007f;
+       msg[2] = midi_beats >> 7;
 
        _midi_port->midimsg (msg, sizeof (msg), offset);