[PD] nanoKontrol2 dropping MIDI messages (OSX)
Miller Puckette
msp at ucsd.edu
Thu Jun 28 20:17:12 CEST 2012
Correct - Mac and Windiws only. (One _could_ build pormidi for linux
as well - perhaps this would be a good thing).
cheers
Miller
On Thu, Jun 28, 2012 at 12:16:38PM -0400, Ivica Ico Bukvic wrote:
> BTW, this does not affect Linux, right? I ask this because my Linux
> build only uses s_midi_oss and s_midi_alsa source files...
>
> On 06/24/2012 01:35 PM, Miller Puckette wrote:
> >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,
>
>
> --
> 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