Esempio n. 1
0
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
		)
	);
*/
}
Esempio n. 2
0
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;
    }
  }
}