The current note logic is a little underwhelming when emulating the old mono synths, it uses most recent key with no history. This should be kept as an option since there were plenty of later mono's that used it. It does not do a good job of emulating the groovy legato mode of the highest note precedence. We need something like the following spec:
Last Note Precedence: the current algorithm
Lowest Note Precedence: KEY_ON for first note, KEY_REON for subsequent events, optional of note_off events.
Highest Note Precedence: KEY_ON for first note, KEY_REON for subsequent events, optional of note_off events.
Duophony: highest and lowest note events (only if '-voices 2' specified).
For duophony the emulator would have to decide what to do with the voices, ie, which one plays which oscillators since that was generally how they worked. This mode may be dropped into a separate enhancement depending on how this one progresses, ie, how much extra impact it takes.
For implementation I need some kind of logic for which notes are pressed, something that is partially done for the arpeggiator code however that is not really well implemented, it has a note stack that is ordered by time, that is kldugy to manage, is a little unpredictable and so it should be collapsed back on to this new implementation. This would allow the arpeggiator to scan through notes ordered by key number rather than time: The alternative of turning this stack into one ordered by key id using a sort algorithm is ugly.