лгоритм просматривает карту нот(список частот, к которым принадлежит нота) и также смотрит амплитуды звучания «кандидата в ноты», если его амплитуда меньше тех, частот, которые появятся на аккорде, то я считаю, что это нота, в противном случае аккорд — это нота.
Могу прогнать, но в след. раз, пока эта штука медленно работает. Объясняю: когда звучит нота, помимо нее звучит еще куча частот, они как правило кратные.
Вот я и ориентируюсь среди кратных нот и их амплитуд. У кратных звуков(они как правило не ноты) амплитуда, как правило, выше.
Естественно, алгоритм иногда промахивается, но на точность поиска это не влияет.
Она и будет медленно работать, до тех пор, пока скорость поиска o(n) от количества файлов. Нужна индексация, как тут laplacian.wordpress.com/2009/01/10/how-shazam-works/ и после первоначального отсеивания можно уже делать более точное сравнение
Алгоритм просматривает карту нот(список частот, к которым принадлежит нота) и также смотрит амплитуды звучания «кандидата в ноты», если его амплитуда меньше тех, частот, которые появятся на аккорде, то я считаю, что это нота, в противном случае аккорд — это нота.
С этим согласен, но это несколько нивелируется подбором материнского вейвлета. В любом случае, жду продолжения, интересно, к чему приведут ваши изыскания.
Возникает вопрос: а как работает, к примеру, SoundHound? Как работает Gracenote?
Это, конечно, несколько разные сервисы, но, если сравнить ваш алгоритм с тем же SoundHound — в чем отличия/преимущества/минусы?
есть отрывок музыкального произведения, есть база музыкальных произведений
А что из себя представляет эта база? Очевидно, оценить преимущество вашего алгоритма поиска на некоей абстрактной базе не выйдет.
А вообще, про вейвлеты было бы намного интересней почитать, не только в плане поиска мелодий, а в принципе, что это и с чем едят, на пальцах, наглядно, а то про них вообще ничего интересного и внятного практически нет, кроме бесполезных для ознакомительных целей нагромождений математических выкладок, и даже те кто обещал не пишут… :C
Чтобы человек узнал мелодию, достаточно информации об относительной высоте соседних нот: вторая нота выше, ниже, или равна по высоте первой. Таким образом, любой музыкальный отрывок, имеющий мелодию (разумеется, произведения типа 4′33″ в данной схеме рассматривать бессмысленно), можно закодировать в виде строки с алфавитом из 3 символов: '>', '<' и '='. Поиск сводится к нахождению подстроки в строке.
P.S. А как Ваш алгоритм справится с поиском отрывка из 4′33″, если анализируемый отрывок и запись в базе сделаны разными пианистами?
Вообще тут с человеком проблема целая есть и она заключается в том, что не все люди могут воспроизвести услышанную мелодию.
Зато человек ритм воспроизводит хорошо, но это уже другая история…
Если ритм рассматривать, то все песни похожи, ибо используют за основу один ритм — альфа-ритм, который кратен сердцебиению, чтобы народ на дискотеках не засыпал.
Я говорю не про ритм, а только про то, что вместо нот можно записывать только относительное изменение их высоты — и этой информации будет достаточно для поиска.
Что касается ритма, то ты глубоко ошибаешься. Я знаю людей, обладающих прекрасным музыкальным слухом, которые не в состоянии правильно воспроизвести ритм мелодии.
Если рассматривать современную российскую попсу — да, ритмы будут похожи. Но исключительно по причине убогости современной эстрады. Советую прослушать «Богемную рапсодию» — её одной достаточно, чтобы понять, насколько разнообразными могут быть ритмы песен.
А ведь в классической музыке ритмов несравнимо больше. Думаю, ни один человек не перепутает ритмы «Танца маленьких лебедей» и первой части «Ленинградской симфонии».
Так я и использую относительные изменения но не частот, а номеров нот, т.к. разные мелодии с разных частот, имеют нелинейную разницу, а если переведем в домен номеров нот, то разница будет линейна. Работать с линейными зависимостями легче.
Ищем мелодию по фрагменту