Это сложная проблема, требующая больше, чем БПФ. Я кратко опишу, как я реализовал обнаружение ударов, когда писал программное обеспечение для профессионального диджейского оборудования.
Прежде всего, вам нужно сократить объем данных, с которыми вы работаете, поскольку в секунду есть только два или три удара, но десятки тысяч выборок. Вам также нужно будет смотреть на разные частотные диапазоны, поскольку некоторые типы музыки несут темп в басовой линии, а другие - в ударных или других инструментах. Поэтому пропустите сигнал через несколько полосовых фильтров (я выбрал 8 фильтров, каждый из которых охватывает одну октаву, от низких до высоких частот), а затем уменьшите частоту каждой полосы, усредняя мощность по нескольким сотням выборок.
Каждые несколько секунд у вас будет около тысячи сэмплов в каждой группе. Ваш следующий инструмент - автокорреляция, чтобы идентифицировать повторяющиеся паттерны в музыке. Пики автокорреляции говорят вам о том, какой удар будет более или менее вероятным; но вам нужно будет составить некоторую эвристику, чтобы сравнить все полосы частот, чтобы найти ритм, в котором вы можете быть уверены, и избежать вводящих в заблуждение синкопов. Если вам удастся это сделать, то у вас будет разумное предположение о темпе, но вы не будете знать, что это за фаза (то есть, когда именно нужно мигать экраном).
Теперь вы можете взглянуть на сглаженную версию аудиоданных для пиков, некоторые из которых, вероятно, соответствуют ритмам. Первоначально, ищите самый сильный пик в течение нескольких секунд и воспринимайте его как слабый. В сочетании с темпом, который вы оценили на первом этапе, вы можете предсказать, когда наступит следующий удар, и измерить, где вы действительно видели что-то похожее на удар, и скорректировать свою оценку, чтобы более точно соответствовать данным. Вы также можете поддерживать уровень достоверности, основываясь на том, насколько хорошо предсказанные биения соответствуют измеренным пикам; если оно падает слишком низко, перезапустите определение удара с нуля.
В этом много деталей, и мне потребовалось несколько недель, чтобы все заработало. Это сложная проблема.
Или для простого эффекта визуализации, вы можете просто обнаружить пики и мигать экраном для каждого; это, вероятно, будет выглядеть достаточно хорошо.