What is a reasonably good way to detect chords in solo piano music?
Not the MIDI ones, but music generated by real piano/electronic keyboard.

I am trying to play a piano piece and check out its chords by feeding the piano output sound through microphone to my computer.

  • OP: It seems this question could be reworded easily to fit within the guidelines. Maybe tell us more about what you are trying to do? @mods: He isn't asking for opinions on the best transcribing software, he described the problem he is trying to solve and wants possible solutions. This is a pretty common question (for all instruments), but I don't think I've ever seen it properly answered. – Charles Oct 11 '14 at 1:50
  • 1
    There is a program called Transcribe! which might aid you. You can slow down a track being played, let the program analyse which tone are played in a small section etc. It doesn't magically give you the chords and so one, there is some work involved... – Meaningful Username Oct 14 '14 at 18:13
  • Automated pitch detection from audio (much like artificial vision) is not a completely solved problem (at least last time I'd checked). It's hard enough for a single melody line, and adding polyphony (e.g. chords) makes it much more difficult. I believe e7mac's answer (Melodyne) is current state-of-the-art. – Caleb Hines Oct 14 '14 at 18:31
  • @CalebHines : How come understanding human speech (eg by Siri) is easier than understanding a piano melody which is much more standardized form of sound than human voice. – iankit Oct 14 '14 at 18:37
  • @iankit: Likely much more money and research time has been spent on speech recognition than on music transcription. Speech is monophonic: Siri fails if multiple people try to speak into the same iPhone at the same time. Speech recognition is also much less sensitive to correct pitch analysis, just the slope trend is often enough. – hotpaw2 Mar 22 '15 at 23:14

The best software that I've heard of is Melodyne. It's capabilities are truly amazing and I think it will do what you want very well. Take a look. It's not cheap though but I think it has a free trial!


| improve this answer | |

There is an open-source project called CLAM. It has an application that automatically analyzes chords:


There are also more advanced applications that are part of the CLAM suite that can do more complex analysis.

Here is a demo of chordata:

| improve this answer | |

There is software for that. But it is not always very accurate. Especially with multiple voices (or instruments) starting at the same time.

Research on this started over 40 years ago: Rabiner, Lawrence, et al. "A comparative performance study of several pitch detection algorithms." Acoustics, Speech and Signal Processing, IEEE Transactions on 24.5 (1976): 399-418.

And has improved a lot during the last few years: De La Cuadra, Patricio, Aaron Master, and Craig Sapp. "Efficient pitch detection techniques for interactive music." Proceedings of the 2001 International Computer Music Conference. 2001.

I suggest you take a look at the pitch detection plugin of the (free software) Audacity here.

| improve this answer | |
  • decreased accuracy with multiple voices is ok. Something that just works with piano solos is the first question. How much accuracy can be achieved with that using available tools, if not then I will look for developing some code of my own. Thanks for the audacity plugin, I will check it out. However this looks like a general plugin, some code which is optimized for piano might be a better choice. – iankit Feb 11 '14 at 7:34

This is called transcription software; did you mean an app as in a mobile device app? Or desktop? There are many libraries that you could use if you were willing to develop your own app for either, of course, but there are also many already in existence. I'm not sure how accurate they are, but you can always give a couple a shot (try searching Github or SourceForge)! (Or just wait for someone else's answer)

| improve this answer | |
  • Anything is ok. Mobile or desktop app. I am ok in spending time in developing my own, I have experience in python programming. But before jumping onto that I was looking for what is already there. Specifically for piano, it is ok if this doesnt work when many other instruments are playing, but should have sufficient accuracy (>95%) when piano solo is played. – iankit Feb 11 '14 at 7:32

Ableton Live has a feature built in called "Harmony-to-MIDI" where it analyzes an audio track (could be piano, guitar, whole song.. anything) and it outputs a MIDI sequence replicating the chords played in the piece. It even chooses the closest sounding synth patch to match the source. Also available is Melody-to-MIDI and Rhythm-to-MIDI. I'm not much of a keyboardist so I can't vouch for 100% accuracy, but it usually sounds pretty good to me.

It might not be worth buying the software for this alone, but if you are into recording and producing music Ableton is definitely worth a look. You can try to software free for 30 days I believe.

Edit: I just tried a program called Transcribe! and it is very useful for transcribing recorded material. You can load your mp3s and it will analyze the frequencies and tell you which notes are represented over time. Works for piano, guitar, voice.. anything with a pitch. It won't automatically transcribe all the notes, but it will plot out which notes are likely being played, then use your ears figure out which ones are correct.

| improve this answer | |

A new app released today might be a sultion. http://audiokit.io/ I dont have iOS device to check the accuracy though. Will borrow one.

| improve this answer | |

Honestly, I'm gonna give you the sell-out answer.

The best way to determine what notes and chords are being played is with your own ear.

I'm sorry, but with all due respect to other responders, it's extremely difficult for any software program to detect chords, specifically. For basic triads, some of the best software can do the job, but so much of chord naming depends on context. And isolating a fundamental frequency is no cakewalk, either.

For example, for simple note naming, how would a computer know that a note with the frequency of 440 Hz is a B♭♭ in a C diminished 7th chord? The best computers currently can do is just give the most common enharmonic spellings for notes, but that creates tons of confusion. Never mind the fact that even single notes can be extremely difficult to pick out of a song, and they tend to blend with their harmonics. getting around that, though, at least is possible if you can just hook up your note-naming software directly to the interface of a keyboard.

Some other concerns bother me as well. How is a computer to determine where one chord stops and ends? When I play a C major triad, then play the note B, is that Cmaj7 or just a passing tone? Maybe it's even part of the G major chord that follows?

How can a computer handle the rootless voicings? Is that C♯ diminished 7th or A7♭9? Is E-F-A-B the basis of G13, or maybe an enharmonic respelling for D♭7♯9♭13, an altered chord?

The best way I can conceive of, until AI can just perform musical analysis faster than we can, is to learn a lot of music theory, build up your aural skills, and name them yourself, because no software on the market today can get the job done more accurately than a human.

There's a reason Music's SE is so successful. We need humans to answer most of the good questions on this site, because context determines so much of musical analysis.

Others have suggested slowing down the recording. That's a novel idea, and whenever I transcribe from audio I make use of any way I can to slow down the notes. I cannot understate how effective that is.

| improve this answer | |

You can try Voice To MIDI Android application by BialaMusic BialaMusic, supporting live audio input from Piano and Guitar. Poliphony is supported as selectable option

Not sure of any other Sound2MIDI application

since sound is recorded to file first , than converted to MIDI, I am looking for live Sound2MIDI, Piano2MIDI transcriber, giving live MIDI stream as output

| improve this answer | |

Not the answer you're looking for? Browse other questions tagged or ask your own question.