На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование звука"
0) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с записью, обработкой, воспроизведением звука. Перед созданием темы подумайте, не будет ли она уместнее в разделах Разработка и тестирование программ, Наши исходники, а особенно Разовые заказы и подработки
1) На Раздел распространяются все Правила форума.Огромная просьба с ними внимательно ознакомиться.
2) Запрещается давать бессмысленные ответы вроде: "Снеси Мастдай", "ХП рулит", "Поставь Линукс" и т.д.
3) Запрещается создавать темы, в которых Вы намереваетесь получить ссылку на кряки, серийники и т.п. Также запрещено любое обсуждение p2p (peer-to-peer) сетей (BitTorrent, eDonkey и т.д.).
4) Реклама всякого рода пресекается беспощадно.
5) Используйте тэг [CODE] для выделения кода программы (непременно с указанием языка программирования - выбрать из списка. В противном случае бессмысленно!). Уважайте тех, кто будет читать ваш код!
6) Если решение вашей проблемы найдено, то не забываем помечать тему специальной функцией "Вопрос решён". Вам всего лишь требуется при написании последнего ответа поставить одну единственную галочку прямо над формой ответа.
7) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе

8) Если не прикрепляются/не скачиваются файлы, читаем Не прикрепляется / не скачивается файл. Любые обсуждения в данном разделе проблем с приложением файлов считаются оффтопиком! Со всеми вытекающими.

9) NEW! Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно. Попытки накрутки количества тематических сообщений за счёт поднятия древних неактуальных тем ("некрофилия") будут наказываться по велению левой пятки модераторского состава (см. пп.12, 13 Правил)



Нарушение Правил может повлечь наказание со стороны модераторов.



user posted imageFAQ Раздела user posted imageПоиск в Разделе user posted imageMSDN Library Online | Ваше мнение о модераторах: user posted imageBarazuk user posted imageRikkie
  
> Алгоритм определения темпа песен
    Меня попросили написать программу, которая в коллекциях музыки определяла бы темп песни (быстрая, средняя, быстрая или хотя бы быстрая и медленная-средняя) и нумеровала бы названия песен так, чтобы при воспроизведении темпы песен чередовались. Существует ли алгоритм обработки, который бы определял темп песни (хотя бы примерно)?
      Формально, теория вроде бы такова: раскладываем мелодию на "спектр", и чем больше там высоких частот, тем мелодия-песня является быстрее.
        2-минуты поиска и вот тут описание алгоритм:
        http://elib.sfu-kras.ru/bitstream/handle/2....pdf?sequence=1

        Я бы сделал немного по другому. Строим огибающую для чего скользящем окном по 20 отсчётам ищем максимум. Потом сглаживаем таким же окном в 20 отсчётов. Потом приравниваем 0 всё, что меньше определенного порога.
        Затем численная производная и считаем количество переходов через 0. Получаем количество ударов в минуту.
          Цитата Славян @
          чем больше там высоких частот, тем мелодия-песня является быстрее.
          Я в теории музыки не силён, но как мне видится, ритм обычно задаётся как раз низкими частотами - именно там работают задающие ритм барабаны, ритм-гитары и т.п. А высокие частоты часто играются почти не меняя громкости. Хотя, возможно, есть корреляция между темпом и использованием частот.
          Цитата Pavia @
          Строим огибающую для чего скользящем окном по 20 отсчётам ищем максимум.
          Только, наверно, лучше брать сглаженное значение мощности. Можно окном покороче искать локальные максимумы, а потом отбирать максимумы за некоторое разумное время. И бы взял окно размером в 25-50 мс. Период следования таких максимумов вроде как соответствует темпу.
          Хотя наверно лучше анализировать не саму мощность, а её производную, м.б. по частотам.
            Если ограничить музыку только современными эстрадными жанрами (рок-поп-электронная...), где по умолчанию присутствуют более-менее стандартные барабаны и бас, то можно искать периодичность пульсации частот в диапазоне 60-70 Гц (бас-бочка), это и будет темпом. Но даже тут не всё однозначно - при одном и том же темпе (по бас-бочке) вальс или блюз могут казаться быстрыми, а рок-н-ролл медленным.
              Слишком все сложно. Наверное, браться за эту задачу не буду.
                Алгоритм, конечно, существует. Всё это гуглится. И находится много всего. К примеру:
                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 – ???

                Я не читал описанные выше ссылки, но задача может быть немного сложнее, чем кажется.
                Одно дело, когда трек ритмичный, другое, когда он насыщен синкопами или не имеет баса (классика, скажем).
                Так что, тут навскидку не скажешь :)
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0244 ]   [ 15 queries used ]   [ Generated: 28.03.24, 13:42 GMT ]