Алгоритмы, дискретная математика и пр.'s Journal (original) (raw)

7:12p

Pitch detection Хочу сделать программульку, которая бы анализировала музыкальный файл и вываливала бы наружу развертку с нотами от времени, чтобы эдакий примитивный нотный лист (точнее рулон:) получался.

Первые проблемы:

1. Там могут быть звуки нескольких нот одновременно (аккорд, несколько голосов/инструментов). Совсем в лоб не получается. Нужно опознать каждую в присутствие других. Это наводит мысль на FFT или что-то подобное.

2. Более того, звуки многих нот имеют естесственные гармоники (колеблющаяся струна, резонатор). Нужна некая логика чтобы эти гармоники опознать и проигнорировать, оставив только основной тон. Или какое-то "волшебное" средство. А некоторые ноты не имеют гармоник (или такой инструмент особый или у него где-то фильтр). Посмотрел HPS Algorithm - подкупает общностью и на словах выглядит просто, а на деле просто так не шибко работает на чем-то кроме

сферического коня

одной ноты с гармониками - опять же нужна какая-то логика или нечто еще более общее, чем предложенный там алгоритм.

3. Похоже, что не хватает разрешения или временного или частотного или обоих, если просто брать FFT на кусочках в сколько-то ms. Например, низкие ноты E2 и ближайшая к ней F2 очень близки по частоте - 82.4 и 87.3 Гц соответственно. Если увеличиваю длину FFT, то вытаскиваю низкие частоты, но теряю короткие ноты (порядка 10 мс) целиком. И назад - при более коротком FFT, неверно определяю ноты низкой частоты. Вроде как это примерно и ожидается, если делать 4096 точек на файле с дискретизацией 44100 Гц (~10 мс и ~10 Гц). Поглядел в вейвлеты, но пока не сообразил, есть ли в них счастье, и что к чему. Может и есть, ведь можно же действительно пройтись FFT разной длины несколько раз чтобы и время и частоту поймать лучше. Еще в мозгу бродят какие-то мысли по поводу предобработки (искажения) сигнала чтобы попытаться разделить низкие частоты. Вообще, я удивляюсь этому - профессиональные музыканты-то как-то справляются с подобными задачами без компьютера. Или я чего-то не то делаю?

Какие будут идеи у публики? Особенно в данный момент интересует п.3.