Алгоритм обнаружения биений

#c# #unity3d #fft #beat-detection

#c# #unity3d #БПФ #обнаружение биений

Вопрос:

В настоящее время я работаю над идеей для игры, которая у меня есть, которая включает в себя определение биений. Движок, с которым я работаю, — Unity, и у меня никогда не было опыта работы со звуком, с точки зрения кодирования, так что будьте осторожны 🙂

Я просмотрел несколько статей и протестировал несколько алгоритмов, включая некоторые из моих собственных, но ни один из них не был действительно успешным или достаточно точным, и я чувствую, что все это время что-то не так.

В частности, я попытался реализовать идею, представленную здесь: http://archive.gamedev.net/archive/reference/programming/features/beatdetection/index.html

но с небольшим успехом я все еще думаю, что я что-то пропускаю, и я не могу точно определить это.

Если бы кто-нибудь мог дать объяснение о том, как создать действительно точный детектор биений, я был бы очень благодарен.

РЕДАКТИРОВАТЬ: некоторые люди были смущены тем, с чем у меня возникли проблемы. Вот моя последняя попытка обнаружения биений, я все еще не понимаю, почему это так неточно: http://pastebin.com/BD8y9tfz

в этом я использовал уравнение (R1) в ссылке, которую я опубликовал выше, чтобы вычислить мгновенную энергию из 1024 отсчетов, которые я взял, а затем я использовал (R3) для вычисления локальной средней звуковой энергии из буфера, содержащего все предыдущие мгновенные вычисления энергии, затем я проверил, есть ли значительное повышение в мгновенной энергии по сравнению со средней локальной звуковой энергией, если есть, это означает, что есть ритм, если его нет, программа продолжается в обычном режиме.

(глупая система репутации не позволяет мне размещать ссылки и картинки):).

Редактирование 2: добавлена реализация для R4, R5 и R6, которая все еще не работает. добавлено немного отладки, и по какой-то причине константа смехотворно мала, такие числа, как:

 Constant: -103416
  

и Constant: -54793.28 я понятия не имею, почему я получаю эти цифры, любая помощь?

Комментарии:

1. Просто короткое примечание: это очень сложная задача, если только вы не решитесь на какой-то обман, который должен был бы использовать то, что вы знаете об источниках звука, которые вы будете использовать. Возможно, вы захотите начать читать анализ Фурье..

2. сложный и слишком широкий вопрос для stackoverflow

3. @LearnCocos2D Что именно вам нужно, чтобы я расширил? Обнаружение биений — довольно последовательная тема, вариантов не так уж много, просто базовая тема слишком сложна для понимания. Скажите мне, что я прошу слишком широко, я мог бы немного сузить его.

4. Многие алгоритмы оценки биений / bpm требуют либо значительной тонкой настройки, либо вручную (что требует серьезного знания внутренних компонентов алгоритма), либо с помощью машинного обучения. Попробуйте прочитать некоторые исследовательские работы в MIREX / Music-IR.

5. @CakeToppings вопрос «как создать точный детектор биений» оставляет все открытым, это широкий вопрос в том же смысле, что и «как создать игру в 3 матча?». Возможно, вы захотите объяснить, где именно в вашей реализации возникают проблемы, например: «Я пропускаю биения малой громкости с помощью этого алгоритма». Дело в том, что вопрос должен касаться проблемы в вашем коде, а не общего подхода / решения, если тема такая же сложная и почти научная, как обнаружение биений.