If a musician (or a vocal coach) hears a human voice at a certain note, he/she can easily find the same note on piano.
Not only for human voice, if the waveform is square, or created with a synth, they will be able to figure out which note it is.
However, using DFT (or FFT) gives mixed results for any waveform other than sinusoidal. It makes sense, because we use sinusoids as base functions (or base vectors).
Now, I want to learn if there is any way we can implement a signal processing algorithm in order to detect tones regardless of their waveform. Googling didn't help. Can you help me DSP SE?