Я хотел бы получить своего рода меру по расстоянию между двумя частями аудио. Например, я хочу сравнить звук животного к звуку человека, имитирующего то животное и затем возвратить счет того, насколько подобный звуки были.
Это походит на трудную проблему. Каков был бы лучший способ приблизиться к нему? Я думал, чтобы извлечь несколько функций из звуковых сигналов и затем сделать Евклидово расстояние или подобие косинуса (или что-то как этот) на тех функциях. Какие функции было бы легко извлечь и полезный для определения перцептивного различия между звуками?
(Я видел что-то о том, как Ahazam использует хеширование, но это походило на другую проблему, потому что там две части аудио являются точно тем же с добавлением шума. Принимая во внимание, что в этом случае две части аудио не являются тем же, они просто перцептивно подобны),
Я бы посоветовал обратиться к спектральному анализу. Хотя это не так просто, как вам, скорее всего, хотелось бы, я ожидаю, что разложение звука на основные частоты даст очень полезные данные для анализа. Посмотрите на эту ссылку
Вашим первым шагом будет выполнение преобразования Фурье (FT) звуковых волн. Если вы выполните FT с данными относительно частоты во времени 1 , вы сможете сравнить, как часто определенные ключевые частоты попадают в течение шума.
Возможно, вы также могли бы вычесть одну волну из другой, чтобы получить своего рода ступенчатую функцию разности. Предполагая, что фиктивный шум следует тем же трендам частоты и высоты тона 2 , что и исходный шум, вы можете вычислить линию наилучшего соответствия точкам функции разности. Сравнивая наиболее подходящую линию с линией наилучшего соответствия исходной звуковой волны, вы можете усреднить линию тренда и использовать ее в качестве основы для сравнения. Конечно, это был бы очень вольный метод сравнения.
- 1. Гц / мс, возможно? Я не знаком с единицей измерения, с которой здесь работают, я обычно работаю в диапазоне от фемто до нанодиапазона.
- 2. Пока ∀ΔT, Δ Шаг / ΔT и Δ Частота / ΔT находятся в пределах некоторого допуска x .
- Отредактировано для форматирования, и потому что я фактически забыл закончить писать полный ответ.
Процесс сравнения набора звуков на предмет сходства называется Content Based Audio Indexing , Retrieval и Fingerprinting в исследования в области информатики.
Один из способов сделать это:
Запустить несколько битов обработки сигнала для каждого аудиофайла для извлечения таких характеристик, как изменение высоты звука во времени, частотный спектр, автокорреляция, динамический диапазон, переходные процессы и т. Д.
Положите все функции для каждого аудиофайла в многомерный массив и выгружать каждый многомерный массив в базу данных
Используйте методы оптимизации (такие как градиентный спуск ), чтобы найти наилучшее соответствие для данного аудио файл в вашей базе многомерных данных.
Уловка, чтобы заставить эту работу работать хорошо, состоит в том, какие функции выбрать. Сделать это автоматически и получить хорошие результаты может быть непросто. Ребята из Pandora справляются с этим очень хорошо, и, на мой взгляд, у них самое лучшее сопоставление схожести.Однако они кодируют свои векторы вручную, заставляя людей слушать музыку и оценивать их по-разному. См. Их Проект музыкального генома и Список атрибутов проекта музыкального генома для получения дополнительной информации.
Для автоматического измерения расстояний существует несколько проектов, которые делают подобные вещи, в том числе marsysas , MusicBrainz и EchoNest .
У Echonest есть один из простейших API , которые я видел в этой области. Начать очень легко.