For what it's worth, the auto-correlation route is simpler and more reliable. FFT alone is not enough, because the spectrum tends to be rather ambiguous. There's still a pattern to it for every note played, so it should be possible to deduce a note with a neural net. But I just didn't have time for that, maybe later.
PS. Give my thingy a try if you have a moment. I'm curious if it actually works with any pianos other than mine.
I will definitely use your software. What would be great is to have a 'virtual midi device'. If it works well enough are you open to licensing it? We will sooner or later hit this problem and such a component would make our lives a lot easier, it would also allow me to practice on my real piano using the software, which if I didn't want to play the piano I'd give my left arm for.
On another note: when you know what should be played it is actually easier: you only need to output a '1' or a '0', what is played is what is expected vs what is played is not what is expected.
This may be a simpler problem to solve, and in that context it might even be able to detect chords.
Re: the another note - yes, indeed. I too realized this, because mis-detected notes are usually off by a full octave.
As a side note, after going reading through various papers on the subject, it would seem that an ultimate note detector should really be based on a Const-Q spectrum analyzer feeding into an NN. Training the net, even from scratch, can be as simple as sitting in front of a piano and then repeatedly playing each note in all possible ways. Then, throw this detector in a group with waveform-based detectors, get a weighted consensus and that should, in theory, be pretty damn accurate.