Как выяснить паттерны песни (ритм) с помощью AS3 SoundMixer.computeSpectrum?
Прямо сейчас я работаю над попыткой выяснить паттерны (ритм) песни, чтобы представить их визуально. Так, например, основным ударом песни (барабаны) будет красный квадрат, второстепенные удары (бас) синие круги и т. Д. Таким образом, каждый из них появляется каждый раз, когда звучит их соответствующий ритм.
Я знаю, что в песне может быть много паттернов (битов), и именно поэтому у меня проблемы. Прямо сейчас я пытаюсь получить только основные удары. Я пытаюсь решить это так:
я использую SoundMixer.computeSpectrum
чтобы получить ByteArray
состоит из интенсивности / частоты спец. это ByteArray
это кормить каждые 1/10 секунды. Я пытаюсь сгруппировать аналогичные данные интенсивности / частоты в словарях, чтобы выяснить паттерны песни.
Я получаю шаблоны по:
- Семьи (вся спецификация int/freq каждая 1/10): Однако повторять семью в песне очень редко. Практически никогда не бывает.
- Член семьи (индивидуумы int/freq ids): члены семьи обычно повторяются, но в одиночку они бесполезны.
- Twin Family Brothers (группа членов семьи, которая всегда звучит вместе): Это работает, но я получаю МНОГО групп близнецов, поэтому очень сложно их проанализировать и выяснить, какие из них являются основными.
Знаете ли вы, есть ли лучший способ выяснить паттерны песни (ритм), используя AS3 SoundMixer.computeSpectrum
или любой другой объект / рамки / API?
П.Д.: У меня нет передовой теории музыки.
1 ответ
Julapy опубликовал демо-версию и код, который обнаруживает очевидный удар. Julapy собирает энергию от computeSpectrum. Julapy агрегирует в широкой полосе частот, а не в узких полосах (члены семьи): http://www.julapy.com/blog/2007/12/30/beat-detection-in-flash/
Честно говоря, я никогда не кодировал алгоритмы ниже, но на странице 2 статьи "Алгоритмы обнаружения ударов" предлагается оценивать удары в минуту, оценивая периоды одной и той же полосы частот. Похоже, вы могли бы расширить подход Юлапи: http://archive.gamedev.net/archive/reference/programming/features/beatdetection/page2.html
Кстати, демонстрация звукового анализатора и код в платформе HYPE также визуализируют computeSpectrum новыми способами. Хотя эта проблема не решается, возможно, стоит прочитать код, связанный с computeSpectrum: http://www.hypeframework.org/02_examples/soundanalyzer/content/01_soundanalyzer/