Package: jack-keyboard Version: 2.5-2 Severity: normal Tags: patch Per the manual page, jack-keyboard should pass through incoming MIDI messages but replace the channel number with its own. It only recognizes incoming messages sent on MIDI channel 0 however, and does not rewrite the channel at all.
-- System Information: Debian Release: squeeze/sid APT prefers lucid-updates APT policy: (500, 'lucid-updates'), (500, 'lucid-security'), (500, 'lucid-proposed'), (500, 'lucid-backports'), (500, 'lucid') Architecture: i386 (i686) Kernel: Linux 2.6.31-11-rt (SMP w/2 CPU cores; PREEMPT) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages jack-keyboard depends on: ii jackd 5danmppa1~lucid1 JACK Audio Connection Kit (default ii libc6 2.11.1-0ubuntu7.8 Embedded GNU C Library: Shared lib ii libgli 2.24.1-0ubuntu1 The GLib library of C routines ii libgtk 2.20.1-0ubuntu2 The GTK+ graphical user interface ii libjac 1:0.120.1+svn4142-2 JACK Audio Connection Kit (librari ii liblas 0.6.0~rc2-1ubuntu2danmppa3~lucid1 LASH Audio Session Handler (LASH) ii libx11 2:1.3.2-1ubuntu3 X11 client-side library Versions of packages jack-keyboard recommends: ii a2jmidid 6-0ubuntu2 daemon for exposing legacy ALSA MI ii qjackctl 0.3.7-4danmppa1~lucid1 User interface for controlling the Versions of packages jack-keyboard suggests: ii ghoste 20100923-0ubuntu1danmppa2~lucid1 A graphical DSSI plugin host ii lashd 0.6.0~rc2-1ubuntu2danmppa3~lucid1 LASH Audio Session Handler (LASH) ii whysyn 20090403-1ubuntu1 DSSI Soft Synth Interface -- no debconf information
>From 724fa8746dc00c32db9dfadfcfe9fa46fa6ed95e Mon Sep 17 00:00:00 2001 From: Dan A. Muresan <danm...@gmail.com> Date: Tue, 3 May 2011 01:12:17 +0300 Subject: [PATCH] Fix pianola mode (MIDI-in). Per the manual page, jack-keyboard should pass through incoming MIDI messages but replace the channel number with its own. The code only recognized incoming messages sent on MIDI channel 0 however, and did not rewrite the channel at all. --- src/jack-keyboard.c | 14 ++++++++++---- 1 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/jack-keyboard.c b/src/jack-keyboard.c index 5f8bc7c..70c1027 100644 --- a/src/jack-keyboard.c +++ b/src/jack-keyboard.c @@ -199,23 +199,29 @@ process_received_message_async(gpointer evp) { int i; struct MidiMessage *ev = (struct MidiMessage *)evp; + int b0 = ev->data [0], b1 = ev->data [1]; - if (ev->data[0] == MIDI_RESET || (ev->data[0] == MIDI_CONTROLLER && - (ev->data[1] == MIDI_ALL_NOTES_OFF || ev->data[1] == MIDI_ALL_SOUND_OFF))) { + /* Strip channel from channel messages */ + if (b0 >= 0x80 && b0 <= 0xEF) + b0 = b0 & 0xF0; + + if (b0 == MIDI_RESET || (b0 == MIDI_CONTROLLER && + (b1 == MIDI_ALL_NOTES_OFF || b1 == MIDI_ALL_SOUND_OFF))) { for (i = 0; i < NNOTES; i++) { piano_keyboard_set_note_off(keyboard, i); } } - if (ev->data[0] == MIDI_NOTE_ON) { + if (b0 == MIDI_NOTE_ON) { piano_keyboard_set_note_on(keyboard, ev->data[1]); } - if (ev->data[0] == MIDI_NOTE_OFF) { + if (b0 == MIDI_NOTE_OFF) { piano_keyboard_set_note_off(keyboard, ev->data[1]); } + ev->data [0] = b0 | channel; queue_message(ev); return FALSE; -- 1.7.0.4