Звуковая библиотека распознавания образцов/код
Я не хочу использовать программное обеспечение для чтения звука. Мне нужно следующее:
- Я записываю несколько (например, 50+) аудиопотоков (записи радиостанций)
- из этих записей, я помету интересные аудиоклипы - их длина колеблется от 2 до 60 секунд - там будет несколько тысяч таких аудиоклипов
Библиотека
- должна иметь возможность находить другие экземпляры одних и тех же аудиоклипов из записанных звуковых потоков.
- следует сообщить о достоверности и использовать дополнительный вход, чтобы в следующий раз распознавание могло улучшиться.
Знаете ли вы о такой библиотеке программного обеспечения? LGPL будет для меня самым ценным, но я могу пойти и на коммерческую лицензию.
Аудиоклипы будут содержать как музыку, так и текст, эффекты или любую их комбинацию. Таким образом, распознавание TEXT не может быть и речи.
Архитектура: С++, С# для клея, CUDA, если возможно.
Ответы
Ответ 1
Я еще не нашел никаких библиотек, но две интересные статьи, которые могут дать вам терминологию и фон для уточнения ваших поисков:
РЕДАКТИРОВАТЬ: поиск "Отпечатки пальцев аудио" попал на страницу реализаций, как с открытым исходным кодом, так и с коммерческой.
Вот описание для аудиопечати.
Ответ 2
То, что вы описываете, это сопоставленный фильтр, и все, что вам нужно, это cross-correlation, которая должна быть частью любой разумной библиотеки DSP.. В зависимости от вашего выбора архитектуры процессора и языка вы даже можете найти векторную библиотеку, которая может выполнять эту операцию более эффективно.
Если вы действительно не заботитесь о производительности, вы можете использовать Python...
$ python
Python 2.6.4 (r264:75706, Dec 7 2009, 18:45:15)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import scipy
>>> interesting_clip = [ 5, 7, 2, 1]
>>> full_stream = [ 1, 5, 7, 2, 1, 4, 3, 2, 4, 7, 1, 2, 2, 5, 1]
>>> correlation = scipy.correlate (full_stream, interesting_clip)
>>> print correlation
[56 79 55 28 41 49 44 53 73 48 28 35]
>>> for offset, value in enumerate(correlation) :
... if (value > 60) :
... print "match at position", offset, "with value of", value
...
match at position 1 with value of 79
match at position 8 with value of 73
Мой порог выше произвольно. Вы должны экспериментально определить, что подходит вам.
Имейте в виду, что чем дольше ваш "интересный клип", тем больше времени потребуется для вычисления корреляции. В то время как более длинные клипы помогут фактическим матчам лучше выделяться из не-матчей, вам, вероятно, не понадобится больше нескольких секунд.
Ответ 3
AudioDB - проект С++ с открытым исходным кодом, который ищет похожие разделы аудио и обрабатывает шумные потоки и может дать вам меру подобия. Его можно запустить как клиент/сервер, но я считаю, что вы можете сделать отдельную программу.
Другие ответы о корреляции dsp являются правильными, но в целом эти алгоритмы dsp хотят сравнить два потока одинаковой длины, которые имеют перекрывающиеся аналогичные части.
Для этого требуется, чтобы он работал на произвольных сегментах потока; для этого и был создан AudioDB. (Одно приложение - найти скрытые ссылки/выборку или вопиющее использование авторских прав.) Я использовал его для поиска звуков, которые были воспроизведены в обратном направлении, и также обнаруживает случай, когда вводятся некоторые изменения шума или речи.
Обратите внимание, что он все еще находится в разработке, даже если даты на главной странице отключены. Я бы подписался на список рассылки и спросил, что такое текущее состояние и как вы можете включить его.
Ответ 4
Вы можете посмотреть эту статью Ли Чун Ван о www.shazam.com.
Это не API, но он дает подробную информацию о том, как их алгоритм был разработан.
Ответ 5
Взгляните на API речи Microsoft (SAPI):
http://msdn.microsoft.com/en-us/library/ee125077%28VS.85%29.aspx
Все остальные требования, которые вы указали, являются в основном деталями реализации, которые вам придется реализовать самостоятельно. Например, поскольку программное обеспечение интерпретирует аудиопотоки, оно может хранить их на сервере SQL с полным индексированием текста... из того, что вы выполняете поиск, чтобы найти похожие/одни и те же аудиоклипы.
Есть, конечно, другие способы реализовать это, и это только одна идея: -)
Ответ 6
Я бы пошел где-то в соответствии с ответом Тима Кригера и использовал простые статистические корреляционные функции, так как вы хотите остаться агностиком контента.
Что касается функций, я бы определенно попробовал MFCC, поскольку он использовался как в обработке речи, так и в распознавании музыки (жанры, песни). Вы можете найти MFCC и множество других аудио-функций, доступных в отличном исходном формате Vamp plugins (или его более высокоуровневый пакет, Sonic Annotator) или, альтернативно, в Marsyas.