Exemplo n.º 1
0
void sys_poll_midi(void)
{
    int i, nmess, throttle = 100;
    PmEvent buffer;
    for (i = 0; i < mac_nmidiindev; i++)
    {
        while (1)
        {
            if (!throttle--)
                goto overload;
            nmess = Pm_Read(mac_midiindevlist[i], &buffer, 1);
            if (nmess > 0)
            {
                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 & 0xf0) == 0xf0 ?
                    status : (status & 0xf0));
                if (nd_sysex_mode)
                    nd_sysex_inword(i, status, data1, data2, data3);
                else switch (msgtype)
                {
                case MIDINOTEOFF: 
                case MIDINOTEON: 
                case MIDIPOLYTOUCH:
                case MIDICONTROLCHANGE:
                case MIDIPITCHBEND:
                case MIDISONGPOS:
                    sys_midibytein(i, status);
                    sys_midibytein(i, data1);
                    sys_midibytein(i, data2);
                    break; 
                case MIDIPROGRAMCHANGE:
                case MIDICHANNELTOUCH:
                case MIDITIMECODE:
                case MIDISONGSELECT:
                    sys_midibytein(i, status);
                    sys_midibytein(i, data1);
                    break;
                case MIDISTARTSYSEX:
                    nd_sysex_mode=1;
                    nd_sysex_inword(i, status, data1, data2, data3);
                    break; 
                default:
                    sys_midibytein(i, status);
                    break;
                }
            }
            else break;
        }
Exemplo n.º 2
0
void sys_poll_midi(void)
{
    int i, nmess, throttle = 100;
    PmEvent buffer;
    for (i = 0; i < mac_nmidiindev; i++)
    {
        while (1)
        {
            if (!throttle--)
                goto overload;
            nmess = Pm_Read(mac_midiindevlist[i], &buffer, 1);
            if (nmess > 0)
            {
                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;
        }