Восприятие сходства между двумя звуковыми последовательностями
Я хотел бы получить некоторую меру расстояния между двумя звуками. Например, я хочу сравнить звук животного с звуком человека, подражающего этому животному, а затем вернуть оценку того, насколько похожи звуки.
Кажется сложной проблемой. Какой был бы лучший способ приблизиться к нему? Я подумывал выделить несколько функций из аудиосигналов, а затем выполнить эвклидовое расстояние или сходство с косинусом (или что-то в этом роде) по этим функциям. Какие функции можно было бы легко извлечь и использовать для определения различий в восприятии между звуками?
(Я видел что-то о том, как Ahazam использует хэширование, но это похоже на другую проблему, потому что две части звука точно такие же, с добавлением шума. Если в этом случае две части аудио не являются то же самое, они просто перцептивно похожи)
Ответы
Ответ 1
Процесс сравнения набора звуков для сходства называется Content Based Audio Indexing, Retrieval и Fingerprinting в области компьютерных наук.
Один из способов сделать это:
-
Запустите несколько бит обработки сигналов в каждом звуковом файле, чтобы извлечь функции, такие как шаг во времени, частотный спектр, автокорреляция, динамический диапазон, переходные процессы и т.д.
-
Поместите все функции для каждого аудиофайла в многомерный массив и дамп каждого многомерного массива в базу данных
-
Используйте методы оптимизации (например, градиентный спуск), чтобы найти наилучшее соответствие для данного аудиофайла в вашей базе данных, трехмерные данные.
Трюк для этого хорошо работает, какие функции выбрать. Выполнение этого автоматически и получение хороших результатов может быть сложным. Ребята из Pandora делают это очень хорошо, и, на мой взгляд, они имеют лучшее сходство. Они кодируют свои векторы вручную, хотя, заставляя людей слушать музыку и оценивать их разными способами. См. Их Проект "Музыкальный генофонд" и Список атрибутов генома генома для получения дополнительной информации.
Для автоматического измерения расстояния есть несколько проектов, которые делают такие вещи, включая marsysas, MusicBrainz и EchoNest.
Echonest имеет один из простейших API, которые я видел в этом пространстве. Очень легко начать.
Ответ 2
Я бы предложил изучить спектральный анализ. Хотя это не так просто, как вы, скорее всего, хотите, я бы ожидал, что разложение звука на его базовые частоты предоставит некоторые очень полезные данные для анализа. Проверьте ссылка
Ответ 3
Ваш первый шаг, безусловно, будет принимать Fourier Transform (FT) звуковых волн. Если вы выполняете FT по данным по частоте во времени 1 вы сможете сравнить, как часто определенные частоты клавиш попадают в течение шума.
Возможно, вы могли бы также вычесть одну волну из другой, чтобы получить своего рода ступенчатую разностную функцию. Предполагая, что макет-шум следует той же частоте и тенденциям основного тона 2 что и исходный шум, вы можете рассчитать линию наилучшего соответствия точкам разностной функции. Сравнивая линию наилучшего соответствия с линией наилучшего соответствия исходной звуковой волне, вы можете выровнять линию тренда, используемую в качестве основы для сравнения. Конечно, это будет очень слабый метод сравнения.
- 1. hz/ms, возможно? Я не знаком с величиной единицы измерения, с которой мы здесь работаем, я обычно работаю в области фемто- и нанодиапазона.
- 2. До тех пор, пока & forall; & Delta; T, & Delta; Pitch/& Delta; T и & Delta; Frequency/& Delta; T находятся в некоторых допуск x.
- Отредактировано для форматирования и потому, что я фактически забыл закончить полный ответ.