Измените конфигурацию звукового отпечатка пальца, чтобы он соответствовал очень небольшой части звука во многих записях - PullRequest
0 голосов
/ 18 июня 2020

Проблема

Наш клиент запросил инструмент для определения того, используются ли их звуковые эффекты / звуки как часть других игр / библиотек. Их звуковые эффекты имеют длину около 200-500 мс.

Они уже получили более 50000 звуковых эффектов (разной длины), которые они хотят проверить.

Звуковые эффекты, которые мы пытаемся обнаружить, будут быть практически идентичным по звуку, с небольшой потерей данных из-за преобразования из wav в mp3. SFX можно использовать как часть более длинного звука. Например, они уже видели, как звуковые эффекты длительностью около 300 мс используются в середине 5-секундных звуковых эффектов другой игры.

То, что мы уже пробовали

Мы пробовали библиотеки, такие как dejavu (Python) и musicg (Java), которые используют отпечатки пальцев, но по умолчанию отпечатки пальцев не подходят для очень маленьких звуковых образцов, они, похоже, дают много ложных срабатываний.

Что мы ищем:

Мы больше всего довольны API musicg. Но мы изо всех сил пытаемся найти правильную конфигурацию, чтобы с высокой точностью сопоставить небольшую часть звуков. Мы хотели бы получить совет о том, как настроить musicg, чтобы он мог обнаруживать фрагменты длиной ~ 250 мс?

private int numRobustPointsPerFrame=4;  // number of points in each frame, i.e. top 4 intensities in fingerprint
private int sampleSizePerFrame=2048;    // number of audio samples in a frame, it is suggested to be the FFT Size
private int overlapFactor=4;    // 8 means each move 1/8 nSample length. 1 means no overlap, better 1,2,4,8 ... 32
private int numFilterBanks=4;

private int upperBoundedFrequency=1500; // low pass
private int lowerBoundedFrequency=400;  // high pass
private int fps=5;  // in order to have 5fps with 2048 sampleSizePerFrame, wave's sample rate need to be 10240 (sampleSizePerFrame*fps)
private int sampleRate=sampleSizePerFrame*fps;  // the audio's sample rate needed to resample to this in order to fit the sampleSizePerFrame and fps
private int numFramesInOneSecond=overlapFactor*fps; // since the overlap factor affects the actual number of fps, so this value is used to evaluate how many frames in one second eventually  

private int refMaxActivePairs=1;    // max. active pairs per anchor point for reference songs
private int sampleMaxActivePairs=10;    // max. active pairs per anchor point for sample clip
private int numAnchorPointsPerInterval=10;
private int anchorPointsIntervalLength=4;   // in frames (5fps,4 overlap per second)
private int maxTargetZoneDistance=4;    // in frame (5fps,4 overlap per second)

private int numFrequencyUnits=(upperBoundedFrequency-lowerBoundedFrequency+1)/fps+1;    // num frequency units
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...