Тема: программка
Чтобы оценить ровность своеих двоек и парадиддлов написал небольшую программу. Если кому-то покажется полезной -- пользуйтесь на здоровье.
Выглядит она примерно так: ссылка
Звуковой сигнал снимается с Default Recording Device (источник и уровень сигнала выбирается в системном миксере). В моем случае это был микрофон гарнитуры, привязанный к кадушке малого барабана. Далее детектируются удары (пока довольно примитивным образом) и вычисляются интервалы между ними. bpm -- кол-во ударов в минуту по последнему интервалу. dev -- стандартное отклонение 8-ми последних интервалов в сотых долях секунды. Нижний график -- это-же самое dev.
В общем, барабаним и стремимся держать bpm ровнее и dev меньше 1
Скачать можно отсюда: ссылка
Для работы программы требуется DirectX 9.0 или выше, тестировалась под XP и Vista.
Развивать ее дальше пока не планирую (ибо лень), разве что когда-нибудь добавится анализ громкости ударов. Так что просьба от запросов новых features воздержаться :)
приложению не удалось запуститься, поскольку d3dx9_32.dll не был найден.
Директ икс у мя стоит.
}|{a6a, респект, спасибо! Очень интересная вещь!
Бесплатный драмометр :)))
Чуствительность только маловата для пэда. Приходится микрофон прям на ризинку ложить. В настройках усиление микрофона включено.
Признавайтесь, у кого какой минимальный dev :) У меня меньше 1,5 не получалось :( Видать, совсем кривой стал, надо возращаца к стик контролу с метрономом :) А скорость правой рукой максимум 500 с чем-то была, левой - 460 :) Почему-то, если сыграть двумя однавременно, программа 1000 не показывает :)
Своими силами мне удалось увидеть циферки в районе 0,7-0,8, однако большую часть времени я держусь в районе 1,5-2, причём даже 2 мне субъективно на слух кажется ровным. Потом я решил проверить эту программку с помощью метронома - dev колебался в районе 0,1-0,2. :)
У меня такие пожелание:
1) Сделать масштабирование окна и цифр, т.е чтобы можно было растягивать окно и смотреть издалека.
2) Не помешал бы регулятор чувствительности срабатывания порога, мне тоже микрофон пришлось ставить буквально вплотную.
Спасибо за программу.
Жаба, как говориться, респект тебе и уважуха.
ок, дело это нехитрое, сделал окно растягиваемым / максимизируемым
уровень порога можно изменять кнопками + и - (рисуется на графике серой линией)
его можно задать также при старте из командной строки или в ярлыке на программу
например: [ваш путь]RhythmAnalyzer.exe 50
задает уровень порога 50% ( можно ~ от 2 до 98 )
версия 1.1: ссылка
dll можно положить в ту-же папку что и программа
а можно и в C:WINDOWSSYSTEM32
или поставь последнюю версию DirectX
Хорошо бы сделать так, что бы после определенного промежутка времени, программа выдавала среднее значение Bpm и dev, например отзанимался минуту, посмотрел - средний тем 320, дев - 2.2 (к примеру).
Надо ещё заставить гитаристов с этой прогой заниматься :)
Очень полезная штука, т.к. когда сам играешь, может казаться, что ровно и это может быть не совсем правда :) А программа всё покажет
версия 1.2: ссылка
во втором столбце показываются значения, усредненные по 1024 последним интервалам (1.5 - 2 минуты занятий)
deviation (отклонение) по такому большому массиву может накопиться довольно большое -- м.б. несколько десятков
при паузе 5 сек. вся статистика сбрасывается
Жаба,ты крут! интересно,во что првратится эта прога к завтрашнему дню? а можешь сделать так,чтобы по уровню сигнала ещё и силу удара измерять? :))
уж не хочет быть она крестьянкой
хочет быть столбовою дворянкой
(с) А. С. Пушкин
я подумаю над этим завтра
(с) С. О'Хара
двойку мне по математике -- исправил расчет отклонения (оно теперь измеряется в миллисекундах и по правильной формуле: корень из дисперсии)
заодно сделал сброс статистики при нажатии на пробел
версия 1.3: ссылка
В новой версии цифры получаются больше. Теперь я с трудом могу приблизиться к 2, но обычно оно скачет. Зато правую зеленую цифру стабильно держу в районе 6. Точнее что-ли стала считать? Спасибо, идея очень интересная! Еще пара пожеланий: 5-секундный интервал лучше уменьшить до 1, или вообще сделать настраиваемым.
Кроме того, здорово было бы в перспективе сделать анализ отклонения в громкости, хотя бы грубоватый (+-10%).
коллега r.m. пишет:
здорово было бы в перспективе сделать анализ отклонения в громкости
в принципе я это и хотел пожелать. спасибо за прогу,а главное круто,что ты инициативу проявил,с товарищами поделился. респект!
В старой версии отклонение было в сотых долях секунды и считалось неправильно. В новой оно в тысячных, поэтому отличается.
Анализ громкости вещь капризная и может оказаться довольно бесполезным. АЦП звуковой карты (при оцифровке 16 бит) выдает сигнал от -32768 до 32767. Если при каждом ударе уровень сигнала будет зашкаливать, то и фиксироваться каждый раз будет максимальное значение, а отклонение у него будет соотв. минимальным. Т.е. требуется более точная подстройка уровня входного сигнала в миксере, чтобы не зашкаливало.
В общем сделал я на пробу: ссылка
добавилась третья строчка -- отклонение по громкости. Первый столбец по 8-ми ударам, второй по 1024.
Единиц измерения тут нет -- считается прямо по уровню сигнала, потом делится на 10. Эти цифры сильно зависят от характеристик звуковой карты, микрофона, настроек миксера. Поэтому как показатель скорее второстепенны.
Думаю, сами убедитесь, что громкость лучше контролировать живыми ушами :)
------------
для "личного пользования" убрал анализ громкости
ссылка
качайте кому какая понравится
в 1.4.1 bpm слева считается не по 1 последнему удару а по 8-ми, это дает небольшое сглаживание
ну и текст чуть выровнял по столбцам
то же относится и к 1.4
да, от контроля динамики и в самом деле пользы маловато.. остается последнее пожелание - настраиваемый интервал сброса статистики (мне, например, надо меньше 5 сек.)
версия 1.5 ссылка
надеюсь, финальная :)
при запуске программы можно указать два ключа:
-level XX (или коротко -l XX) где XX -- порог срабатывания (от 2 до 98, по умолчанию 50)
-reset X (коротко -r X) где X -- пауза до сброса статистики в секундах (от 1 до 10, по умолчанию 5)
удобнее всего создать на рабочем столе ярлык на программу и в его свойствах дописать к командной строке запуска желаемые параметры
например: ...RhythmAnalyzer.exe -l 30 -r 3
или: ...RhythmAnalyzer.exe -level 40 -reset 4
Спасибо большое!
Заметил небольшой баг - после 20-30 минут программка начинает съедать 100% процессора. И еще: кому-нибудь удавалось получить bmp больше 900? По-моему, она игнорирует слишком быстрые удары, не засчитывает. Теоретически я могу и 2000 bpm сделать (форшлагом), на экране четко видны 2 пики, но засчитывается (которая красная) только первая пика.
И еще пожелание: добавь возможность задавать интервал усреднения для обоих dev. Мне, например, для отработки 7-stroke roll было бы удобно усреднять не по 8 ударам а по 6.
Чтобы обнаружился второй удар уровень сигнала должен опуститься ниже порога + пауза 50 миллисекунд. Для 900 bpm может и маловато. В версии 1.6 пауза уменьшена до 20 мс (если меньше -- появится "дребезг" и лишние удары). Теперь вроде 1500 определяет.
ссылка
Со съеданием процессора попробую отловить ошибку.
Вторая колонка показывает средние значения за упражнение, поэтому буфер по которому ведутся расчеты должен быть большим. Делать его еще больше -- увеличится нагрузка на процессор и задержка обработки сигнала. Возможно из-эа этой задержки и происходит ошибка в DirectSound и 100% загрузка на медленных процессорах.
Длину первого буфера конечно можно сделать изменяемой. Но ведь программа не разбивает входные данные на блоки по 8. Всегда обрабатывается 8 _последних_ ударов. Когда 9-й интервал добавляется в список 1-й из него удаляется и т.д. Поэтому в текущей версии программа годится только для отработки _равномерных_ ударов.
Чтобы отрабатывать сложные ритмические рисунки нужно научить программу определять начало и длину такта, раскладывать удары по такту (все это с учетом возможных ошибок барабанщика и в реальном времени). За такую задачу взяться конечно весьма почетно, только не останется времени на музыку :)
Если добавить в программу метроном и измерять отклонение ударов от его тиков, то можно будет отрабатывать любые рудименты с нотами разной длительности. Получится аналог ссылка или ссылка. Может быть начну потихоньку двигаться в этом направлении.
коллега }|{a6a пишет:
Длину первого буфера конечно можно сделать изменяемой. Но ведь программа не разбивает входные данные на блоки по 8. Всегда обрабатывается 8 _последних_ ударов. Когда 9-й интервал добавляется в список 1-й из него удаляется и т.д. Поэтому в текущей версии программа годится только для отработки _равномерных_ ударов.
Не совсем так: с текущей версией вполне можно отрабатывать рудименты 9-stroke roll, 13-stroke roll, и т.д. как раз благодаря тому что удары старше 8 она "забывает". Второй dev будет все время красным но это неважно, для коротких роллов достаточно и первого - он просто показывает ровность последней серии, как бы дает оценку только что сыгранному рудименту. А вот 7-stroke roll, 5-stroke roll, single stroke 7, single stroke 4 она уже не воспринимает за серию и первый dev тоже будет красным. Так что регулировка буфера первого dev (3-8) была бы полезной.
Насчет загрузки процессора - если окажется что это из-за чересчур большого буфера второго dev, то его можно уменьшить. На мой взгляд 256 вполне достаточно (если играть 32-ми, 256 это же целых 8 тактов).
коллега }|{a6a пишет:
Чтобы отрабатывать сложные ритмические рисунки нужно научить программу определять начало и длину такта, раскладывать удары по такту (все это с учетом возможных ошибок барабанщика и в реальном времени). За такую задачу взяться конечно весьма почетно, только не останется времени на музыку :)
Да, это сложно. Тут целый интерфейс придется писать для задания этих рисунков. А если попробовать сделать такой режим работы: пусть удары в два раза длиннее предыдущих за грубую ошибку не считаются (т.е. как бы достраивается воображаемый удар между ними). Это откроет горизонт для таких упражнений как Grid Diddles (RR L R L RR L R L ...), Chicken-&-Roll (R L R L R L R L RRLLRRLLRRLLRRLL ...).
ссылка
Кнопками PageUp / PageDown можно менять размер первого буфера от 2 до 16 (отображается в строке статуса).
При пропуске одного удара статистика не портится, если отклонение в ритме < 50 мс.
в текущей версии можно пропустить только один удар в серии -- следующий интервал должен снова быть коротким
или сделать допустимым пропуск нескольких (типа 16-16-8-8-8-16-16-8-8-8) ?
ссылка -- можно пропустить несколько
коллега }|{a6a пишет:
в текущей версии можно пропустить только один удар в серии -- следующий интервал должен снова быть коротким
Это подоходит только для 7-stroke roll duple interpretation
коллега }|{a6a пишет:
или сделать допустимым пропуск нескольких (типа 16-16-8-8-8-16-16-8-8-8) ?
все возможные комбинации пропусков ты замучаешься делать. лучше бы придумать как сделать чтобы одиночки и двойки (ровно в 2 раза быстрее, в пределах какого-то отклонения) воспринимались как ровные удары.. интересно это возможно?
в версии 1.7.1 после первой серии двоек статистика стабилизируется и можно играть одиночными -- будет показывать удвоенный bpm
сделал интерфейс чуть поудобнее -- теперь управлять программой можно через меню
ссылка
Верни пожалуйста как было - без детектирования одиночных ударов. Так стабильнее работает, а то малейшая ошибка приводит к тому что темп растет вдвое и статистика уже неверно считается. и увеличь еще немного паузу с 20 мс до 30.
ссылка -- пауза 30 мс
пропуск ударов можно включить в меню ( Mode -> Allow Skip Beat -- по умолчанию выключено )
да уж)
киньте на мыло, если у кого осталась (lawrentiy маил ру) или (lawrentiy гмаил ком)
А переложите кто-нибудь на http://narod.yandex.ru/ или аналогичный файлохостинг.
Все, по ходу дела бета-тестирование закончилось, скоро }|{a6a выпустит коммерческую версию)
