Самодельный MIDI Controller

Друзья, если разговор в теме и дальше будет вестись в том же духе поливания друг-друга — тему, как водится, придётся закрыть, а особо несдержанных участников отправить в неоплачиваемый отпуск.
 
  • Like
Реакции: tiretrak
Было бы интересно взглянуть на этот вариант применения
Эта микросхема производства Analog Devices называется "цифровой изолятор" и предназначена для гальванической развязки UART , поддерживает частоты до 2.5МГц. Нормализует уровни сигналов. Имеются варианты для I2C (1250) , USB (ADUM 3160), SPI (3471) и прочие. Я их применял в диагностическом приборчике - тестере хешплат, в адаптере I2C-USB и UART-USB, также они применяются в "свистке" USB-USB (цена 600р.)
стоимость такой гальваноразвязки
ADUM1205 я покупал на Али за 98р. на Авито по 200р., в чипдипе -более 600р.
стоимость самого девайса, в котором она была применена.
С какой целью интересуетесь? Надеюсь, не для флуда. 600р...150000р
 
предназначена
Я в курсе, для чего она предназначена (поэтому, собственно и вопрос возник).
Также я в курсе, что она требует дополнительного гальванически развязанного источника питания (и который тоже денег стОит).
Есть аналогичные чипы и со встроенными питальниками (которые мы иногда и применяем).
Но я никогда не встречал данных микросхем в миди-девайсах (думал, что Вы это сделали).
Чаще же мы и раньше использовали "рассыпуху", а сейчас и подавно.
А причина...
В не такие далёкие времена, когда ещё еБей работал, решил я прикупить FT232.
Все дешёвые варианты (от китайцев, разумеется) сопровождались большим заголовком "Оригинальный чип".
Когда я стал задавать письменные вопросы, половина просто меня проигнорировала, остальные же отвечали примерно одинаково: " Мы торгуем исключительно товарами, произведёнными в Китае".
У американских же поставщиков, ценник был бешенный.
В итоге, пришлось идти на поклон к ЧипДипу.
А вот про параллельную флэшку я не поинтересовался, в результате теперь имею красивые пластмасски с ножками, которые больше одной строки не записывают.
А уж сколько СТМов, которые даже иногда работали сперва нормально (молчу про трупы "по умолчанию"), довелось повидать в промышленных масштабах последнее время...
Так вот.
Продукция AD стОит весьма значительных средств, и в 92 рубля, как говаривал Станиславский: "Не верю!" (если только в/у события не
происходили "до исторического материализма").
Очень сильно подозреваю, что, если Вы начнёте проходить сертификацию (как говорил ушедший в узкий круг широкой известности Rst7), то будете неприятно удивлены. :Dle18:


С какой целью интересуетесь?
Уже не интересуюсь (см. выше). :Dle75:
 
  • Sad
Реакции: Astranome
Здравствуйте. Подскажите, вот на такой типовой схеме MIDI OUT у меня успешно работают Ардуино проекты. Конечно TX -это выход на 31250, и простые посылы требуемых байтов по спецификации МИДИ через Serial успешно принимаются МИДИ приемниками. А вот для STM32 у которого тоже есть TX такая схема должна работать? Порт настроен (не мной) и в через FTDI на терминале виден. Но МИДИ устройства уже не читают его. Не нужна ли особая настройка порта? Ток 5 ма порт СТМ тоже уверен отдает.
 

Вложения

  • schematic_midi_out.jpg
    schematic_midi_out.jpg
    22,9 KB · Просмотры: 105
@dim3740
stm32 - 3,3В питание, и, соответственно, выход порта. у Arduino 5В. разница, как минимум, в этом. может и порт неправильно настроен
 
@dugdum®, ну по питанию я учел. Уменьшал резисторы. Нет эффекта((( А вот в настройках порта я не разбираюсь. Через адаптер в терминал все выводится. Это раз. Если в линию МИДИ отправить просто относительно земли - то МИДИ интерфейс уже начинает что-то принимать (лампочка мигает), но в окне приема полный хаус... Гуглил проекты (именно схему надо) в сети. Есть немного, но через буферы. Это и логично, но неужели они как раз и меняют фазу пакета МИДИ сообщений в нужную??
 
может ещё надо резистор уменьшить, 3,3В, наверное, можно вообще без резистора подавать чтобы светодиод в оптроне зажечь.
вот я посчитал на 220 ом резисторе при токе 5 ма будет падать 1.1В, это как раз рассчитано на выхлоп порта 5В стандартной логики.
в общем-то загугль лучше, как делают на stm32 миди выход, думаю быстро всё найдется )
 
и 40 ом не помогает. надо в первую очередь понять аппаратная проблема или программная.
 
и 40 ом не помогает. надо в первую очередь понять аппаратная проблема или программная.
там на приёмном конце 220 ом стоит. просто от 3,3в светодиод недостаточно ярко загорается. Поставь на выход stm32 преобразователь логического уровня от 3,3В до 5В любым способом, хоть микросхему, хоть транзистор.
 
да, если совсем по 10 ом поставить, то все заработало. Буфер пока не буду ставить. Спасибо. Значит, дело было в железе.
 
да, если совсем по 10 ом поставить, то все заработало. Буфер пока не буду ставить. Спасибо. Значит, дело было в железе.
А зря.
Вы явно перегружаете выходной порт контроллера. Если мне не изменяет память, у него всего 9 мА. А 10 Ом на 3.3 В - это 330 мА.
Естественно, там еще есть входные резисторы, что по идее должно давать 3.3.(220+10) = 14 мА, что все равно больше нормы, так что я бы подстраховался.
И вообще, выводить вход/выход микроконтроллера наружу прибора - не очень хорошая затея.
Лично я предпочитаю полную буферизацию:
226770
 
Вообщем как-то спаял я на коленке MIDI контроллер на 8 крутилок, разработка моя собственная, если кого интересует могу поделится.
Схема состоит из микроконтроллера Atmel ATMEGA16 и буферного элемента на нашей 155ла3, девайс можно подключать к Game Port напрямую, есть нормальный MIDI Out. Схема паяется часа 2 на макетной плате, программатор простой -пара резисторов + LPT порт.
Есть также схема простой MIDI клавиатуры: 5 октав, пассивная ( небыло нормальной механики чтоб сделать Velocity), транспозиция на октаву +-. Сейчас работаю на д контроллером с LCD индикатором (16х2), 64 кнопками и 64 или 32 крутилки,фейдеры, 99 пресетов (этот проект заморожен, возможно я к нему и вернусь)
При программировании микроконтроллера в его Fuse сбросить все галочки кроме СКОРТ, это установит его в режим работы от кварцевого генератора.

Вот схема , прошивка и исходники на ассемблере для простого МИДИ контроллера на 8 крутилок.
Lj,hs
<div class='quotetop'>QUOTE(\"decil\")</div>

Велосити измеряется по скорости нажатия а не по давлению, т.е. измеряется время за которое клавиша перемещается из верхней точки в нижнюю. Это проще.

<div class='quotetop'>QUOTE(\"dugdum®\")</div>

Действительно на PIC было бы удобнее и перспективнее...

А вообще я давно ищу кого-нибудь кто мог бы мне помочь с миди-управление м. Хотя я немало занимался схемами на 155-й и прочих дискретных сериях, но в основном все-таки аналоговыми. Еще в середине 70-х я сделал свой первый аналоговый синтезатор, правда FX, не музыкальный, но и отдельные жуткие ноты можно было настроить (жаль что жил в СССР, если б не это, может составил бы Мугу конкуренцию :biglaugh: ) и вот пару лет назад пришла мысль его заново собрать, но... в МИДИ я не разбираюсь (электронная часть), а без МИДИ сейчас что-либо делать смысла нет! Может скооперируемся? Мне нужна передача МИДИ-команд в оба направления.
 

Вложения

  • Плата вокодер.jpg
    Плата вокодер.jpg
    317,6 KB · Просмотры: 88
  • 2.jpg
    2.jpg
    257,6 KB · Просмотры: 93
  • 3.jpg
    3.jpg
    517,4 KB · Просмотры: 92
Можно обратится к автору топика и ко всем остальным? У меня задача обратная - нужно из хоста послать в регистры инструмента определенные числа, т.е. мне нужно построить такое устройство которое можно подключить к выходу МИДИ звуковой платы (или USB) и на 32 ячейки (можно и меньше) через свободный контроллер с миди-дорожки скажем Нюендо послать (записать в регистр) числа, скажем от 0 до 127 для дальнейшего управления ими параметрами устройства. Может кто-нибудь такое разработать или дать ссылку на готовое? Я к сожаленью ничего не смыслю в МИДИ сообщениях. Может кто заодно даст ссылку на хорошо разжеванную МИДИ-тему - коды, последовательности кодов, частоты, уровни, паузы и т.д.
Добрый день!

Я - MIDI555 (в миру – Геннадий), дата выпуска 15_03_1959 г. Очень заинтересовался Вашим творчеством, и по – моему встретил родственную душу! Много работал и занимался с 155, 555 сериями. Последнее – миди – клава на контроллере Atmel - AT89C52:

в клавиатуре 2 мануала - всего 9,5 октав;

есть возможность делить клавиатуру на сплит – зоны – до 4;

имеется возможность подключать на 1 клавишу одновременно до 4

инструментов (наслоение патчей);

эффекты – вибрато, питч-бенд, файзер, хорус, фленджер, дилей»,

реверберация, тремоло, управляемые фильтры, унисонное звучание

(регулируемый «розлив» - под аккордеон), портаменто (одноголосное).

Выход - миди интерфейс (31,5 кБод), который очень меня не устраивает. Сейчас найти звуковую карту или инструмент с таким вдохом – выдохом большая редкость (это уже почти «ретро»), но на AT89C52 больше не получается…

Почему так много клавиш? Хватило бы и 5 октав, но валялись лишние клавиши, имелась куча герконов – не выбрасывать же! Да и вообще нравятся органные многорядные клавиатуры…

Конечно AT89C52, 155, 555 серии - это сегодня все уже страшно устарело и не актуально, зато просто, как лопата! И это моя молодость!

Сейчас нахожусь в творческих муках – переделываю этот «девайс» под контроллер RP2040 (Raspberry Pi Pico), это чтобы работать с MIDI через USB и еще многое другое…

Выложил фрагменты схемы midi клавы в «протезе» (Proteuse) и фотку, можно полностью код в ASM-52, ну или прошивку в бинарике…

Буду очень рад с Вами пообщаться. А Вы в VK случайно не прописаны?

Можно, конечно и в WhatsApp , но у меня на моей «рабочей лошадке» сейчас стоит винда-ХР и WhatsApp – сервис не поддерживает. Есть еще дома пара компов с Windows-7, но я с ними работаю редко.

Если можно, то хорошо бы общаться через mail.ru, ну а с миди-управлением наверное помогу, не первый год замужем…
<div class='quotetop'>QUOTE(\"decil\")</div>

Велосити измеряется по скорости нажатия а не по давлению, т.е. измеряется время за которое клавиша перемещается из верхней точки в нижнюю. Это проще.

<div class='quotetop'>QUOTE(\"dugdum®\")</div>

Действительно на PIC было бы удобнее и перспективнее...

А вообще я давно ищу кого-нибудь кто мог бы мне помочь с миди-управлением. Хотя я немало занимался схемами на 155-й и прочих дискретных сериях, но в основном все-таки аналоговыми. Еще в середине 70-х я сделал свой первый аналоговый синтезатор, правда FX, не музыкальный, но и отдельные жуткие ноты можно было настроить (жаль что жил в СССР, если б не это, может составил бы Мугу конкуренцию :biglaugh: ) и вот пару лет назад пришла мысль его заново собрать, но... в МИДИ я не разбираюсь (электронная часть), а без МИДИ сейчас что-либо делать смысла нет! Может скооперируемся? Мне нужна передача МИДИ-команд в оба направления.
 

Вложения

  • Плата вокодер.jpg
    Плата вокодер.jpg
    317,6 KB · Просмотры: 73
  • 2.jpg
    2.jpg
    257,6 KB · Просмотры: 76
  • 3.jpg
    3.jpg
    517,4 KB · Просмотры: 78
@MIDI555, если по мануальным клавишам, то можно со мной пообщаться. Ссылка на ВК внизу моих постов.
11.jpg
22.jpg
33.jpg
 
Добрый день, dim3740!

Что – то на ВК (30_09_2023 16:30) я Вас не обнаружил…

Если можно, сообщить ID на VK. Жду общения, с нетерпением!

Кстати, вскочила проблемка с передачей по USB midi- сообщений noteOn и noteOff (вкл., выкл. ноту). Вот описания функций для USB (это на CircuitPython):

def noteOn(x):

usb_midi.send(NoteOn(x,127))

def noteOff(x):

usb_midi.send(NoteOff(x,0))

Здесь х – номер ноты и 127, 0 – велосити (velocity) – скорость нажатия/отпускания клавиши и явно не указывается номер канала миди.

Он, причем только один указывается в установке конфига девайса:

usb_midi = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=0)

В моем проекте его необходимо передавать, т к используется одновременно несколько миди – каналов. «Классический» 3-х байтовый формат – 9(On), № ноты, velocity (127-0)…
 
@MIDI555, с питоном и его модификациями как-то нет возможности разбираться. Может, кто тот и возьмется. А как можно меня не найти ВК, если тут, внизу под моим постом/профилем, есть прямая ссылка? Попадаете на паблик и можно общаться, а если надо, там есть и ссылка на личную страничку. Все просто.
 
Кстати, вскочила проблемка с передачей по USB midi- сообщений noteOn и noteOff (вкл., выкл. ноту). Вот описания функций для USB (это на CircuitPython):

def noteOn(x):

usb_midi.send(NoteOn(x,127))

def noteOff(x):

usb_midi.send(NoteOff(x,0))

Здесь х – номер ноты и 127, 0 – велосити (velocity) – скорость нажатия/отпускания клавиши
Насколько я понял спецификацию MIDI, это не совсем верно.

NoteOn(x,0) - полностью эквивалентно noteOff и именно так и принято использовать.
А команда noteOff нужна для специфических случаев, когда инструмент позволяет сыграть более одной ноты в унисон. Тогда нужно указать, какую именно из "унисонных нот" нужно закончить и в этом случае передается то же значение velocity, то было при старте ноты.
Соответственно, NoteOff(x,0) лишено смысла.
И еще: если инструмент не поддерживает управление velocity, то передавать следует значение 64, а не 127.

и явно не указывается номер канала миди.

Он, причем только один указывается в установке конфига девайса:

usb_midi = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=0)

В моем проекте его необходимо передавать, т к используется одновременно несколько миди – каналов. «Классический» 3-х байтовый формат – 9(On), № ноты, velocity (127-0)…
Я не разбирался в конкретной реализации, но по идее: один экзкмпляр сласса - один MIDI канал.
т.е. для того, чтобы использовать несколько каналов, для каждого нужно завести свой экземпляр:
usb_midi_0 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=0)
usb_midi_1 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=1)
usb_midi_2 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=2)
и потом посылать сообщение нужному экземпляру.
т.е:
usb_midi_0.send( ...
usb_midi_1.send( ...
usb_midi_2.send(...
Да, там где написано ports[1], может быть другой номер - это надо смотреть в описании класса.
 
Последнее редактирование:
@MIDI555, с питоном и его модификациями как-то нет возможности разбираться. Может, кто тот и возьмется. А как можно меня не найти ВК, если тут, внизу под моим постом/профилем, есть прямая ссылка? Попадаете на паблик и можно общаться, а если надо, там есть и ссылка на личную страничку. Все просто.
@MIDI555, с питоном и его модификациями как-то нет возможности разбираться. Может, кто тот и возьмется. А как можно меня не найти ВК, если тут, внизу под моим постом/профилем, есть прямая ссылка? Попадаете на паблик и можно общаться, а если надо, там есть и ссылка на личную страничку. Все просто.
Добрый день, Вадим!

Не успел сообщить, в ВК Вас уже нашел - dim3740! Действительно, как можно Вас не найти в ВК, ведь могут же, если захочат (это я про себя)! И Вы уже включили меня в друзья (Геннадий Золотухин)! Просмотрел все Ваши посты – впечатляет!

Давай те перейдем на ТЫ, не возражаете?

Миди - клава на платформе Raspberry Pi Pico ( малинка) – это уже у меня третий вариант.

Платформа Raspberry Pi Pico – контроллер RP2040, в нем два ядра ARM Cortex-M0+ с тактовой частотой 133 МГц, ОЗУ - 264 КБ, Flash-память- 2 МБ (можно было заказать и 4, 8, 16 МБ, но дороже), аппаратные интерфейсы: 2 × UART, 2 × I2C, 2 × SPI, напряжение питания – 3,3 В. Программируется на C/C++ , MicroPython, CircuitPython.

Начал писать на С, но в остановился на CircuitPython (хотя сначала очень не нравилось), сама ПРГ оказывается маленькой, но помимо работает куча библиотек от Аdafruit-circuitpython.

«Пробу пера» начал с Arduino Uno, но Ардуино оказался китайским (впрочем, как и мой Raspberry Pi Pico), в нем вместо оригинального ATMEGA16U2 стоит чип USB-UART СН340С.

Наши китайские товарищи летят впереди всея планеты… Честь и хвала ихнему трудолюбию и умению!

Для того, чтобы принимать данные через USB виртуальный COM-порт от Arduino и передавать их в какую-либо программу MIDI-секвенсор, необходима специальная утилита: Serial MIDI Converter V2D -https://www.spikenzielabs.com/learn/serial_midi.html.

Это работает, но, как оказалось, с большими задержками, и от этого проекта я пока отказался. Может зря, ведь есть еще программулина DualMoco, которая позволяет Arduino выступать в роли MIDI устройства или я не прав?

Мой первый вариант - идея на http://antandar.narod.ru/lpt2midi.html. Если будет интересно - я выложил архив lpt2midi.

Проект миди - клавы (Антонова) был переделан: добавил второй ряд (всего 10 октав), переключатели миди – контроллеров, в схему были добавлены дешифраторы, мультиплексоры, т. к. 17 пинов LPT - порта явно не хватало.

Была переписана ПРГ на Object Pascal и Delphi-6. Но этот проект был отставлен, т. к. все работало медленно и иногда «буксовало»…

Второй вариант был реализован на AT89C52: здесь все работает «железно, железобетонно»! Но не устраивает миди – выход («токовая петля», оптрон, медленно). На моем ПК даже не оказалось миди – входа – нашел какие – то рудименты на материнке, к ним подпаялся. Звуковая карта – интегрированная. Зато ПРГ на Ассемблере – ну просто, как лопата! Я с ним (с Асс.) работаю уже лет 30!
И вот третий вариант: забавляюсь с Raspberry Pi Pico («малинкой»)…

Ну, пока, до встречи на ВК. Имеются проблемы, подробности опишу…
Насколько я понял спецификацию MIDI, это не совсем верно.

NoteOn(x,0) - полностью эквивалентно noteOff и именно так и принято использовать.
А команда noteOff нужна для специфических случаев, когда инструмент позволяет сыграть более одной ноты в унисон. Тогда нужно указать, какую именно из "унисонных нот" нужно закончить и в этом случае передается то же значение velocity, то было при старте ноты.
Соответственно, NoteOff(x,0) лишено смысла.
И еще: если инструмент не поддерживает управление velocity, то передавать следует значение 64, а не 127.


Я не разбирался в конкретной реализации, но по идее: один экзкмпляр сласса - один MIDI канал.
т.е. для того, чтобы использовать несколько каналов, для каждого нужно завести свой экземпляр:
usb_midi_0 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=0)
usb_midi_1 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=1)
usb_midi_2 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=2)
и потом посылать сообщение нужному экземпляру.
т.е:
usb_midi_0.send( ...
usb_midi_1.send( ...
usb_midi_2.send(...
Да, там где написано ports[1], может быть другой номер - это надо смотреть в описании класса.

04_09_2023
Доброго времени суток, sandriano!
Спасибо за толковый совет.
Где – то подспудно (в дальних уголках сознания) вертелось что – то подобное… Я Вам очень благодарен за пинок в пятую точку! Решение проМбелы начало приобретать реальные очертания.
В моем проекте миди – клавиатуры появилась еще одна проблема: совмещение режимов сканирования и вывода информации на LCD-дисплеи.
Решил все реализовать на контроллере Raspberry Pi Pico, ПРГ пишу на CircuitPython, планирую использовать LCD – 1602 - 2 шт. (или 2004, подумаю). Сначала CircuitPython очень не нравился, а сейчас – очень даже неплохо все получается, клава (двухрядная – 9,5 октав) уже музычит.

А вот библиотек от Аdafruit-circuitpython для чипа HD44780 (контроллер LCD 1602) не нашел, если они вообще на тек. момент существуют в природе. Пришлось экспериментировать и изобретать свою «библиотеку». Все работает, но есть засада: длительность пауз (строб) при передаче команд и данных вместо рекомендованных 40 мкс пришлось увеличить почти на два порядка 1 – 2 мс, если меньше – глючит или вообще не работает, аналогично и для LCD 2004.

Хай бы с ней, с этой задержкой (на каждый символ 1-2 мс), но в реальном масштабе времени при музицировании и любом переключении с выводом информации все будет буксовать и тормозить…

Платформа Raspberry Pi Pico – контроллер RP2040, в нем два ядра ARM Cortex-M0+, можно использовать одно ядро для сканирования, а другое для обслуги всего остального; планируется еще линейка LED для индикации режимов. Или я по наивности чего – то не допонимаю? Вот, только пока еще не знаю, как это сделать… Можно конечно, использовать LCD c I2C, но на данный момент имеется наличие полного отсутствия оных изделий.
Вдогонку (для sandriano).

При реализации двухмануальной клавиатуры и организации нескольких сплит – зон, или нескльких патчей (слоев) на одну клавишу так и получается:

один экзкмпляр класса - один MIDI канал.

usb_midi_0 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=0)

usb_midi_1 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=1)

usb_midi_2 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=2)

Большое СПАСИБО!!! Правда, его в карман не положишь и не нальешь…

Теперь я Ваш должник.
 

Вложения

  • Like
Реакции: кактус
Добрый день, Вадим!

Не успел сообщить, в ВК Вас уже нашел - dim3740! Действительно, как можно Вас не найти в ВК, ведь могут же, если захочат (это я про себя)! И Вы уже включили меня в друзья (Геннадий Золотухин)! Просмотрел все Ваши посты – впечатляет!

Давай те перейдем на ТЫ, не возражаете?

Миди - клава на платформе Raspberry Pi Pico ( малинка) – это уже у меня третий вариант.

Платформа Raspberry Pi Pico – контроллер RP2040, в нем два ядра ARM Cortex-M0+ с тактовой частотой 133 МГц, ОЗУ - 264 КБ, Flash-память- 2 МБ (можно было заказать и 4, 8, 16 МБ, но дороже), аппаратные интерфейсы: 2 × UART, 2 × I2C, 2 × SPI, напряжение питания – 3,3 В. Программируется на C/C++ , MicroPython, CircuitPython.

Начал писать на С, но в остановился на CircuitPython (хотя сначала очень не нравилось), сама ПРГ оказывается маленькой, но помимо работает куча библиотек от Аdafruit-circuitpython.

«Пробу пера» начал с Arduino Uno, но Ардуино оказался китайским (впрочем, как и мой Raspberry Pi Pico), в нем вместо оригинального ATMEGA16U2 стоит чип USB-UART СН340С.

Наши китайские товарищи летят впереди всея планеты… Честь и хвала ихнему трудолюбию и умению!

Для того, чтобы принимать данные через USB виртуальный COM-порт от Arduino и передавать их в какую-либо программу MIDI-секвенсор, необходима специальная утилита: Serial MIDI Converter V2D -https://www.spikenzielabs.com/learn/serial_midi.html.

Это работает, но, как оказалось, с большими задержками, и от этого проекта я пока отказался. Может зря, ведь есть еще программулина DualMoco, которая позволяет Arduino выступать в роли MIDI устройства или я не прав?

Мой первый вариант - идея на http://antandar.narod.ru/lpt2midi.html. Если будет интересно - я выложил архив lpt2midi.

Проект миди - клавы (Антонова) был переделан: добавил второй ряд (всего 10 октав), переключатели миди – контроллеров, в схему были добавлены дешифраторы, мультиплексоры, т. к. 17 пинов LPT - порта явно не хватало.

Была переписана ПРГ на Object Pascal и Delphi-6. Но этот проект был отставлен, т. к. все работало медленно и иногда «буксовало»…

Второй вариант был реализован на AT89C52: здесь все работает «железно, железобетонно»! Но не устраивает миди – выход («токовая петля», оптрон, медленно). На моем ПК даже не оказалось миди – входа – нашел какие – то рудименты на материнке, к ним подпаялся. Звуковая карта – интегрированная. Зато ПРГ на Ассемблере – ну просто, как лопата! Я с ним (с Асс.) работаю уже лет 30!
И вот третий вариант: забавляюсь с Raspberry Pi Pico («малинкой»)…

Ну, пока, до встречи на ВК. Имеются проблемы, подробности опишу…


04_09_2023
Доброго времени суток, sandriano!
Спасибо за толковый совет.
Где – то подспудно (в дальних уголках сознания) вертелось что – то подобное… Я Вам очень благодарен за пинок в пятую точку! Решение проМбелы начало приобретать реальные очертания.
В моем проекте миди – клавиатуры появилась еще одна проблема: совмещение режимов сканирования и вывода информации на LCD-дисплеи.
Решил все реализовать на контроллере Raspberry Pi Pico, ПРГ пишу на CircuitPython, планирую использовать LCD – 1602 - 2 шт. (или 2004, подумаю). Сначала CircuitPython очень не нравился, а сейчас – очень даже неплохо все получается, клава (двухрядная – 9,5 октав) уже музычит.

А вот библиотек от Аdafruit-circuitpython для чипа HD44780 (контроллер LCD 1602) не нашел, если они вообще на тек. момент существуют в природе. Пришлось экспериментировать и изобретать свою «библиотеку». Все работает, но есть засада: длительность пауз (строб) при передаче команд и данных вместо рекомендованных 40 мкс пришлось увеличить почти на два порядка 1 – 2 мс, если меньше – глючит или вообще не работает, аналогично и для LCD 2004.

Хай бы с ней, с этой задержкой (на каждый символ 1-2 мс), но в реальном масштабе времени при музицировании и любом переключении с выводом информации все будет буксовать и тормозить…

Платформа Raspberry Pi Pico – контроллер RP2040, в нем два ядра ARM Cortex-M0+, можно использовать одно ядро для сканирования, а другое для обслуги всего остального; планируется еще линейка LED для индикации режимов. Или я по наивности чего – то не допонимаю? Вот, только пока еще не знаю, как это сделать… Можно конечно, использовать LCD c I2C, но на данный момент имеется наличие полного отсутствия оных изделий.
Вдогонку (для sandriano).

При реализации двухмануальной клавиатуры и организации нескольких сплит – зон, или нескльких патчей (слоев) на одну клавишу так и получается:

один экзкмпляр класса - один MIDI канал.

usb_midi_0 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=0)

usb_midi_1 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=1)

usb_midi_2 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=2)

Большое СПАСИБО!!! Правда, его в карман не положишь и не нальешь…

Теперь я Ваш должник.
 

Вложения

Доброго времени суток, sandriano!
Здравствуйте, Геннадий.
На всякий случай: меня зовут Сергей. Возраст практически совпадает.
Мой первый вариант - идея на http://antandar.narod.ru/lpt2midi.html. Если будет интересно - я выложил архив lpt2midi.
Посмотрел для начала схемы: по одной контактной группе на клавишу. Следовательно, клавиатура без динамики. Не интересно.
все работало медленно и иногда «буксовало»…
В случае динамической клавиатуры (с velocity) это будет работать не просто медленно, это вообще не будет работать так, как надо, из-за того, что искажения временнЫх интервалов неизбежно приведет к неверным значениям velocity. Поэтому попытки как-то реализовать опрос клавиш с ПК я отмел сразу.
Обычно динамику реализуют на двух контактных группах, измеряя время между их срабатыванием. По моим измерениям минимальное время (форте фортиссимо) составляет примерно 2 мс. Соответственно, эта величина должна измеряться с приемлемой точностью, что ПК обеспечить в принципе не способен - у него квант времени 15-16 мс.
Поэтому MIDI клавиатура - ТОЛЬКО а отдельном микроконтроллере.
Т.к. я не страдаю гигантоманией, а понадобилась как раз компактная клавиатура для отладки других MIDI устройств, выбор пал на 2 октавы уменьшенных клавиш.
не устраивает миди – выход («токовая петля», оптрон, медленно). На моем ПК даже не оказалось миди – входа
У меня проблема прямо противоположная: я все свои MIDI устройства соединяю через стандартный последовательный MIDI порт, а все компактные клавиатуры - с USB.
Вот пришлось самому делать. Описание проекта здесь: http://arduino.ru/forum/proekty/midi-klaviatura-na-baze-roland-k-25m
В общем, даже на 25 клавиш Atmega328 - это внатяг.
А вот библиотек от Аdafruit-circuitpython для чипа HD44780 (контроллер LCD 1602) не нашел, если они вообще на тек. момент существуют в природе. Пришлось экспериментировать и изобретать свою «библиотеку». Все работает, но есть засада: длительность пауз (строб) при передаче команд и данных вместо рекомендованных 40 мкс пришлось увеличить почти на два порядка 1 – 2 мс, если меньше – глючит или вообще не работает
Экран я у себя на клавиатуре не делал, о чем потом пожалел: с восемью подсвеченных светодиодами клавиш удалось сделать все, что хотел, но без инструкции на нескольких листах пользоваться этим совершенно невозможно.
1602 я использовал в других проектах, вот, в частности, част одного из таких проектов (там есть и видео): http://arduino.ru/forum/proekty/menyu-dlya-dvukhstrochnogo-displeya
но в связи с ограниченностью количества ног МК использую этот экран всегда по I2c, а это тоже накладывает очень серьезные ограничения на время обмена с дисплеем. Мне удалось сократить время вывода одного символа с 2900 до 180 мкс. Естественно, потребовался класс, который принимает от основной программы то, что нужно отобразить на дисплее, а сам отображает это постепенно по одному символу, чтобы не мешать потоку MIDI сообщений.
контроллер RP2040, в нем два ядра ARM Cortex-M0+, можно использовать одно ядро для сканирования, а другое для обслуги всего остального;
Согласен, это как раз случай, когда окажутся полезны именно 2 ядра.
У меня вот в столе лежат 4 штуки RP2040, но все никак не дойдут руки, чтобы установить для них нужный софт на ПК.
В моем проекте миди – клавиатуры появилась еще одна проблема: совмещение режимов сканирования и вывода информации на LCD-дисплеи.
Решил все реализовать на контроллере Raspberry Pi Pico, ПРГ пишу на CircuitPython, планирую использовать LCD – 1602 - 2 шт. (или 2004, подумаю). Сначала CircuitPython очень не нравился, а сейчас – очень даже неплохо все получается, клава (двухрядная – 9,5 октав) уже музычит.
Не верю я, что интерпретатор позволит обеспечить нужную скорость опроса более сотни динамических клавиш.
Или динамика не планируется?
Попутный вопрос: Вы делаете именно клавиатуру или полный синтезатор? А то где-то выше я читал про
имеется возможность подключать на 1 клавишу одновременно до 4

инструментов (наслоение патчей);

эффекты – вибрато, питч-бенд, файзер, хорус, фленджер, дилей»,

реверберация, тремоло, управляемые фильтры, унисонное звучание

(регулируемый «розлив» - под аккордеон), портаменто (одноголосное).
Да, чуть не забыл: когда нужно связать свои MIDI устройства с ПК, я польуюсь примерно таким переходником:
235552

Он, правда, не умеет передавать SysEx сообщения, но я сумел это программно победить.
 
  • Like
Реакции: Long
Еще раз добрый день, sandriano!

usb_midi_0 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=0)

usb_midi_1 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=1)

Работает!!!

Все – таки не понятно с этими библиотеками Аdafruit_midi…

usb_midi.send(NoteOn(x,0-127)) – это On-вкл., х- № ноты, velocity, а где № миди- канала?

usb_midi.send(NoteOff(x,0-127)) – это Off-выкл., х- № ноты, velocity,

можно usb_midi.send(NoteOn(x,0)), это тоже самое, что NoteOff , а № миди- канала?

Трехбайтовые канальные сообщения:

8n nn vv — Note Off (выкл. ноты);

9n nn vv — Note On (вкл. ноты);

An nn pp — Key Pressure (давление на клав.);

Bn cc vv — Control Change (смена знач. контр.).

Где 1 – байт статус, старший бит всегда «1» - (старшая тетрада - команда от 8 до F), n - № миди – канала,

2 – байт данных - № ноты;

3 – байт данных - скорость нажат./отпуск. клавиши (для Note On/ Off).

Пытался мониторить usb_midi.send (сообщения On, Off) с клавы:

MIDI OX- ом ver. 7.0.0.365, Midi Monitor V2,0 – и MIDI OX и Monitor виснут «намертво», не сбрасываются даже диспетчером задач.

MIDI-OX ver.7.0.2.372 ругается: «внешняя ошибка».

FL Studio и «кубик» нормально реагируют, но в мониторинге показывают только Note On/ Off и № ноты.

При загрузке миди в Raspberry Pi Pico (с Сircuitpython) появляются 2 аудио устройства USB, одно из них с ошибкой (код 10). В системном реестре ветвь для аудио устройств на наличие «нижнего» и «верхнего» фильтров проверял – нет. Клава с FL Studio и «кубиком» работает.
 

Вложения

usb_midi_0 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=0)

usb_midi_1 = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=1)

Работает!!!

Все – таки не понятно с этими библиотеками Аdafruit_midi…

usb_midi.send(NoteOn(x,0-127)) – это On-вкл., х- № ноты, velocity, а где № миди- канала?
Добрый день.
Каждый MIDI канал со своим номером - это отдельный инструмент со своим набором настроек. Именно так с ним и нужно обращаться.
Я Вам предложил ВМЕСТО одного инструмента usb_midi создать три инструмента: usb_midi_0, usb_midi_1 и usb_midi_2.
Не в дополнение, а ВМЕСТО. Т.е. usb_midi у Вас быть не должно.
И дальше Вы обращаетесь именно к нужному инструменту:
usb_midi_1.send...
но никак не
usb_midi.send...
т.к. инструмента usb_midi у Вас нет.
Кстати, инструменты можно называть не абстрактно usb_midi*, а как-нибудь более определенно, например first_manual и second_manual. Возможно, так будет легче в них не запутаться.
 
07_10_2023
Доброго времени суток, sandriano!
"Каждый MIDI канал со своим номером - это отдельный инструмент со своим набором настроек. Именно так с ним и нужно обращаться.
но никак не usb_midi.send..." sandriano

И я все об этом… Еще раз СПАСИБО!!! Работает уже 4 миди – канала (пока): 2 мануала можно произвольно делить на 4 сплит – зоны. А вот с «многослойностью» - несколько патчей одновременно при нажатии одной клавиши пока туговато, надо еще подумать.

Еще раз внимательнее просмотрел исходник библиотеки Adafruit MIDI Library 1.0 и убедился, что NoteOn и NoteOff в Сircuitpython передаются действительно без номера миди – канала:

classadafruit_midi.note_on.NoteOn(note, velocity=127, *, channel=None)
Note On Change MIDI message.
Parameters:
note – The note (key) number either as an int (0-127) or a str which is parsed, e.g. “C4” (middle C) is 60, “A4” is 69.
velocity
(int) – The strike velocity, 0-127, 0 is equivalent to a Note Off, defaults to 127.
classmethodfrom_bytes(msg_bytes)

classadafruit_midi.
note_off.NoteOff(note, velocity=0, *, channel=None)
Note Off Change MIDI message.
Parameters:
note – номер ноты (ключа) в виде int (0-127) или str, который анализируется, например. «C4» (средний C) — 60, «A4» — 69.
velocity
(int) – The release velocity, 0-127, defaults to 0.
classmethodfrom_bytes(msg_bytes)

Хотя уже наверное знаю, как это проще реализовать.
Надо поизучать это еще, возможно обнаружится причина некорректной работы аудио устройства USB, хотя винда должна видеть мой девайс, как миди – устройство…
Про динамику и velocit – пока «упражняюсь» без этой функции, но обязательно БУДЕТ!
В моем предыдущем проекте на AT89S8252 все работало!
Не устраивал миди – выход (UART), индикация - 9-значный 7-сегментный дисплей – все быстро забывается, поэтому под рукой всегда была шпаргалка на 3-х страничках, иногда (редко!) все пробуксовывало, не успевало. Все - таки для AT89S8252 – это «внатяг». Для реализации режима динамической индикации, чтобы освободить контроллер от рутинной ненужной работы - использована часть адресов ОЗУ. ОЗУ также использовано как память для хранения программ, поэтому есть дополнительное питание от аккум.
Зато теперь имею то, что имею - Raspberry Pi Pico! Хорошо бы, чтобы кто - то пинал в пятую точку почаще *(для ускорения).
Прицепил (если интересно) файлики ПРГ и монтажку для AT89S8252.
 

Вложения

07_10_2023
Доброго времени суток, sandriano!
"Каждый MIDI канал со своим номером - это отдельный инструмент со своим набором настроек. Именно так с ним и нужно обращаться.
но никак не usb_midi.send..." sandriano

И я все об этом… Еще раз СПАСИБО!!! Работает уже 4 миди – канала (пока): 2 мануала можно произвольно делить на 4 сплит – зоны. А вот с «многослойностью» - несколько патчей одновременно при нажатии одной клавиши пока туговато, надо еще подумать.

Еще раз внимательнее просмотрел исходник библиотеки Adafruit MIDI Library 1.0 и убедился, что NoteOn и NoteOff в Сircuitpython передаются действительно без номера миди – канала:

classadafruit_midi.note_on.NoteOn(note, velocity=127, *, channel=None)
Note On Change MIDI message.
Parameters:
note – The note (key) number either as an int (0-127) or a str which is parsed, e.g. “C4” (middle C) is 60, “A4” is 69.
velocity
(int) – The strike velocity, 0-127, 0 is equivalent to a Note Off, defaults to 127.
classmethodfrom_bytes(msg_bytes)

classadafruit_midi.
note_off.NoteOff(note, velocity=0, *, channel=None)
Note Off Change MIDI message.
Parameters:
note – номер ноты (ключа) в виде int (0-127) или str, который анализируется, например. «C4» (средний C) — 60, «A4» — 69.
velocity
(int) – The release velocity, 0-127, defaults to 0.
classmethodfrom_bytes(msg_bytes)

Хотя уже наверное знаю, как это проще реализовать.
Надо поизучать это еще, возможно обнаружится причина некорректной работы аудио устройства USB, хотя винда должна видеть мой девайс, как миди – устройство…
Про динамику и velocit – пока «упражняюсь» без этой функции, но обязательно БУДЕТ!
В моем предыдущем проекте на AT89S8252 все работало!
Не устраивал миди – выход (UART), индикация - 9-значный 7-сегментный дисплей – все быстро забывается, поэтому под рукой всегда была шпаргалка на 3-х страничках, иногда (редко!) все пробуксовывало, не успевало. Все - таки для AT89S8252 – это «внатяг». Для реализации режима динамической индикации, чтобы освободить контроллер от рутинной ненужной работы - использована часть адресов ОЗУ. ОЗУ также использовано как память для хранения программ, поэтому есть дополнительное питание от аккум.
Зато теперь имею то, что имею - Raspberry Pi Pico! Хорошо бы, чтобы кто - то пинал в пятую точку почаще *(для ускорения).
Прицепил (если интересно) файлики ПРГ и монтажку для AT89S8252.

Есть еще один интересный момент в моем проекте: в динамической клавиатуре для коммутации я использовал герконы. «Собратья по разуму» сомневаются – как это может работать, не может!!!
Под клавишей установлена пара герконов, на один из них (второй) надеты
«волшебные» магнитные (ферриДовые, резиновые) колечки (количество – 2-4 и полярность – определяется экспериментально), за счет чего получается задержка на срабатывание. У меня получалось (по осциллографу) где – то 1,5 – 2 мс.
Я 17 лет отработал на АТСКЭ КВАНТ – АТС квази-электронная, электронное управление (в основном мксх 155 серия), коммутация – герконы, ферриДовые герконы. Имелось очень много неиспользованного ЗИП.
До сих пор не понимаю до конца принцип работы герконов с этими резинками (с магнитной памятью): все герконы были только нормально разомкнутыми, работали и на размыкание и на переключение. Полная информация по этим изделиям у производителя - Рига ВЭФ была закрыта.
Станцию лелеяли, пестовали, получали за нее «трандюли», а когда москвичи ее «убивали», разбирали на цветмет – реально капали слезки. Потом были (у меня) электронные АТС: Iskratel SI-2000, SI-3000, АЛС и ТЕК.
41 год отработал в связи (последнее РосТелеком) и кроме, как быть связистом, чуть – чуть программировать больше ничего не умею. Все мои награды – Почетная Грамота от главы областной администрации, два инсульта и варикоз, ивалидность 2 гр.
 
несколько патчей одновременно при нажатии одной клавиши пока туговато, надо еще подумать
Наверное я не понимаю, в чем вопрос.
Так, как я это понял, решается самым примитивным образом - отправкой нескольких сообщений на одну клавишу:
usb_midi_0.send(noteOn...
usb_midi_1.send(noteOn...
usb_midi_2.send(noteOn...
...
передаются действительно без номера миди – канала:

classadafruit_midi.note_on.NoteOn(note, velocity=127, *, channel=None)
Я не знаю Пайтона, но по аналогии это как раз означает, что номер канала указать МОЖНО третьим параметром.
И еще неприятное известие: вот это "velocity=127" говорит о том, что Адафрут плохо знает спецификацию MIDI. Соответственно, вполне можно ожидать, что где-то что-то будет реализовано неправильно или нелогично с точки зрения MIDI. В общем, без оглядки эту библиотеку использовать нельзя - все нужно контролировать самому.
возможно обнаружится причина некорректной работы аудио устройства USB, хотя винда должна видеть мой девайс, как миди – устройство…
Вот это тот случай, за которые мне не нравятся интерпретаторы: нет никакого контроля до того, как зальешь в кристалл.
Вероятно, что-то где-то недоинициализируется или неправильно инициализируется, но вслепую сказать невозможно.
Про динамику и velocit – пока «упражняюсь» без этой функции, но обязательно БУДЕТ!
Это непонятно.
Если есть аппаратная возможность, то это ПЕРВАЯ функция, которую нужно реализовывать.
Для реализации режима динамической индикации
Я совместил динамическую индикацию со сканированием матрицы клавиатуры.
Зато теперь имею то, что имею - Raspberry Pi Pico! Хорошо бы, чтобы кто - то пинал в пятую точку почаще
Я, если даже доберусь до RPP, вряд ли буду связываться с Пайтоном.
как это может работать, не может!!!
Это сложный вопрос.
Скорость движения клавиши определяется по времени между замыканием двух контактов в группе, расположенной под этой клавишей.
У любых механических контактов есть такая неприятная особенность как дребезг. Дребезг - это многократное замыкание/размыкание контактов при нажатии или отпускании кнопки/клавиши. Возникает из-за упругости контактов, удара их друг от друга, сопровождающегося отскакиванием.
С дребезгом можно бороться либо аппаратно, либо программно.
Аппаратный способ требует контактов на переключение (а не на замыкание, т.е. 3 вывода вместо 2-х) плюс триггер.
Программный - после изменения состояния (замыкания или размыкания) немного подождать и повторно опросить.
Рекомендуемое время ожидания для обычной тактовой кнопки 50-100 мс.
Сравнивая величину интервала времени, который нам нужно измерить (от 1-2 мс) с временем подавления дребезга (50-100 мс) , приходим к выводу, что это сделать невозможно.
Другими словами, сделать динамическую клавиатуру на первых попавшихся контактах НЕВОЗМОЖНО. Из всех возможных разновидностей контактов использовать можно только те, которые либо вообще не имеют дребезга (а есть ли такие в природе?), либо имеют время дребезга существенно менее 1 мс.
Как с этим у герконов, я не знаю.
Подозреваю, что использование в промышленности резиновых контактов связано именно с тем, что никакие другие типы контактов не обеспечивают приемлемое время дребезга.
Вот как-то так.
Я 17 лет отработал на АТСКЭ КВАНТ
41 год отработал
У меня электроника является хобби со школы, но профессионально я никогда с ней не сталкивался.
В отличие от программирования, которое является частью моей профессии.
ивалидность 2 гр.
Вот как раз это - имеется.
 
Последнее редактирование:
Наверное я не понимаю, в чем вопрос.
Так, как я это понял, решается самым примитивным образом - отправкой нескольких сообщений на одну клавишу:
usb_midi_0.send(noteOn...
usb_midi_1.send(noteOn...
usb_midi_2.send(noteOn...
...

Я не знаю Пайтона, но по аналогии это как раз означает, что номер канала указать МОЖНО третьим параметром.
И еще неприятное известие: вот это "velocity=127" говорит о том, что Адафрут плохо знает спецификацию MIDI. Соответственно, вполне можно ожидать, что где-то что-то будет реализовано неправильно или нелогично с точки зрения MIDI. В общем, без оглядки эту библиотеку использовать нельзя - все нужно контролировать самому.

Вот это тот случай, за которые мне не нравятся интерпретаторы: нет никакого контроля до того, как зальешь в кристалл.
Вероятно, что-то где-то недоинициализируется или неправильно инициализируется, но вслепую сказать невозможно.

Это непонятно.
Если есть аппаратная возможность, то это ПЕРВАЯ функция, которую нужно реализовывать.

Я совместил динамическую индикацию со сканированием матрицы клавиатуры.

Я, если даже доберусь до RPP, вряд ли буду связываться с Пайтоном.

Это сложный вопрос.
Скорость движения клавиши определяется по времени между замыканием двух контактов в группе, расположенной под этой клавишей.
У любых механических контактов есть такая неприятная особенность как дребезг. Дребезг - это многократное замыкание/размыкание контактов при нажатии или отпускании кнопки/клавиши. Возникает из-за упругости контактов, удара их друг от друга, сопровождающегося отскакиванием.
С дребезгом можно бороться либо аппаратно, либо программно.
Аппаратный способ требует контактов на переключение (а не на замыкание, т.е. 3 вывода вместо 2-х) плюс триггер.
Программный - после изменения состояния (замыкания или размыкания) немного подождать и повторно опросить.
Рекомендуемое время ожидания для обычной тактовой кнопки 50-100 мс.
Сравнивая величину интервала времени, который нам нужно измерить (от 1-2 мс) с временем подавления дребезга (50-100 мс) , приходим к выводу, что это сделать невозможно.
Другими словами, сделать динамическую клавиатуру на первых попавшихся контактах НЕВОЗМОЖНО. Из всех возможных разновидностей контактов использовать можно только те, которые либо вообще не имеют дребезга (а есть ли такие в природе?), либо имеют время дребезга существенно менее 1 мс.
Как с этим у герконов, я не знаю.
Подозреваю, что использование в промышленности резиновых контактов связано именно с тем, что никакие другие типы контактов не обеспечивают приемлемое время дребезга.
Вот как-то так.


У меня электроника является хобби со школы, но профессионально я никогда с ней не сталкивался.
В отличие от программирования, которое является частью моей профессии.

Вот как раз это - имеется.
Добрый день, Сергей, sandriano!

Мы, оказывается, почти родственные души, и наклонности у нас одинаковые… Я с 1959 года выпуска и нашему выпуску, если помнишь, к пенсионному возрасту было добавлено 6 месяцев. Но я вовремя успел на этот поезд (на пенсию), правда в последний вагон, но успел. Оставалось еще 9 месяцев до пенсии, но на очередной комиссии МСЭ «присвоили» вторую группу (после третьей); в отделе персонала состоялся разговор по поводу моего дальнейшего пребывания в должности (ведущего инженера, штатную должность главного РосТелеком упразднил из экономии). И меня выгнали (отправили на пенсию по обоюдному согласию, в связи с*…), попутно выдали 4 оклада.

Я радовался – только жизнь начинается! Буду ездить на моей старенькой, как и я ВАЗ-21102 на природу, мечтать вечерами в беседке, строить проекты…

Но на самом деле все оказалось не так, не зря же дают 2 гр. «Езжу» по дому на двух костылях, зато у меня есть преимущество – полный привод: задний мост (неполный) и передний мост ведущий (костыли). Черный юмор, грустный…Я любитель, видите ли, музицировать на клаве всеми десятью пальчиками. Но вот незадача: после второго инсульта (2021 г.) левая рука уже не может синхронно успевать за правой, отдельно я ее конечно дрессирую. Но ничего, мы еще покувыркаемся, будет и на нашей улице праздник!

Есть розовая мечта: пристроить на нижний мануал автоаккомпанемент в помощь левой руке. Видел много «самоиграек» от наших китайских товарищей, но все это совершенно не нравится. В молодости приходилось, кроме клавишей, играть на соло гитаре, БАС гитаре, саксофоне…Вот только чтобы басовые ходы, импровизации в автоаккомпанементе были моими!

Есть Band-in- Band-in-a-Box - 2023 Build 1003 + Realband 2023 https://rsload.net/soft/editor/38061-band-in-a-box.html , но все это довольно сложно и запутанно, неприменимо при игре в реальном масштабе времени.
Надо что – то свое, но из Band-in- Band- in-a-Box можно использовать стили, сэмплы.
- Скачать Band-in-a-Box 2023 Build 1003 + Realband 2023 бесплатно + crack (1,5 ГГб). Пароль на все архивы: rsload. –
И еще добавить «лупер» ( Looper ) или секвенсор, повторять фрагменты – опять же для инвалида – левой руки…
 
Добрый день, Сергей, sandriano!

Мы, оказывается, почти родственные души, и наклонности у нас одинаковые… Я с 1959 года выпуска и нашему выпуску, если помнишь, к пенсионному возрасту было добавлено 6 месяцев. Но я вовремя успел на этот поезд (на пенсию), правда в последний вагон, но успел. Оставалось еще 9 месяцев до пенсии, но на очередной комиссии МСЭ «присвоили» вторую группу (после третьей); в отделе персонала состоялся разговор по поводу моего дальнейшего пребывания в должности (ведущего инженера, штатную должность главного РосТелеком упразднил из экономии). И меня выгнали (отправили на пенсию по обоюдному согласию, в связи с*…), попутно выдали 4 оклада.

Я радовался – только жизнь начинается! Буду ездить на моей старенькой, как и я ВАЗ-21102 на природу, мечтать вечерами в беседке, строить проекты…

Но на самом деле все оказалось не так, не зря же дают 2 гр. «Езжу» по дому на двух костылях, зато у меня есть преимущество – полный привод: задний мост (неполный) и передний мост ведущий (костыли). Черный юмор, грустный…Я любитель, видите ли, музицировать на клаве всеми десятью пальчиками. Но вот незадача: после второго инсульта (2021 г.) левая рука уже не может синхронно успевать за правой, отдельно я ее конечно дрессирую. Но ничего, мы еще покувыркаемся, будет и на нашей улице праздник!

Есть розовая мечта: пристроить на нижний мануал автоаккомпанемент в помощь левой руке. Видел много «самоиграек» от наших китайских товарищей, но все это совершенно не нравится. В молодости приходилось, кроме клавишей, играть на соло гитаре, БАС гитаре, саксофоне…Вот только чтобы басовые ходы, импровизации в автоаккомпанементе были моими!

Есть Band-in- Band-in-a-Box - 2023 Build 1003 + Realband 2023 https://rsload.net/soft/editor/38061-band-in-a-box.html , но все это довольно сложно и запутанно, неприменимо при игре в реальном масштабе времени.
Надо что – то свое, но из Band-in- Band- in-a-Box можно использовать стили, сэмплы.
- Скачать Band-in-a-Box 2023 Build 1003 + Realband 2023 бесплатно + crack (1,5 ГГб). Пароль на все архивы: rsload. –
И еще добавить «лупер» ( Looper ) или секвенсор, повторять фрагменты – опять же для инвалида – левой руки…
Вдогонку sandriano.
Функция velocity в Adafruit MIDI управляема и может иметь значения =0-127.
А вот встроенной на плате Raspberry Pi Pico Flash-памяти - 2 МБ явно для автоаккомпанемента не хватит. Тем более, что интерпретатор Сircuitpython вместе с библиотеками пишется в эту самую Flash-памяти – почти 1,5 МБ!
Зато при этом имеется одно преимущество и оно подкупает: просто пишешь текст ПРГ и сохраняешь на диске «Сircuitpython» это 2 МБ Flash-памяти. Все сразу работает (ИЛИ не работает)! Ни тебе компиляции, ни прошивки на программаторе! Но все – таки лучше бы, чтобы все это было – так привычнее…
Придется видимо, дозаказывать Raspberry Pi Pico с 8 МБ или даже 16 МБ (дороговато однако для пенсионеров!). И «раскручивать» второе ядро ARM Cortex-M0+ у RP2040.

А про дребезг – это целая область в науке про электрические контакты…
Например, в КВАНТе при наборе номера с импульсного номеронабирателя токовые посылки «заполнялись» частотой 2,4 кГц, и уже анализировались эти изменения уровня. А номеронабиратели бывают с грязными контактами, ржавые, кривые и совсем «убитые» и все работало. Я научился набирать 10- ти значные междугородние номера (+ 11 – ый знак префикс «8») пальцами.

В варианте на AT89S8252 пытался использовать метод «мажоритарности по модулю =3, т. е. при совпадении при сканировании трех отсчетов (3 соседних цикла или двух у меня) результат принимает значение последнего. Но при этом измерение времени «перелета» среднего контакта или разницы времени срабатывания двух соседних контактных пар принципиально не возможно. Поэтому применил метод программной задержки, причем пауза – константа, была изменяемой (а также паузы между передачей midi – посылок). В моем проекте этими константами можно «поиграться» на ходу, ни прибегая к перепрограммированию.
Разница по времени срабатывания герконов 1,5-2 мс – это было у меня при быстром ударе по клавише. Реально все работало, и причем довольно сносно.
 
Вдогонку sandriano.
Функция velocity в Adafruit MIDI управляема и может иметь значения =0-127.
А вот встроенной на плате Raspberry Pi Pico Flash-памяти - 2 МБ явно для автоаккомпанемента не хватит. Тем более, что интерпретатор Сircuitpython вместе с библиотеками пишется в эту самую Flash-памяти – почти 1,5 МБ!
Зато при этом имеется одно преимущество и оно подкупает: просто пишешь текст ПРГ и сохраняешь на диске «Сircuitpython» это 2 МБ Flash-памяти. Все сразу работает (ИЛИ не работает)! Ни тебе компиляции, ни прошивки на программаторе! Но все – таки лучше бы, чтобы все это было – так привычнее…
Придется видимо, дозаказывать Raspberry Pi Pico с 8 МБ или даже 16 МБ (дороговато однако для пенсионеров!). И «раскручивать» второе ядро ARM Cortex-M0+ у RP2040.

А про дребезг – это целая область в науке про электрические контакты…
Например, в КВАНТе при наборе номера с импульсного номеронабирателя токовые посылки «заполнялись» частотой 2,4 кГц, и уже анализировались эти изменения уровня. А номеронабиратели бывают с грязными контактами, ржавые, кривые и совсем «убитые» и все работало. Я научился набирать 10- ти значные междугородние номера (+ 11 – ый знак префикс «8») пальцами.

В варианте на AT89S8252 пытался использовать метод «мажоритарности по модулю =3, т. е. при совпадении при сканировании трех отсчетов (3 соседних цикла или двух у меня) результат принимает значение последнего. Но при этом измерение времени «перелета» среднего контакта или разницы времени срабатывания двух соседних контактных пар принципиально не возможно. Поэтому применил метод программной задержки, причем пауза – константа, была изменяемой (а также паузы между передачей midi – посылок). В моем проекте этими константами можно «поиграться» на ходу, ни прибегая к перепрограммированию.
Разница по времени срабатывания герконов 1,5-2 мс – это было у меня при быстром ударе по клавише. Реально все работало, и причем довольно сносно.
И еще, sandriano!
Я думаю, мы будем подружиться.
Намерения и помыслы у нас похожие. Если можно, черкни пару строк про себя.

А про механические контакты – это такая гадость, фу! («Какая же гадость – эта ваша заливная рыба!» из фильма Ирония судьбы, или С легким паром!)
Можно же использовать например оптику, но мечтать не вредно.
«Я его слепила из того, что было»: - как пела Алёна Апина. У меня тоже все лепится из того, что было.

Есть у меня товарищ по переписке (контроллеры, midi) в ВК, Нижний Новгород. Он намерен реализовать проект клавы со сканированием этой самой оптикой, и даже для экономии (потребляемого тока) зажигать Led - светодиод (или светодиоды) под клавишей только в момент сканирования.
Как - то я ему сообщил, что мой младший сын уже больше года служит и участвует в СВО – Луганск. Мне ответили, что политикой принципиально не интересуются, и если я буду «писать что - то в подобном роде» - общение со мной будет прекращено. Вот как!
 
Вот только чтобы басовые ходы, импровизации в автоаккомпанементе были моими!
Я здесь вижу чуть ли не единственный, и, кстати, хорошо отработанный вариант - писать последовательно дорожку за дорожкой все партии, причем, большую часть из них - в MIDI.
А вот встроенной на плате Raspberry Pi Pico Flash-памяти - 2 МБ явно для автоаккомпанемента не хватит. Тем более, что интерпретатор Сircuitpython вместе с библиотеками пишется в эту самую Flash-памяти – почти 1,5 МБ!
А этого я не понял. Если писать в MIDI, то получается весьма компактно. Например, из имеющихся у меня MIDI файлов самый большой - около 800 кбайт. А бОльшая часть - от единиц до десятков кабйт.
В варианте на AT89S8252 пытался использовать метод «мажоритарности по модулю =3, т. е. при совпадении при сканировании трех отсчетов (3 соседних цикла или двух у меня) результат принимает значение последнего. Но при этом измерение времени «перелета» среднего контакта или разницы времени срабатывания двух соседних контактных пар принципиально не возможно. Поэтому применил метод программной задержки, причем пауза – константа, была изменяемой (а также паузы между передачей midi – посылок). В моем проекте этими константами можно «поиграться» на ходу, ни прибегая к перепрограммированию.
Что за метод, я не знаю, а потому и всего последующего не понял.
Если можно, черкни пару строк про себя.
Не думаю, что форум - подходящее для этого место.
Напишу в ЛС.
и даже для экономии (потребляемого тока) зажигать Led - светодиод (или светодиоды) под клавишей только в момент сканирования.
Если зажигать светодиод только в момент сканирования, то так можно еще и сэкономить на "светоизоляции" отдельных пар.
 

Сейчас просматривают