[PD] nanoKontrol2 dropping MIDI messages (OSX)
Miller Puckette
msp at ucsd.edu
Sun Jun 24 19:35:56 CEST 2012
Here's the relevant diff - should apply OK to 0.42 I think.
cheers
Miller
------------------
diff --git a/src/s_midi_pm.c b/src/s_midi_pm.c
index fe123ff..856f121 100644
--- a/src/s_midi_pm.c
+++ b/src/s_midi_pm.c
@@ -241,44 +241,51 @@ void nd_sysex_inword(int midiindev, int status, int data1, int data2, int data3)
void sys_poll_midi(void)
{
- int i, nmess;
+ int i, nmess, throttle = 100;
PmEvent buffer;
for (i = 0; i < mac_nmidiindev; i++)
{
- int nmess = Pm_Read(mac_midiindevlist[i], &buffer, 1);
- if (nmess > 0)
+ while (1)
{
- int status = Pm_MessageStatus(buffer.message);
- int data1 = Pm_MessageData1(buffer.message);
- int data2 = Pm_MessageData2(buffer.message);
- int data3 = ((buffer.message >> 24) & 0xFF);
- int msgtype = (status >> 4) - 8;
- switch (msgtype)
+ if (!throttle--)
+ goto overload;
+ nmess = Pm_Read(mac_midiindevlist[i], &buffer, 1);
+ if (nmess > 0)
{
- case 0:
- case 1:
- case 2:
- case 3:
- case 6:
- sys_midibytein(i, status);
- sys_midibytein(i, data1);
- sys_midibytein(i, data2);
- break;
- case 4:
- case 5:
- sys_midibytein(i, status);
- sys_midibytein(i, data1);
- break;
- case 7:
- nd_sysex_mode=1;
- nd_sysex_inword(i, status, data1, data2, data3);
- break;
- default:
- if (nd_sysex_mode)
+ int status = Pm_MessageStatus(buffer.message);
+ int data1 = Pm_MessageData1(buffer.message);
+ int data2 = Pm_MessageData2(buffer.message);
+ int data3 = ((buffer.message >> 24) & 0xFF);
+ int msgtype = (status >> 4) - 8;
+ switch (msgtype)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 6:
+ sys_midibytein(i, status);
+ sys_midibytein(i, data1);
+ sys_midibytein(i, data2);
+ break;
+ case 4:
+ case 5:
+ sys_midibytein(i, status);
+ sys_midibytein(i, data1);
+ break;
+ case 7:
+ nd_sysex_mode=1;
nd_sysex_inword(i, status, data1, data2, data3);
+ break;
+ default:
+ if (nd_sysex_mode)
+ nd_sysex_inword(i, status, data1, data2, data3);
+ }
}
+ else break;
}
}
+ overload: ;
}
void midi_getdevs(char *indevlist, int *nindevs,
------------------
On Sun, Jun 24, 2012 at 10:23:52AM -0400, Ivica Ico Bukvic wrote:
> Does this affect the 0.42 branch as well? If so, would you mind sharing the relevant patch or svn commit?
>
> Many thanks!
>
> Ivica Ico Bukvic, D.M.A
> Composition, Music Technology
> Director, DISIS Interactive Sound & Intermedia Studio
> Director, L2Ork Linux Laptop Orchestra
> Head, ICAT IMPACT Studio
> Virginia Tech
> Department of Music
> Blacksburg, VA 24061-0240
> (540) 231-6139
> (540) 231-5034 (fax)
> disis.music.vt.edu
> l2ork.music.vt.edu
> ico.bukvic.net
More information about the Pd-list
mailing list