# Note Recognition Software

I'm wondering if anyone knows of any open source solutions to note recognition. I'm planning on building a program for online sheet music, which recognizes your notes, and tries to tell you what you can improve, and how.

However, for piano for example, I don't even know if it's possible to have software that detects various notes at once, with very high speed. If anyone knows anything like this, please let me know!

## migrated from avp.stackexchange.comAug 19 '13 at 14:16

This question came from our site for engineers, producers, editors, and enthusiasts spanning the fields of video, and media creation.

• This question appears to be off-topic because it is about software development. – AJ Henderson Aug 18 '13 at 22:49
• It is possible for notes to be recognized. The frequencies involved in the waves are known and it is possible to analyse the sound to look at the frequencies (and thus notes) that are present, however the topic of finding an open source library that you could use for developing your own software is probably off topic since it is a software development question. – AJ Henderson Aug 18 '13 at 22:50
• This question appears to be off-topic, Should migrate to DSP site. – Eugene S Aug 19 '13 at 1:21
• Welcome! DSP.SE is about the theoretical and practical aspects of doing signal processing. Requests for software are generally not a good fit for any of the *.SE sites. If you have theoretical questions about how to achieve multi-tone recognition at a high speed, with good accuracy, please feel free to re-cast your question. – Peter K. Aug 19 '13 at 14:20
• maybe the folks at celemony will tell us all how it's done. – robert bristow-johnson Jan 17 '14 at 3:26

Although it looks like it's not being actively maintained, you might check out "aubio" to see if it will meet your needs : http://aubio.org/

aubio is a tool designed for the extraction of annotations from audio signals. Its features include segmenting a sound file before each of its attacks, performing pitch detection, tapping the beat and producing midi streams from live audio.

• I am using aubio. Not for note recognition though, but I remember having this feature. It is actively maintained and author is quite responsive and helpful. Couple of months ago new version was introduced: 4.x. – Lukasz Tracewski Jun 16 '14 at 8:38

This is an old question, but one that comes up often enough that I thought I'd add this resource that I just ran across: open source software (in Swift) that might be useful to others interested in the same topic: Beethoven

Beethoven is an audio processing Swift library that provides an easy-to-use interface to solve an age-old problem of pitch detection of musical signals. You can read more about this subject on Wikipedia.

Something called MuseScore will recognise notes from keyboard/MIDI inputs:

http://www.osalt.com/musescore

http://musescore.org/

It's an open source alternative to Sibelius.

• Isn't recognizing a note from a MIDI stream trivial, in the sense that a MIDI stream is a sequence of note-on/note-off events ? I thought the OP was asking more for pitch detection in an audio stream. – lmjohns3 Sep 18 '13 at 23:39

A similar question was asked on StackOverflow (though it was specific to developing software for the iPhone): https://stackoverflow.com/questions/5374839/how-to-detect-music-note-and-chords-programmatically-in-iphone-sdk If you don't quite understand some part of my answer below, please refer to the answer provided to that StackOverflow question.

From a signals perspective, musical note recognition is just dominant frequency identification. Musical notes are directly mapped to dominant frequencies in a sound. So, if you find the dominant frequency present in a given portion of an audio signal then you can find out the musical note that frequency maps to by consulting the table in this Wikipedia page: https://en.wikipedia.org/wiki/Piano_key_frequencies. As with any other sort of frequency analysis, to start you perform a FFT on the given audio signal and find the peak(s) in the frequency domain data.

If you're planning on building your own program for this purpose anyways, I would suggest just building it "from scratch" - there aren't too many steps to the process, as I've shown above. A programming language like MATLAB would give you the perfect tools to perform an FFT (the built-in fft function) and all of the requisite analysis to discover dominant frequencies in that frequency data. Of course, if you're more comfortable with another language - like C or C++, for instance - there are implementations of the FFT written for software development in those languages as well (i.e., http://www.fftw.org/).