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; } }