c # AudioFingerprinting и хеширование с учетом локальных особенностей - PullRequest
3 голосов
/ 27 января 2012

Я уже встречал сообщения об этом, но на самом деле ничто не отвечает на вопрос.

В процессе дактилоскопии я создаю набор записей, который имеет 5 целых чисел. Например: 33,42,88,121,194

Они соответствуют частотам, которые имеют наибольшую величину для определенного образца музыки. Например: для 30 мс аудиосэмпла у меня есть сегменты следующих частот:

0-40

40-80

80-120

120-180

180-250

Я пытаюсь создать хеш (прощающий), который, возможно, создаст тот же хеш для 33,42,88,121,194, как, скажем,

33,43,88,122,195

там, где есть небольшие различия в частотах, формируется аналогичный хэш.

1-й выключен этот LSH? как я прочитал, что это лучше всего для Audio Fingerprinting.

Если нет, может ли кто-нибудь предоставить psuedocode или c # для функции, которая может делать то, что я ищу? Я читал о реализациях LSH, Matlab и Perl, но я не понимаю их, поэтому размещение ссылки на них не очень мне поможет.

Еще раз спасибо!

1 Ответ

0 голосов
/ 01 февраля 2012

Это может быть дубликатом этого: Сравните две спектограммы, чтобы найти смещение, в котором они соответствуют алгоритму . Похоже, вы пытаетесь создать гистограмму для приблизительного распределения пиков в образец. Есть несколько способов сделать это, другой «пример» здесь: Сравните две спектрограммы, чтобы найти смещение, где они соответствуют алгоритму

Один из способов сделать это - использовать быстрое преобразование Фурье данных пиков и их распределение (по времени), чтобы получить приблизительную эквивалентность образца в дистиллированной форме. Для этого вы делаете что-то похожее на:

  1. Разделите образец на несколько отдельных частей (скажем, 1 с)
  2. Для каждой части образца разработайте отпечаток, который приблизительно соответствует образцу (скажем, взяв 5-7 высоких и низких пиков, нормализуя их, а затем хешируя их
  3. Теперь вы можете хранить каждый отпечаток пальца отдельно (в коллекции) или выполнить преобразование последовательности, чтобы сгенерировать один отпечаток пальца в зависимости от ваших потребностей. В большинстве случаев вы просто добавляете последовательности вместе, чтобы получить линейный отпечаток с интервалом в 1 секунду.

Чтобы сравнить отпечаток пальца, вы запускаете тот же процесс во втором примере, а затем используете алгоритм сравнения различий, чтобы сравнить их, используя некоторый «пух», чтобы определить, насколько они близки. Вам нужно будет сравнить отпечатки пальцев по двум измерениям, порядок дискретных отпечатков пальцев, а также общую разницу в каждом образце.

Эта статья о создании грубого Java-эквивалента Shazaam была опубликована некоторое время назад: http://www.redcode.nl/blog/2010/06/creating-shazam-in-java/ и может быть вам полезна.

...