[PD] nanoKontrol2 dropping MIDI messages (OSX)
Ivica Ico Bukvic
ico at vt.edu
Sun Jun 24 23:23:34 CEST 2012
Cool! Thanks!
> -----Original Message-----
> From: Miller Puckette [mailto:msp at ucsd.edu]
> Sent: Sunday, June 24, 2012 1:36 PM
> To: Ivica Ico Bukvic
> Cc: chris clepper; pd-list
> Subject: Re: [PD] nanoKontrol2 dropping MIDI messages (OSX)
>
> 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