static void MIDIchangeTrackPan(int newpan,const struct Tracks *track){ struct PatchData *patchdata=(struct PatchData *)track->patch->patchdata; if(patchdata==NULL) return; D_PutMidi3( patchdata->midi_port, 0xb0|patchdata->channel, 10, R_BOUNDARIES( 0, (127*(newpan+MAXTRACKPAN)/(MAXTRACKPAN*2)), 127 ) ); /* RError("newpan: %d, pan: %d\n", newpan, boundaries( 0, (127*(newpan+MAXTRACKPAN)/(MAXTRACKPAN*2)), 127 ) ); */ }
void MIDIGetEvents( struct Instruments *instrument, int arg0, int arg1, int arg2, int arg3 ) { struct Tracker_Windows *window=root->song->tracker_windows; struct Patch *patch=g_currpatch; struct PatchData *patchdata; int channel; switch(arg0){ case MIDIEVENT_USE0x90FORNOTEOFF: useOx90ForNoteOff=arg1; break; case MIDIEVENT_NEWPATCH: SelectPatch(window,window->wblock->wtrack->track); return; break; case MIDIEVENT_SETSTANDARDVEL: if(g_currpatch==NULL){ root->standardvel=arg1; }else{ g_currpatch->standardvel=arg1; } break; case MIDIEVENT_CHANGECURRENTPATCH: { struct Patch *patch=NULL; if(arg1!=0){ patch=ListFindElement1(&instrument->patches->l,arg1); } if( ! is_playing()){ window->wblock->wtrack->track->patch=patch; if (patch != NULL) patch->has_been_assigned_to_editor_track = true; DrawWTrackHeader(window,window->wblock,window->wblock->wtrack); } instrument->PP_Update(instrument,patch,false); } break; case MIDIEVENT_CHANGECURRENTPORT: printf("MIDIEVENT_CHANGE.. %d\n",arg1); break; default: break; } if(g_currpatch==NULL) return; patchdata=(struct PatchData *)patch->patchdata; channel=patchdata->channel; struct MidiPort *midi_port = patchdata->midi_port; printf("Got MidiEvent %d, %d,%d,%d\n",arg0,arg1,arg2,arg3); if(arg0>0x7f){ R_PutMidi3(midi_port,arg0,arg1,arg2); }else{ switch(arg0){ case MIDIEVENT_SETMIDIINPUT: break; case MIDIEVENT_CHANGEPATCHNAME: break; case MIDIEVENT_SETPORT: break; case MIDIEVENT_CHANGEPORT: break; case MIDIEVENT_SETCHANNEL: if(arg1<1 || arg1>16){ MIDIGFX_SetChannel(patchdata->channel); }else{ patchdata->channel=arg1-1; MIDIGFX_UpdateAll(); } break; case MIDIEVENT_SETMSB: if(arg1>=-1 && arg1<128){ patchdata->MSB=arg1; }else{ MIDIGFX_SetMSB(patchdata->MSB); } break; case MIDIEVENT_SETLSB: if(arg1>=-1 && arg1<128){ patchdata->LSB=arg1; }else{ MIDIGFX_SetLSB(patchdata->LSB); } break; case MIDIEVENT_SETPRESET: patchdata->preset=arg1-1; break; case MIDIEVENT_PANNINGONOFF: patchdata->panonoff=patchdata->panonoff?false:true; MIDIGFX_SetPanSlider(patchdata->panonoff,patchdata->pan); break; case MIDIEVENT_SETPANNING: patchdata->pan=arg1; D_PutMidi3(midi_port,0xb0|channel,0xa,patchdata->pan); break; case MIDIEVENT_SETVOLONOFF: patchdata->volumeonoff=patchdata->volumeonoff?false:true; MIDIGFX_SetVolumeSlider(patchdata->volumeonoff,patchdata->volume); break; case MIDIEVENT_SETVOL: patchdata->volume=arg1; D_PutMidi3(midi_port,0xb0|channel,0x7,patchdata->volume); break; case MIDIEVENT_CC_ONOFF: patchdata->ccsonoff[arg1]=arg2==1?true:false; MIDIGFX_SetCCSlider(arg1,patchdata->ccsonoff[arg1],patchdata->ccvalues[arg1]); break; case MIDIEVENT_CC_VAL: patchdata->ccvalues[arg1]=arg2; break; default: printf("Unknown MIDIEVENT message: %d\n",arg0); break; } } }