Dmitry Dubrovenko писал(а):Да абстрагируйтесь Вы от каких-то привязок. Считайте, что просто по одной оси - сила удара молоточка (точнее обратная величина), а по другой - преобразованное для передачи по МИДИ.
Если мы на этом этапе абстрагируемся от физики явления, то потеряем физический смысл, а вместе с ним - и критерий, определяющий логику и здравый смысл всех дальнейших рассуждений.
Потому что, параметр Velocity имеет максимальное значение 127 с шагом 1.
Делать больше - бессмысленная трата ресурсов, меньше - потеря разрешающей способности.
Здравый смысл.
Отнюдь.
Точнее, Этот довод справедлив в одном единственном случае - линейной зависимости. Во всех остальных случаях он будет приводить к потере разрешающей способности.
http://images.vfl.ru/ii/1429724793/1dc3bad9/8518384.gifВы ведь это строили в Экселле? Посмотрите на исходные таблицы - там явно присутствуют большие скачки по оси Y. Это и есть потеря разрешающей способности. В случае без потери разрешающей способности приращения Y в таблице должны принимать только два значения: "0" и "1". А для этого диапазон по X должен быть существенно больше диапазона по Y.
...но описание некоторых Ваших экспериментов тяготеет в сторону "измерения сферического коня в вакууме" (без обид, надеюсь).
"Без обид" - это как раз наиболее комфортный для меня стиль общения.
А по поводу "сферического коня" - он как раз и получится при преждевременном отказе от физического смысла.
В фортепиано, сколь бы долго вы на клавишу не нажимали, в конечном итоге молоточек ударит по струне, и будет звукоизвлечение.
Значит, у меня неправильное фортепьяно, ибо работает оно именно так, как я описал: при силе удара ниже некоторой границы звук исчезает. Может, механика рояля устроена как-то по-другому, но механика пианино устроена именно так.
Однако, гораздо проще (и дешевле в результате) измерить разницу по времени между началом и окончанием нажатия.
Строго говоря, не обязательно именно началом и окончанием - может быть в любом месте между этими точками. Хоть вблизи самого конца. Но интервал времени при этом получится короче, а его измерение - более ресурсоемким.
введена специальная настройка "Global Velocity" как-раз корректирующая скорость сканирования.
Я обратил на нее внимание, не понял, что это такое, но пока решил отложить разбирательство.
А вообще, рекомендую почитать форум. Тут чего только не предлагали для измерения. И оптические датчики, и акселерометры, и даже струны измерять (правда что-то так никто до конца и не доделал).
Да, кое-что прочитал. Сам делал где-то с четверть века назад на герконах. Только герконы у меня прикреплялись к клавишам, а магнит был один длинный неподвижный (от чего-то типа магнитной защелки, но гораздо длиннее - сантиметров 20-30).
Сторонние же миди-клавиатуры в подобных экспериментах, надо использовать крайне осторожно, ибо, как уже говорил, только разработчик знает (а иногда и он до конца не понимает), что он там накодил.
Тут, на мой взгляд, актуальнее проводить испытание своей изготовленной клавиатуры.
Вот и у меня такая же фигня: очень часто сталкиваюсь с тем, что у готового устройства или программы есть некоторые неизвестные, но важные для меня параметры. Поэтому, если есть такая возможность, предпочитаю пользоваться собственными разработками.
Предположим, что данные Ваших экспериментов верны (хотя, пока не ясно, как Вы измеряли временнЫе интервалы).
Мне - ясно. Измерялось время от срабатывания первого контакта до срабатывания второго. Измерялось Ардуиной, подключенной непосредственно к контактам клавиатуры. На первом этапе измерения проводились с точностью 1 мс, что оказалось достаточным для дальнейших оценок.
Тогда Вы настраиваете таймер на 2-3ms.
Следовательно 127 измерений он произведёт за 254-381ms, что как-раз соответствует полученным Вами результатам.
Это - грубейшая ошибка (мы ведь договаривались - без обид)!
Начну с аллегории: если бы это было так, то в субконтроктаве должна была быть одна клавиша, в контроктаве - две, в большой - 4, а в четвертой - 128. Вы когда-нибудь видели подобную клавиатуру?
Для человека наиболее естественным является логарифмический масштаб. Причем, для слуха это точно доказано и по частоте, и по амплитуде. Если сделать так, как Вы предлагаете, то в одной части шкалы "ступеньки будут менее 1%, а в другой - достигать 100%.
Давайте вернемся к конкретному примеру:
если 2 мс - это fff, а 200 мс - это ppp, то граница mp/mf должна находиться где-то в районе 20 мс (я думаю, не надо объяснять, почему берется именно среднее геометрическое). Т.е. с точки зрения MIDI у нас на нижний поддиапазон 1-63 приходится интервал времен 200-20 мс, а на верхний - 64-127 - интервал времен 20-2 мс. Т.е. мы видим, что внизу MIDI-отсчетов гораздо меньше, чем отсчетов по времени, а вверху - наоборот.
Давайте попытаемся навести еще немного конкретики. В спецификации MIDI никакой привязки к дБ не содержится, но интуитивно понятно, что так или иначе конструктору такую привязку нужно будет вводить.
Считается, что разрешающая способность человеческого слуха по уровню находится в районе 1 дБ. Поэтому, в частности, простенькие электронные регуляторы громкости имеют шаг регулировки 1 дБ. а более продвинутые - 0.5 дБ (чтоб с запасом). Обычно диапазон регулировки составляет 80-83 дБ, но это "от нуля", тогда как динамический диапазон любого музыкального инструмента значительно уже. Я думаю, можно оценить его сверху величиной порядка 64 дБ (т.е. по мощности более 2 млн раз). Тогда 1 ступень MIDI должна соответствовать 0.5 дБ, что составляет примерно 12-13%.
Возвращаясь к нашим 2 мс: указанные выше 12-13% - это как раз от этой величины, что составляет примерно 0.25 мс.
Таким образом, чтобы не потерять в разрешающей способности, нам необходимо опрашивать клавиатуру не реже 1 раза в 0.25 мс или с частотой не ниже 4000 Гц. Тогда на 2 мс у нас будет число отсчетов 8, а на 200 мс - число отсчетов 800. Именно столько и надо делать во избежание потери разрешающей способности. Т.е. таблица преобразования из длительности в MIDI должна иметь примерно следующий вид:
-,-,-,-,-,-,-,-,127,126,125,124 ... 2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1.
Где ячейки с 0 по 7 не используются, первые несколько значений идут с шагом 1, а в дальнейшем - начинают повторяться, и к концу таблицы количество повторяющихся величин уже составляет десятки подряд.
Показать
Приведенные выкладки справедливы, если оценивать по мощности. Если по напряжению/звуковому давлению, то 0.5 дБ - это уже всего лишь 6% и оценка частоты опроса клавиатуры увеличивается до 8000 Гц. Поэтому ранее я писал о некоторой средней оценке в 5000-6000 Гц.
Исключительно из здравого смысла и опыта. Никаких специальных биоакустических экспериментов я не проводил.
Из здравого смысла и опыта следует только один единственный вид - логарифмический. Все остальные - не имеют физического смысла.
А в спецификации MIDI, там где говорится о разных кривых, имеется в виду, что, коль скоро разные инструменты имеют различный динамический диапазон, то и кривые громкости должны различаться между собой исключительно "растяжкой" без отступления от логарифмического закона. Откуда следует, что для части кривых крайние значения силы удара не должны достигать краев MIDI диапазона. В предельном случае - динамический диапазон инструмента 0 дБ, клавиатура всегда должна возвращать значение 64.
Вот как-то так.