public override void Send(int b)
{
if (!_isOpen)
{
return;
}
int param2 = ((b >> 16) & 0xFF);
byte param1 = (byte)((b >> 8) & 0xFF);
byte cmd = (byte)(b & 0xF0);
TownsMidiInputChannel c = _channels[b & 0x0F];
switch (cmd)
{
case 0x80:
c.NoteOff(param1);
break;
case 0x90:
if (param2 != 0)
{
c.NoteOn(param1, (byte)param2);
}
else
{
c.NoteOff(param1);
}
break;
case 0xB0:
c.ControlChange(param1, (byte)param2);
break;
case 0xC0:
c.ProgramChange(param1);
break;
case 0xE0:
c.PitchBend((short)((param1 | (param2 << 7)) - 0x2000));
break;
case 0xF0:
Debug.WriteLine("MidiDriver_TOWNS: Receiving SysEx command on a send() call");
break;
}
}