Here it comes. It has a quirk, if pressing sustain and releasing the bass key and play new notes, but I think it works quite well.
Da Captain.
var NoteIsOn = 0;
function SwitchNote(NoteNumber, Velo, state)
{
if(Velo == 0)
return state;
if(state == 0)
{
var on = new NoteOn;
on.pitch = NoteNumber;
on.velocity = Velo;
on.send();
}
else
{
var off = new NoteOff;
off.pitch = NoteNumber;
off.velocity = Velo;
off.send();
}
state = 1 - state;
return state;
}
function Reset()
{
if(NoteIsOn == 1)
NoteIsOn = SwitchNote(BassNoteNumber, 1, NoteIsOn);
BassNoteNumber = 1000;
}
function HandleMIDI(event)
{
if(event instanceof NoteOn)
{
var Pitch = event.pitch;
if(Pitch < BassNoteNumber)
{
if(NoteIsOn == 1)
NoteIsOn = SwitchNote(BassNoteNumber, 1, NoteIsOn); // switch old note off
BassNoteNumber = Pitch;
NoteIsOn = SwitchNote(BassNoteNumber, event.velocity, NoteIsOn); // switch new Note on
}
}
else
if(event instanceof NoteOff)
{
var Pitch = event.pitch;
if(Pitch == BassNoteNumber)
{
if(NoteIsOn == 1)
NoteIsOn = SwitchNote(BassNoteNumber, 1, NoteIsOn); // switch old note off
BassNoteNumber = 1000;
}
}
else
event.send();
}