Вопрос

Мне не нужна программа для преобразования звука в текст.Мне нужно следующее:

  • Запишу несколько (скажем 50+) аудиопотоков (записей радиостанций)
  • из этих записей я отмечу интересные аудиоклипы - их длина от 2 до 60 секунд - таких аудиоклипов будет несколько тысяч
  • библиотека должна иметь возможность находить другие экземпляры тех же аудиоклипов из записанных звуковых потоков.
  • необходимо сообщить о факторе доверия и предоставить дополнительные данные, чтобы в следующий раз распознавание могло работать лучше.

Знаете ли вы о такой библиотеке программного обеспечения?LGPL был бы для меня наиболее ценным, но я также могу воспользоваться коммерческой лицензией.

Аудиоклипы будут содержать музыку, текст, эффекты или любую их комбинацию.Таким образом, о распознавании ТЕКСТА не может быть и речи.

Архитектура:c++, C# для клея, CUDA, если возможно.

Это было полезно?

Решение

Я не нашел ни одной библиотеки (пока), но нашел две интересные статьи, которые могут дать вам терминологию и информацию для уточнения поиска:

РЕДАКТИРОВАТЬ:Поиск по запросу «Аудио отпечатки пальцев» привел к странице реализаций, как с открытым исходным кодом, так и коммерческих.

Вот введение в дактилоскопию аудио

Другие советы

То, что вы описываете, это согласованный фильтр и все, что вам нужно, это взаимная корреляция функция, которая должна быть частью любой разумной библиотеки 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

Мой порог выше произволен.Вам следует экспериментальным путем определить, что подойдет именно вам.

Имейте в виду, что чем длиннее ваш «интересный клип», тем больше времени потребуется на вычисление корреляции.Хотя более длинные клипы помогут отличить реальные совпадения от несовпадений, вам, вероятно, не понадобится больше нескольких секунд.

АудиодБД — это проект C++ с открытым исходным кодом, который ищет похожие фрагменты аудио, обрабатывает шумные потоки и может дать вам некоторую степень сходства.Его можно запускать как клиент/сервер, но я считаю, что вы можете создать и отдельную программу.
Другие ответы о корреляции DSP в некоторой степени верны, но в целом эти алгоритмы DSP хотят сравнить два потока одинаковой длины, у которых одинаковые части перекрываются.
То, что вам нужно, требует, чтобы он работал с произвольными сегментами потока;именно для этого и был создан AudioDB.(Одно из приложений — поиск скрытых отсылок/семплов или явного нарушения авторских прав.) Я использовал его для поиска звуков, которые воспроизводились задом наперед, а также он обнаруживает случаи, когда вводятся некоторые шумы или изменения речи.
Обратите внимание, что он все еще находится в стадии разработки, хотя даты на главной странице, похоже, не совпадают.Я бы подписался на список рассылки и спросил бы, каково текущее состояние и как вы можете его включить.

Возможно, вы захотите посмотреть Эта бумага Ли-Чун Ван относительно www.shazam.com.

Это не API, но он дает подробную информацию о том, как был разработан их алгоритм.

Взгляните на Microsoft Speech API (SAPI):
http://msdn.microsoft.com/en-us/library/ee125077%28VS.85%29.aspx

Все остальные требования, которые вы перечислили, представляют собой, по сути, детали реализации, которые вам придется реализовать самостоятельно.Например, поскольку программное обеспечение интерпретирует аудиопотоки, оно может сохранять их на SQL-сервере с полнотекстовой индексацией...исходя из этого вы выполняете поиск, чтобы найти похожие/такие же аудиоклипы.

Конечно, есть и другие способы реализовать это, и это всего лишь одна идея :-)

Я бы пошел куда-нибудь в соответствии с ответом Тима Крайгера и использовал простые статистические корреляционные функции, поскольку вы хотите оставаться независимым от контента.

Что касается функций, я бы определенно попробовал MFCC, поскольку он используется как для обработки речи, так и для распознавания музыки (жанры, песни).Вы можете найти MFCC и множество других аудиофункций, доступных в превосходном открытом исходном коде. Плагины вампа (или его более высокоуровневый пакет, программа под названием Звуковой аннотатор) или, альтернативно, в Марсий рамки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top