Если не требуется определять на лету, то можно неплохо распознать.
Вот тут есть библиотеки С++
mtg.upf.edu/techtransfer/technologies
Вам нужен функционал SMS Tools и/или Essentia. Последняя неделя этого курса содержит задачи из этой области:
https://www.coursera.org/course/audio
В первом приближении алгоритм такой:
0 - (опционально) звук пропускается через НЧ фильтр, отсекающий шум и самые верхние обертона
1 - строится спектрограмма
2 - определяется самая нижняя нота (ее фундаментальная частота)
3 - определяются ее гармоники
4 - результаты 2 и 3 вычитаются из спектрограммы, нота заносится в список сыгранных
5 - пункты 2-4 повторяются до тех пор, когда в спектрограмме остается только несущественная информация (отрывистые компоненты с низкими амплитудами).