Admin wrote:Thus, the frequency of polling the midi buffer depends on the size of the playback buffer, which you can set in Setup.
WOW, I totally missed the bottom section of the I/O page in the setup and options panel after all this time of testing! The Samples/Buffer option, I've reduced it from 3072 to 1024, and it made a pretty big difference in midi-input pickup rate, even though I still don't think it's enough. Even SyFonOne has a better "pickup rate" than even synthfont's current 1024 samples/buffer results. I'm assuming syfonone may still have the limited pickup rate effect, but I cannot measure this due to the polyphony limiter and the lack of being able to route output through another MIDI OUT device.
On the other hand,
MIDITrail's (open source) MIDI Input engine seems to have zero pickup-rate limiting (only limited by the input device itself) at all as well as no (noticeable at least?) input latency. This is starting to make me think the solution is to internally separate MIDI Input from the synth itself to accomplish this.
Admin wrote:Here's the next version
In 2.0.2.0F, MIDI Input has been greatly improved it seems, other than "pickup rate". Not only am I seeing "All Notes Off" working again, but now it seems to be no longer discarding (I think) and infinitely sustaining higher volumes of notes randomly. Also, the "access violation" bug has been fixed in this version too (probably thanks to the error reports I sent with 'E')
As for the MIDI IN program changes, these bugs are not fixed yet, but heres a situation you can try to reproduce them:
In SynthFont, open up a MIDI file that has multiple tracks and instruments, as well as opening a multi-track MIDI file with a different set of instruments in another MIDI player where program change messages are only executed at the beginning of the file. Cue playback in the MIDI player being output with a Loopback port, and while the song is playing (after program messages were already sent), enter MIDI In mode, and you will hear the MIDI file play with the instruments used in the file loaded in Synthfont (rather than all program 000 as I'm assuming that's the expected result).
Now, cue the playback in the MIDI file to the beginning of the MIDI in the MIDI player so the Program Change message will execute, and you'll hear the proper instruments of that MIDI file heard within the synthfont-midi-in synth. Now, exit MIDI In mode, and you will notice that the instrument sets changed by the MIDI Player has carried over and changed the instrument settings in your synthfont arrangement.
As for the producing notes with virtual keys rapidly bug, I found that this same thing happens with MIDI Input, so in that case I'd say experiment with keeping MIDI Input mode active for a while, while sending notes to it, perhaps at a higher volume and with program changes, then doing things in between, eventually the sound should stop working, the interface will stop reacting other than the exit midi in mode which will keep several buttons grayed out, and synthfont will refuse to close. This seems to happen at random, there seems to be no exact trick to getting this to happen.
On the other hand, with Virtual Keys this should happen after dragging your mouse back and forth rapidly for long enough of a while to produce lots of notes at once, preferably with an instument other than the standard grand piano, and eventually the audio will stop and hang.
Audio artifacts are still heard with both the MIDI IN mode and Virtual Keys, as well as a custom non-44khz sample rate is not applying itself at program launch-time (despite being shown as selected in the list) until re-selected.
Now, for the "Attempting to initialize external MIDI OUT device that doesn't work causes the program's interface to turn white and hang" bug, I've done the following to re-produce this bug:
1. Have VirtualMIDISynth 2 Alpha installed and set up and tested to ensure working state from the official forum topic:
2. Open another MIDI Player and tell it to play a MIDI, outputting to "VirtualMIDISynth #1" to cause the port to be in-use/busy
3. With SynthFont, play a midi, telling it to output to MIDI Out device "VirtualMIDISynth #1"
4. After the coolsoft-produced "Device VirtualMIDISynth #1 is already in use by process [...]" message comes up press OK
5. SynthFont's interface will turn white and hang, instead of producing a "Could not open MIDI port" message like 2.0.1.2U and earlier did