Схожесть восприятия между двумя аудиопоследовательностями - PullRequest
16 голосов
/ 04 июля 2010

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

Это кажется сложной проблемой.Как лучше всего подойти к нему?Я думал извлечь пару признаков из аудиосигналов и затем выполнить евклидово расстояние или косинусное сходство (или что-то в этом роде) для этих функций.Какие функции можно легко извлечь и использовать для определения разницы восприятия между звуками?

(Я видел кое-что о том, как Ahazam использует хеширование, но это выглядело как другая проблема, потому что там два фрагмента аудио абсолютно одинаковы, с добавлением шума. Тогда как в этом случае два фрагмента аудионе одинаковы, они просто похожи на восприятие)

Ответы [ 3 ]

9 голосов
/ 06 июля 2010

Процесс сравнения набора звуков по сходствам называется Content Based Audio Индексирование , Извлечение и Отпечатки пальцев в исследованиях в области компьютерных наук.

Один из способов сделать это:

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

  2. Поместите все функции для каждого аудиофайла в многомерный массив и поместите каждый многомерный массив в базу данных

  3. Используйте методы оптимизации (такие как градиентный спуск ), чтобы найти лучшее соответствие для данного аудиофайла в вашей базе данных многомерных данных.

хитрость, чтобы сделать эту работу хорошо, это то, какие функции выбрать.Делать это автоматически и получать хорошие результаты может быть сложно.Ребята из Pandora делают это очень хорошо, и, на мой взгляд, у них наилучшее сходство.Тем не менее, они кодируют свои векторы вручную, заставляя людей слушать музыку и оценивать их по-разному.См. Их Music Genome Project и Список атрибутов Music Genome Project для получения дополнительной информации.

Для автоматических измерений расстояния есть несколько проектов, которые делают подобные вещи, включая marsysas , MusicBrainz и EchoNest .

В Echonest есть один из самых простых API , которые я видел в этом пространстве.Очень легко начать.

3 голосов
/ 04 июля 2010

Первым вашим шагом, безусловно, будет преобразование Фурье (FT) звуковых волн.Если вы выполните FT для данных относительно частоты с течением времени 1 , вы сможете сравнить частоту попадания определенных ключевых частот в течение шума.

ВозможноВы также можете вычесть одну волну из другой, чтобы получить ступенчатую разностную функцию.Предполагая, что ложный шум повторяет те же тенденции частоты и высоты тона 2 , что и исходный шум, можно рассчитать линию наилучшего соответствия точкам функции разности.Сравнивая линию наилучшего соответствия с линией наилучшего соответствия исходной звуковой волны, вы могли бы усреднить линию тренда, чтобы использовать ее в качестве основы для сравнения.Конечно, это будет очень слабый метод сравнения.

- 1. Гц / мс, возможно?Я не знаком с величиной единицы измерения, с которой здесь работаю, я обычно работаю в диапазоне от фемто до нано.

- 2. До тех пор, пока TΔT, Δ Pitch / ΔT & Δ Частота / ΔT находятся в пределах некоторого допуска x .

- отредактировано для форматирования,и потому что я действительно забыл закончить писать полный ответ.

3 голосов
/ 04 июля 2010

Я бы посоветовал изучить анализ спектра. Хотя это не так просто, как вы, скорее всего, хотите, я ожидаю, что декомпозиция звука на его базовые частоты даст некоторые очень полезные данные для анализа. Проверьте эту ссылку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...