Я ежедневно записываю 2-минутную радиопередачу из Интернета. Всегда один и тот же начальный и конечный джингл. Поскольку точное время радиопередачи может варьироваться от более или менее 6 минут, мне нужно записать около 15 минут радио.
Я хочу определить точное время, когда эти джинглы находятся в 15-минутной записи, чтобы я мог извлечь часть аудио, которую хочу.
Я уже запустил приложение C#, в котором я декодирую MP3 в данные PCM и преобразовываю данные PCM в спектрограмму на основе http://www.codeproject.com/KB/audio-video/SoundCatcher.aspx
Я попытался использовать алгоритм кросс-корреляции для данных PCM, но алгоритм очень медленный, около 6 минут с шагом 10 мс, и в некоторых случаях ему не удается найти время начала звонка.
Любые идеи алгоритмов для сравнения двух спектрограмм для совпадения? Или лучший способ найти время начала этого джингла?
Спасибо,
Обновление, извините за задержку
Во-первых, спасибо за все ответы, большинство из которых были актуальными и/или интересными идеями.
Я попытался реализовать алгоритм Shazam, предложенный фонзо. Но не удалось обнаружить пики на спектрограмме. Вот три спектрограммы стартового джингла с трех разных пластинок. Я попробовал AForge.NET с блоб-фильтром (но он не смог идентифицировать пики), чтобы размыть изображение и проверить разницу в высоте, свертки Лапласа, анализ наклона, чтобы обнаружить серию вертикальных полос (но было слишком много ложных положительный)...
Тем временем я попробовал алгоритм Хафа, предложенный Дейвом Аароном Смитом. Где я вычисляю RMS каждого столбца. Да, да, каждый столбец, это O (N * M), но M ‹‹ N (обратите внимание, что столбец составляет около 8 КБ выборки). Так что в целом все не так уж и плохо, все-таки алгоритм занимает около 3 минут, но еще ни разу не подвел.
Я мог бы пойти с этим решением, но если возможно, я бы предпочел Shazam, потому что это O (N) и, вероятно, намного быстрее (и круче). Кто-нибудь из вас имеет представление об алгоритме, который всегда обнаруживает одни и те же точки на этих спектрограммах (не обязательно пики), спасибо за добавление комментария.
Новое обновление
Наконец, я пошел с алгоритмом, описанным выше, я попытался реализовать алгоритм Shazam, но не смог найти правильные пики на спектрограмме, идентифицированные точки не были постоянными от одного звукового файла к другому. Теоретически алгоритм Shazam является решением такой проблемы. Алгоритм Хафа, предложенный Дэйвом Аароном Смитом, оказался более стабильным и эффективным. Я разделил около 400 файлов, и только 20 из них не удалось правильно разделить. Дисковое пространство, когда от 8GB до 1GB.
Спасибо за вашу помощь.