Проверка файлов .wav на сходство

Я пытаюсь сравнить файлы .wav на предмет сходства. Я использовал для этого библиотеку Google Musicg, но у меня плохое решение для подобных звуков. Я сравниваю звук двух автомобильных двигателей из одной и той же машины, и записи звучат очень похоже для человека, но я получаю баллы сходства отпечатков пальцев, такие как 0,012468828. Запись ведется с микрофона.

В чем проблема, что я получаю такие плохие оценки?

Я использую:

Wave wave = new Wave("wav1.wav");
Wave wave1 = new Wave("wav4.wav");
FingerprintSimilarity fingerprintSimilarity = wave.getFingerprintSimilarity(wave1);
float score = fingerprintSimilarity.getScore();
float similarity = fingerprintSimilarity.getSimilarity();
System.out.println("Similar sound :"+ "Score : " + score + "\n  Similarity : "+ similarity);

Моя цель - создать программу, которая может найти модель автомобиля по звуку его двигателя.

Есть ли другие библиотеки, которые работают лучше, или это проблема аудио-отпечатков пальцев?


person Kingalione    schedule 12.02.2015    source источник


Ответы (2)


Как следует из названий, библиотека, которую вы используете, разработана для анализа музыки. Мера сходства заключается в попытке найти «отпечатки пальцев», т. е. отличительные фрагменты звука, в то время как звук мотора очень монотонный, я предполагаю, что алгоритм в конечном итоге находит действительно странные фрагменты и сравнивает их — этот сценарий вряд ли даст вам хорошие результаты. .

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

person Alex Nevidomsky    schedule 12.02.2015
comment
Моя цель - создать программу, которая может найти модель автомобиля по звуку его двигателя. Я думал, что это будет возможно с отпечатками пальцев. Сначала я попробовал это с музыкой, которая отлично работает, но мне не нужно анализировать музыку. Только звуки мотора. - person Kingalione; 13.02.2015
comment
Тогда я бы посоветовал вам взглянуть на среднюю форму волны одного моторного удара — ее можно описать с точки зрения формы или (лучше) спектральных свойств, но уж точно не музыкальных отпечатков пальцев. - person Alex Nevidomsky; 13.02.2015
comment
Как получить или создать усредненную форму сигнала? Я не совсем понял, что вы имеете в виду. - person Kingalione; 13.02.2015
comment
Шум двигателя в первом приближении представляет собой чистый низкий звук, т.е. синусоиду. Затем вместо плавной волны она становится странной формой, которая все еще повторяется снова и снова. Это было бы вторым, все еще очень простым, приближением звука. Это то, что я имел в виду. Однако это все еще очень упрощенно. - person Alex Nevidomsky; 13.02.2015
comment
Я думаю, что эта модель уже сможет отличить 4-цилиндровый двигатель от 8-цилиндрового. Но я предполагаю, что с изменением оборотов двигателя форма начнет меняться - тогда вы хотите иметь возможность выполнять работу на любых оборотах или только на холостых? - person Alex Nevidomsky; 13.02.2015
comment
Лучшей моделью будет попытка рассчитать, как звук источника (звук взрыва в цилиндрах, щелканье клапанов и, возможно, еще несколько источников) трансформируется спектрально, когда он проходит через всю систему, тогда модель останется верной на разных оборотах. скорости. - person Alex Nevidomsky; 13.02.2015
comment
Итак, чтобы начать эксперименты, я сначала научился обрабатывать звук, чтобы найти паттерн, который повторяется примерно 17 раз в секунду, а затем создать набор таких паттернов и проанализировать их, используя какой-нибудь хороший инструмент визуальной обработки звука. Общее правило таково: если вы не можете сделать что-то вручную (скажем, классифицировать звук, который вам кто-то дал), маловероятно, что вы сможете создать программу, которая сделает это за вас каким-то волшебным автоматическим способом. - person Alex Nevidomsky; 13.02.2015
comment
Конечно, это не единственный возможный подход. Другой способ: 1) вычислить спектр мощности или аналогичную характеристику звука и 2) обучить классификатор результату. Алгоритмы для обоих шагов были бы легко доступны. - person Alex Nevidomsky; 13.02.2015

Вы должны основываться на отпечатках пальцев.

Однако вам следует сделать следующее:

  1. Получить данные
  2. Получить аннотацию данных (какой звук принадлежит какому двигателю)
  3. Извлечение аудиофункций из данных
  4. Обработка данных для устранения избыточности
  5. Разработать классификационную модель
  6. Оценить модель
  7. Оцените, какие функции лучше всего подходят для вашей проблемы
  8. Реализовать модель в приложении

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

P.S. Для вышеуказанных шагов вы можете использовать MARSYS, JAudio, Sonic Visualizer и MIRToolbox вместе с WEKA.

person Xxxo    schedule 14.02.2015