#algorithm #matlab #signal-processing #audio-processing
#алгоритм #matlab #обработка сигналов #обработка звука
Вопрос:
Кто-нибудь знает, где можно найти алгоритм matlab для определения темпа музыки (в ударах в минуту или какой-либо другой мере)? Я попробовал тот, что с этого сайта: http://www.clear.rice.edu/elec301/Projects01/beat_sync/beatalgo.html Но не дает мне хороших ответов.
Ответ №1:
Определение темпа музыкального сигнала может быть очень сложной задачей. Для простого сигнала, в котором одна нота воспроизводится с фиксированным темпом, возможно, метод, предложенный kol, сработал бы, но, как упоминал Оли Чарльсворт, я не думаю, что он был бы достаточно надежным, чтобы дать вам хорошую оценку темпа для более сложного музыкального сигнала.
Это имеет много общего с музыкальной акустикой (особенно с тем фактом, что частотный состав нот, воспроизводимых музыкальными инструментами, намного сложнее, чем набор синусоидальных волн) и психоакустикой (особенно с тем фактом, что на определение времени начала ноты влияет ее гармоническое наполнение)
Хорошая (хотя, возможно, трудночитаемая в зависимости от вашего фона) ссылка: ftp://wgs.esat.kuleuven.ac.be/sista/bli/scheirer_jasa.pdf
Вам также следует прочитать ответы и комментарии к этому вопросу в DSP: https://dsp.stackexchange.com/questions/386/autocorrelation-in-audio-analysis.
Ответ №2:
Если вам нужно одно число для всей музыкальной дорожки, то вы можете выполнить БПФ и найти наибольший пик в соответствующей полосе частот. Частота пика задаст вам темп.
Комментарии:
1. @OliCharlesworth Я тебе верю, но почему?
2. @OliCharlesworth Я имею в виду, что Филипу нужен общий «музыкальный темп», который, я полагаю, дает основную низкочастотную составляющую спектра мощности. Очень легко отклонить ответ без каких-либо объяснений.
3. Моя интуиция подсказывает мне, что информация в частотной области из БПФ будет настолько размыта, что идентификация значимого пика будет очень маловероятной. Все виды продуктов intermod будут перекрываться. Я могу ошибаться, но я поверю в это, когда увижу… (Я удалю свой отрицательный отзыв, потому что я не могу доказать, что это не сработает, хотя.)
4. @OliCharlesworth Вы можете сгладить спектр, например, вычисляя его для более коротких участков сигнала, а затем усредняя их (это встроенная возможность в Matlab).
5. 1. Хотя это вряд ли сработает, сглаженный FFT — довольно дешевая вещь для вычисления в Matlab, и ее определенно стоит попробовать. И, если уж на то пошло, служит иллюстрацией того, что вашей первой попыткой сделать что-либо (ну, все, что не связано с девушкой) должно быть преобразование Фурье.
Ответ №3:
Я не пробовал этот пакет от Columbia, но, возможно, он соответствовал бы вашим потребностям. В частности, он содержит функцию tempo.m
, которая вычисляет частоту вращения звуковой волны в минуту. Похоже, он доступен по лицензии GPL.
Надеюсь, у вас это сработает!