bavaria
@bavaria
Студент, Python, Ruby

Существуют ли хорошие способы распознать был ли сыгран данный аккорд на гитаре?

Проблема такова: есть гитара и множество пар (струна, лад), которые должны быть сыграны одновременно(аккорд). И нужно real-time определять был ли сыгран тот аккорд. То есть, программе дается аппликатура аккорда и непрерывно "слушая" запись с микрофона возле гитары нужно сообщить что данный аккорд был сыгран.
Подскажите готовые алгоритмы/способы/программы/статьи для решение данной проблемы.
  • Вопрос задан
  • 505 просмотров
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos
Начните с преобразования Фурье и определения частоты звука.
Ответ написан
@SeptiM
Говорят, что это большой челлендж. Посмотрите по ключевым слова music transcription, polyphonic transcription. Статья на вскидку www.cs.berkeley.edu/~tberg/papers/nips2014.pdf

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

Войдите, чтобы написать ответ

Похожие вопросы