D
D
Dima Petruk2015-03-16 23:14:37
Audio
Dima Petruk, 2015-03-16 23:14:37

Are there good ways to tell if a given chord has been played on a guitar?

The problem is this: there is a guitar and many pairs (string, fret) that must be played at the same time (chord). And you need real-time to determine whether that chord has been played. That is, the program is given the fingering of the chord and continuously "listening" to the recording from the microphone near the guitar, you need to inform that this chord has been played.
Prompt ready-made algorithms / methods / programs / articles to solve this problem.

G
GavriKos, 2015-03-16
@GavriKos

Start with the Fourier transform and determine the frequency of the sound.

S
SeptiM, 2015-03-17
@SeptiM

They say it's a big challenge. Look up the keywords music transcription, polyphonic transcription. Offhand article www.cs.berkeley.edu/~tberg/papers/nips2014.pdf
UPD. This might come in handy: www.cs.cornell.edu/home/kleinber/focs05-mixtures.pdf

E
Eugene Y, 2015-03-17
@1eqinfinity

If you do not need to determine on the fly, then you can recognize well.
There are C++ libraries here mtg.upf.edu/techtransfer/technologies
You need SMS Tools and/or Essentia functionality. The last week of this course contains tasks from this area: https://www.coursera.org/course/audio
As a first approximation, the algorithm is as follows:
0 - (optionally) the sound is passed through a low-pass filter that cuts off noise and the highest overtones
1 - a spectrogram is built
2 - the lowest note (its fundamental frequency)
is determined 3 - its harmonics are determined
4 - results 2 and 3 are subtracted from the spectrogram, the note is added to the list of played notes
5 - steps 2-4 are repeated until only insignificant information remains in the spectrogram (jerky components with low amplitudes).

Didn't find what you were looking for?