У меня есть две аудиозаписи одного и того же сигнала с двух разных микрофонов (например, в формате WAV), но одна из них записана с задержкой, например, в несколько секунд.
Такую задержку легко определить визуально при просмотре этих сигналов в каком-либо средстве просмотра осциллограмм, то есть просто обнаружив первый видимый пик в каждом сигнале и убедившись, что они одинаковой формы:
(источник: greycat. ru )
А как это сделать программно - узнать, что это за задержка (t)? Два оцифрованных сигнала немного отличаются (потому что микрофоны разные, находились в разных положениях из-за настроек АЦП и т. Д.).
Я немного покопался и обнаружил, что эта проблема обычно называется "оценкой временной задержки" и у него есть множество подходов к этому - например, один из них .
Но есть ли какие-нибудь простые и готовые решения, такие как утилита командной строки, библиотека или простой алгоритм? ?
Заключение : Я не нашел простой реализации и сам сделал простую утилиту командной строки, доступную по адресу https://bitbucket.org/GreyCat/calc-sound-delay ( Под лицензией GPLv3). Он реализует очень простой алгоритм поиска максимума, описанный в Википедии .