Возможно, слишком поздно, но я автор Aurio и могу вам помочь в этом. Я предполагаю, что вы используете FingerprintGenerator
из пространства имен Aurio.Matching.HaitsmaKalker2002
, но он будет аналогичен другим методам отпечатка пальца из других пространств имен.
Ваша проблема заключается в том, что для отпечатка пальца с настройкой по умолчанию требуется около 3 секунд аудио, это означает, что аудиофайл продолжительностью 2 секунды не даст отпечатка пальца, и поэтому вы не сможете получить соответствие.
По умолчанию отпечаток метода HaitsmaKalker2002
состоит из 256 подпечатков пальцев. Эта длина сконфигурирована в FingerprintStore
, где происходит сопоставление отпечатков пальцев. Суб-отпечатки рассчитываются из срезов (окон), взятых из потока с уменьшенным дискретизацией, с частотой дискретизации 5512. Окно составляет 2048 выборок и занимает каждые 64 выборки. Эти значения задаются в профиле, который используется для настройки FingerprintGenerator
, который извлекает отпечатки пальцев. Вы можете найти указанные значения в DefaultProfile
. При такой конфигурации вам понадобится как минимум 1/5512 * (255 * 64 + 2048) = ~ 3,4 секунды аудио для получения отпечатка пальца. Каждому следующему отпечатку пальца потребуется только 64 дополнительных аудиокарта, поэтому с 4-секундным аудио вы уже получаете 313 отпечатков пальцев, и вероятность совпадения намного выше.
В вашем случае вам необходимо сократить требуемую длину аудио отпечатка пальца, и вы можете сделать это, создав собственный профиль для FingerprintGenerator
(удлините DefaultProfile
или настройте значения конфигурации) или отрегулируйте настройки этапа соответствия в FingerprintStore
. Чтобы сократить минимальное время звука в два раза, вы можете, например, удвойте SampleRate
или половину FrameStep
DefaultProfile
, или уменьшите длину отпечатка пальца на половину или воспользуйтесь комбинацией всех этих возможностей.
// Setup the fingerprint generator
var defaultProfile = FingerprintGenerator.GetProfiles()[0];
defaultProfile.SampleRate = 11025; // Adjust the profile
var generator = new FingerprintGenerator(defaultProfile);
// Create a fingerprint store
var store = new FingerprintStore(defaultProfile);
// Set the fingerprint length to 128 instead of the default 256
store.FingerprintSize = 128;
Другой метод может быть удлинение аудиовхода плюсования молчания, но тогда вы, возможно, придется поднять store.Threshold
, чтобы позволить более высокий предел погрешности (поскольку фактическому аудио полезной нагрузки слишком коротка, и никогда не будете полностью соответствовать в любом месте Вам придется делать внешнюю оболочку извне, потому что этот прецедент в настоящее время невозможен с помощью API Aurio.
Пожалуйста, обратите внимание, что значения по умолчанию выбраны, потому что они приводят к хорошим результатам. Изменение их, не зная, что вы делаете, может привести к множеству ложных срабатываний или промахов, но поскольку ваши входные файлы очень короткие, вам придется попробовать. Я рекомендую попробовать AudioAlign, который в основном представляет собой графический интерфейс вокруг Aurio, где вы можете добавить два тестовых файла и поэкспериментировать с значениями FingerprintSize
и Threshold
очень легко, и он даже графически покажет вам совпадения в аудиофайлах, и вы можете их напрямую прослушать ,
Кстати, запрос на «другую библиотеку» обычно считается вне темы и заставляет вопрос приостанавливать или закрывать вопрос. Я думал об этом, но в случае этого поста главное, почему ваш фрагмент представленного кода не находит соответствия, так что это отлично по теме. Просто будьте осторожны с просьбой о библиотеках. Библиотеки меняются, развиваются и умирают с течением времени. Вот почему такие вопросы не считаются «хорошими» - нет вопроса о том, что вопрос, требующий библиотеки, может быть «полностью удовлетворен». Всегда есть что-то новое или кто-то считает, что еще одна библиотека лучше – quetzalcoatl
Вы проверили, сможет ли fingerprinter найти совпадение для идеального случая? Получите один из этих 40 аудиофайлов и запустите программу с этим файлом в качестве иглы. При отличном вводе любой (рабочий) сервис отпечатка пальца должен возвращать хотя бы одно совпадение. Если он работает на идеальной игле, но не на вашем фактическом входе, то, возможно, это вопрос конфигурации, а не код сам (т. Е. Некоторые пороговые значения или временные окна слишком низкие/высокие и т. Д.). – quetzalcoatl
Спасибо, что ты прав. Я удалил вопрос «другая библиотека». – Fraga