Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.156.140] |
|
Сообщ.
#1
,
|
|
|
Меня попросили написать программу, которая в коллекциях музыки определяла бы темп песни (быстрая, средняя, быстрая или хотя бы быстрая и медленная-средняя) и нумеровала бы названия песен так, чтобы при воспроизведении темпы песен чередовались. Существует ли алгоритм обработки, который бы определял темп песни (хотя бы примерно)?
|
Сообщ.
#2
,
|
|
|
Формально, теория вроде бы такова: раскладываем мелодию на "спектр", и чем больше там высоких частот, тем мелодия-песня является быстрее.
|
Сообщ.
#3
,
|
|
|
2-минуты поиска и вот тут описание алгоритм:
http://elib.sfu-kras.ru/bitstream/handle/2....pdf?sequence=1 Я бы сделал немного по другому. Строим огибающую для чего скользящем окном по 20 отсчётам ищем максимум. Потом сглаживаем таким же окном в 20 отсчётов. Потом приравниваем 0 всё, что меньше определенного порога. Затем численная производная и считаем количество переходов через 0. Получаем количество ударов в минуту. |
Сообщ.
#4
,
|
|
|
Цитата Славян @ Я в теории музыки не силён, но как мне видится, ритм обычно задаётся как раз низкими частотами - именно там работают задающие ритм барабаны, ритм-гитары и т.п. А высокие частоты часто играются почти не меняя громкости. Хотя, возможно, есть корреляция между темпом и использованием частот.чем больше там высоких частот, тем мелодия-песня является быстрее. Цитата Pavia @ Только, наверно, лучше брать сглаженное значение мощности. Можно окном покороче искать локальные максимумы, а потом отбирать максимумы за некоторое разумное время. И бы взял окно размером в 25-50 мс. Период следования таких максимумов вроде как соответствует темпу.Строим огибающую для чего скользящем окном по 20 отсчётам ищем максимум. Хотя наверно лучше анализировать не саму мощность, а её производную, м.б. по частотам. |
Сообщ.
#5
,
|
|
|
Если ограничить музыку только современными эстрадными жанрами (рок-поп-электронная...), где по умолчанию присутствуют более-менее стандартные барабаны и бас, то можно искать периодичность пульсации частот в диапазоне 60-70 Гц (бас-бочка), это и будет темпом. Но даже тут не всё однозначно - при одном и том же темпе (по бас-бочке) вальс или блюз могут казаться быстрыми, а рок-н-ролл медленным.
|
Сообщ.
#6
,
|
|
|
Слишком все сложно. Наверное, браться за эту задачу не буду.
|
Сообщ.
#7
,
|
|
|
Алгоритм, конечно, существует. Всё это гуглится. И находится много всего. К примеру:
http://archive.gamedev.net/archive/referen...tion/index.html – тут теория на инглише. https://github.com/dlepaux/realtime-bpm-analyzer – ну здесь придётся смотреть код (либо прям его и взять). https://qna.habr.com/q/692507 – тут некто расписал алгоритм. https://qarchive.ru/73957_kak_opredelit__bpm_pesni_v_php – ??? Я не читал описанные выше ссылки, но задача может быть немного сложнее, чем кажется. Одно дело, когда трек ритмичный, другое, когда он насыщен синкопами или не имеет баса (классика, скажем). Так что, тут навскидку не скажешь |