Подключить клавиатуру как клавиши пианино

Делаем MIDI-клавиатуру из старого детского синтезатора

В один из дней, возвращаясь домой, возле мусоропровода в подъезде я увидел старую детскую игрушку-синтезатор. Прошел мимо, так как брать с мусорки «грешно», но в душе захотелось утащить ее оттуда. Уже поздно ночью, где-то часа в 2 я решил посмотреть, не стоит ли она все еще там. И да, она все еще была там! С виду она был вполне целой и чистой, так что никакой брезгливости, чтобы не забирать ее не было. Так что да, я ее забрал.

Давно хотел себе пианино, я не профессиональный музыкант, но просто побаловаться — почему нет? Покупать что-то «ради побаловаться» меня «душила жаба», а тут — халявная игрушка. Когда я ее забирал с мусорки, то даже мысли не было пользоваться ей как детской игрушкой, была сразу мысль: «О-о-о…, хорошая база, чтобы попробовать сделать MIDI-клавиатуру».
Так как у меня уже есть некоторый опыт общения с профессиональными клавишными инструментами и MIDI-клавиатурами, то я сразу понимал все минусы моей идеи. То есть игрушка по факту так игрушкой и останется. На базе нее невозможно будет реализовать силу нажатия клавиш. Сами «легкие» пластиковые клавиши, которые к тому же еще и неполноразмерные не дадут возможности что-то на ней достойно исполнять.

В первую очередь синтезатор-игрушка была разобрана «до винтика», хорошо вымыт с мылом весь пластик. Также почищены платы и контактные группы клавиш.

После разборки пришло понимание, почему люди ее выкинули. У игрушки (не знаю от чего: от времени, от китайского качества комплектующих или жесткой эксплуатации) во-первых: развалились встроенные динамики, а во-вторых: в разъеме наушников торчал отломанный разъем от них, так что вытащить его не было практически никакой возможности. Наверное, после того как игрушка перестала играть встроенными динамиками, ей пользовались с наушниками, а потом после того как и там сломали разъем – просто выкинули.

Внутри игрушка-синтезатор состояла из трех плат, которые между собой были спаяны шлейфом проводов. Центральная плата, которая отвечала за генерацию звука и прочего, была сразу же отпаяна от двух других плат и отложена в сторону. На двух других платах находились контакты для кнопок на лицевой панели игрушки и непосредственно самих клавиш пианино. К ним я припаял разъемы PBS, тем более что шаг отверстий на платах как раз был 2.54 мм.

После этого я потратил пару часов на составление схем этих плат с клавишами. Как выяснилось, схема представляет простую матричную клавиатуру.

На картинке в желтых кружочках цифры – это номера контактов «горизонталей», а цифры на клавишах – номера контактов «вертикалей» в разъеме PBS-13 на плате клавиатуры.

После этого все это было закинуто в угол и пылилось целый год. И тут наступил период самоизоляции… Стало скучно и захотелось что-то поделать своими руками, тем более что ходить некуда, да и нельзя…

В итоге решил все-таки попробовать хоть немного доделать эту игрушку. В качестве основы для контроллера взята плата Arduino, а так как количество цепей клавиш больше, чем количество выводов Arduino UNO, то решил использовать сдвиговые регистры 74HC595 и 74HC165. В итоге получилась вот такая схема.

Схема была изначально собрана на беспаечной макетной плате. Для проверки работоспособности схемы (что нигде нет ошибок в соединениях) разработана тестовая программа, которая показала, что вроде как все работает. Алгоритм тестовой программы был простой: включается один из выходов микросхемы сдвигового вывода и считываются в цикле значения с микросхемы сдвигового ввода, нажимая при этом клавиши. На первый взгляд ничего не предвещало беды… и вроде бы все прекрасно работало…

Следующие несколько дней я не спеша занимался «домашним творчеством», а именно, аккуратно распаивал все компоненты платы на макетную плату. Собирал это все из того, что было у меня дома. В качестве управляющей платы взял Arduino NANO.

Такой «бутерброд» из плат обусловлен тем, что две платы игрушки (одна с кнопками, а вторая с клавиатурой) расположены на разном уровне и я, прежде чем паять все это подумал: «а нельзя ли это как-то соединить между собой, используя те компоненты, которые есть у меня дома, чтобы выглядело более или менее хорошо»? Так и получилась эта конструкция из двух плат, соединенных между собой разъемами. С моей точки зрения для домашнего варианта, когда сидим в самоизоляции, получилось достаточно хорошо. Пришлось только обрезать макетную плату и чуть-чуть доработать корпус игрушки, чтобы можно было подключать кабель USB в плату Arduino.

Осознание что устройство работает не совсем так, как я хотел, пришло тогда, когда доработал тестовую программу. Алгоритм был простой: по очереди включить каждый выход микросхемы 74HC595, считав при этом состояние входов у микросхемы 74HC165, и записать результат в отдельные переменные. Всего на клавиатуру подключено 5 выходов 74HC595, поэтому в итоге я получил 40 бит (5*8) данных после этого опроса. Строка из 40 бит выводилась в консоль, и нажимались клавиши, чтобы посмотреть, как устройство обрабатывает одновременные нажатия нескольких клавиш.

Тут-то и всплыла проблема: если нажимать по одной клавише, то все было отлично, но при попытке нажать более 2-х клавиш одновременно возникала ситуация, когда невозможно было предугадать, что будет прочитано. Результат мог быть правильным при одном сочетании, а при другом мог быть совсем непредсказуем. Проблема была в том, что не была учтена особенность данной схемы. При нажатии нескольких клавиш одновременно происходит замыкание не только нескольких вертикалей сканирования клавиатуры (это допустимо), но и могут быть замкнуты через клавиши несколько горизонталей (что никак не допустимо). Более подробно об этой проблеме и о способах ее решения можно почитать вот здесь.

Я выбрал «кардинальное решение» проблемы, а именно: решил, что на каждую клавишу в клавиатуре будет поставлено по диоду.

В голове я уже мысленно начал думать, как мне придется перерезать дорожки на плате и ставить в разрыв диод в SMD корпусе. Залез в свои запасники и увидел, что диодов в SMD корпусе в таком количестве у меня просто нет (не забываем, что все мы сидим на самоизоляции и поход в магазин за радиодеталями не очень возможен – так как это точно не предметы первой необходимости). Немного расстроившись, решил более внимательно посмотреть на плату: может быть есть возможность поставить на часть дорожек выводные диоды (их тоже какое-то количество у меня было). И тут я увидел, что у каждой клавиши, есть перемычка (плата односторонняя) и схема сделана так, что вместо этой перемычки можно поставить по диоду. Сразу же подумалось – даже и ничего резать не надо, надо только везде поставить вместо перемычек выводные диоды. Такого количества выводных диодов у меня тоже не было. В голове мелькнула мысль: «а может быть поставить светодиоды»? Работа схемы идет на уровне +5V и если поставить красные светодиоды, у которых минимальное падение напряжения (среди светодиодов), то в итоге должно хватать логического уровня для правильного определения: нажата клавиша или нет.

С этой мыслью я снова полез в свои запасы и выгреб откуда только можно было красных светодиодов. Их оказалось ровно столько, сколько клавиш на клавиатуре! Это знак, подумал я, и впаял для пробы несколько светодиодов вместо перемычек. Результаты тестирования показали, что решение рабочее. После этого запаял остальные светодиоды вместо перемычек. Тестовая программа показала, что можно нажать хоть все клавиши одновременно, и они все считываются правильно.

На дополнительные кнопки, которые есть на игрушке, решил не ставить диоды, потому что вряд ли их будут нажимать сразу несколько штук одновременно. Тем более что в программе у меня пока нет обработки нажатий на эти кнопки. Ну и я банально пока не придумал, как их использовать.

Настало время разобраться с тем, как сделать, чтобы это устройство виделось в компьютере как MIDI-клавиатура и в каком формате нужно отправлять данные.

Информация, найденная в интернете, говорила мне о том, что можно из Arduino сделать MIDI-клавиатуру очень легко и просто, если залить в нее прошивку, которая заставит компьютер видеть ее не как COM-порт, а именно как MIDI-клавиатуру. Изначально я на это решение и ориентировался, особо не вдаваясь в то, как оно реализовано.

Теперь, когда я добрался до него и внимательно прочитал, то понял, что моя плата Arduino NANO не подойдет для этого решения, так как у нее COM порт был реализован на базе микросхемы CH340. Для использования прошивки по ссылке выше подойдут только те платы, где USB-порт уже есть на контроллере (например: AtMega32u4) или же общение по COM-порту сделано не на микросхемах преобразования типа FT232RL и им подобным, а на микроконтроллерах AtMega. Поэтому прошивка в плате должна отдать данные в формате MIDI в COM порт, а на компьютере придется установить и настроить программное обеспечение, которое будет эти данные перехватывать и передавать в виртуальный MIDI-порт.
Алгоритм считывания клавиш и формирования MIDI-команд у меня получился следующий:

Нет смысла расписывать подробно, как работать с MIDI данными, потому что это можно прочитать здесь.

Остановлюсь чуть более подробно на программном обеспечении для компьютера и тех проблемах, с которыми я столкнулся. Проблемы возникли, просто из-за отсутствия нормальной документации на это программное обеспечение. Итак, для того, чтобы компьютер успешно мог принимать MIDI-данные с такого устройства как у меня, понадобится две программы: loopMIDI и Serial-Midi Converter. Для программы Serial-MIDI Converter дополнительно нужно установить Java, если на компьютере она не установлена.

Запускаем программу loopMIDI и создаем два виртуальных порта. Я назвал их «Arduino IN» и «Arduino OUT». Эта программа как раз и будет виртуальным MIDI-устройством.

Далее запускаем Serial-MIDI Converter и при запуске проходим процесс ее настройки. К сожалению, это приходиться делать каждый раз при запуске, но это не очень страшно, делается буквально в четыре нажатия на клавиатуре. Номер COM-порта может быть другой, он появляется на компьютере при подключении платы Arduino NANO. Скорость порта задается в прошивке Arduino NANO. Красными стрелками обозначены мои параметры, при которых у меня все работало.

Собственно на этом процесс настройки завершен и можно уже использовать какое-либо программное обеспечение, которое будет воспроизводить звуки, принимая нажатия клавиш от устройства. В настройках программного обеспечения необходимо выбрать в качестве входа «Arduino_OUT». На картинке ниже пример настройки Kontakt Player.

Работает в конечном итоге это вот так:

Что дальше? А дальше все произошло именно так, как я и ожидал – игрушка остается игрушкой ровно со всеми теми недостатками, о которых я упоминал в самом начале. Наверное, ребенку поиграть на таком будет в кайф, но вот взрослому человеку, после нормальных клавишных инструментов… Проще купить достаточно дешево любую MIDI-клавиатуру б/у и она будет на порядок лучше этой игрушки. Я решил оставить эту игрушку как она есть, но сделать некоторые модификации с ней:

  1. Оставить оригинальный корпус.
  2. Поставить исправные динамики и сделать усилитель для них.
  3. Сделать так, чтобы она работала в режиме «детской игрушки» без подключения к компьютеру, то есть, чтобы сама могла играть звуки.
  4. Сделать возможность подключения FootSwitch (та самая педаль на пианино внизу), чтобы можно было сделать удержание звука после отпускания клавиш, как на нормальном инструменте.
  5. Добавить в прошивке поддержку клавиш, которые сейчас не опрашиваются и не задействованы.
  6. Подключить в схему переменный резистор, который остался физически на панели игрушки-синтезатора, и добавить его функциональность в прошивку.

Реализацию большинства пунктов, пока все мы дружно «сидим дома», сделать не могу, так как у меня дома просто нет всех требуемых компонентов для этого.

Для реализации пункта 3 в интернете было найдено решение под названием SamplerBox. Суть проекта в том, что можно подключать любую MIDI-клавиатуру к плате Raspberry Pi, которая обрабатывает MIDI-команды с клавиатуры и воспроизводит звуки или переключает инструменты и т.д. Остается только поставить плату Raspberry Pi внутрь корпуса игрушки, без возможности замены SD-карты (не разбирая корпус), настроить кнопки на корпусе игрушки так, чтобы они переключали инструменты и этого будет достаточно, чтобы оставить этот проект в таком виде.

Но все это будет уже после того, когда закончится период самоизоляции.

Надеюсь, что кому-нибудь мой опыт окажется полезным.

Источник

Как подключить MIDI клавиатуру или синтезатор к FL Studio.

Как подключить MIDI клавиатуру или синтезатор к FL Studio.

Если у тебя есть какое-то MIDI устройство (успел обзавестись или досталось чудесным образом) – просто замечательно. MIDI клавиатуры (или в их роли простые синтезаторы), Drum Pad, различного рода контроллеры: заметно упрощают жизнь при написании музыки и просто исполнении. Если же у тебя нет ни чего из этого и ты мучаешься игрой на компьютерной клавиатуре, на первое время советую обзавестись простенькой MIDI клавиатурой или Drum Pad– все зависит от рода твоей деятельности в твоем секвенсоре FL Studio.

Что такое MIDI устройство?

Эти четыре символа расшифровываются как Musical Instrument Digital Interface, что в переводе значит Цифровой интерфейс музыкального инструмента. Теперь, я думаю, все стало на один слой понятнее! Это те устройства, с помощью которых ты можешь управлять звуковой информацией с программного обеспечения – удобным тебе образом (Иногда походя на музыкальные инструменты – я сейчас о MIDI клавиатурах и электронных барабанных установках). Так же MIDI это и есть специальный протокол, с помощью которого устройство и обменивается данными с программным обеспечением. Этот протокол совмещает в себе такую информацию как номер ячейки (регулятор, клавиша, кнопка и т.д.) сила нажатия на клавишу \ кнопку, длительность нажатия, установка статичного параметра.

Как подключить MIDI клавиатуру, синтезатор, Drum Pads и другие контроллеры.

На сегодня популярны 2 способа подключения MIDI устройств к компьютеру:

1) Через MIDI кабель, который выглядит следующим образом:

Обычно, подключение MIDI устройства сопровождается установкой драйвера для этого устройства – но в этом случае, при подключении через MIDI port, можно обойтись и без этого. Для начала стоит выключить и компьютер и MIDI устройство, потом подключить 15 – контактный D-Sub разъем в звуковую карту (если она на это рассчитана, если нет, то идем на способ номер 2). Затем если у тебя устройство по типу MIDI клавиатуры, контроллера или DrumPads– то нужно подключить MIDI In разъем кабеля в гнездо устройства MIDI Out. Если же у тебя устройство, по типу синтезатора – то так же потребуется подключить разъем кабеля MIDI Out в гнездо устройства MIDI In. Затем включаем все устройства.

2) Через USB кабель:

Этот способ, возможно, потребует установки драйверов для данного устройства, но здесь меньше канители с проводами – USB в устройство – USBв компьютер и не нужно ни чего на время отключать (к этому мы привыкли).

Теперь если индикатор(ы) на MIDI устройстве загорелись и сигнализируют о том что «есть контакт», то можно открывать FL Studio и переходить к настройке и нахождению в секвенсоре.

Как активировать MIDI устройство в FL Studio и настроить его.

Зайдя в секвенсор FL Studio (я буду показывать на примере последней, на сегодня версии FL Studio 12) тебе нужна будет вкладка Options– MIDI:

И возможно ты заметил сразу, возможно нет, если ты включил свое MIDI устройство, оно появиться у тебя уже в полях Output и Input в этом окне. В примере у меня виднеется самая простая USB Keystation 49e. И для передачи от MIDI устройства команд в секвенсор (то есть для игры или регуляции параметрами секвенсора) на нужно активировать это устройство в окне Input. Если еще нет вот такого желтого индикатора подключения устройства, напротив его наименования:

То нужно просто выделить это устройство и нажать команду Enable сразу под полем Input. Последующие распознание и активация подключенного устройства FL Studio 12 будет производить за тебя по умолчанию.

Что касается окна Output, то на это окно потребуется если у тебя такое устройство, на которое FL Studio может передавать сигналы (виртуальный синтезатор например), и активация происходит аналогично.

Выпадающее меню Controller Type, существует для определения FL Studio типа контроля для твоего устройства. В базе секвенсора есть определенное количество типов MIDI контроля для некоторых известных MIDI устройств (в 12-й версии FL Studio их еще больше). Если твое устройство есть в списке – то выбери конечно же свой тип, если нет – оставляй тип Generic Controller– это максимальное использование возможностей твоего устройства.

Теперь мы можем управлять секвенсором через MIDI устройство. Если нет ни какого звукового сигнала, просто нужно выделить инструмент на панели каналов, то, что в принципе ты хочешь воспроизводить.

Дополнительные функции и настройки в FL Studio MIDI Settings:

— Auto accept detected controller – функция автоматического принятия MIDI порта. Для того что бы секвенсор FL Studio автоматически распознавал определенный порт, нужно всего лишь повернуть одну из ручек (контроллеров) устройства.

— Support hold and sostenuto — это функция активации, при наличии специальной педали, задержки на нажимаемой ноте.

— Link note on velocity to – назначить команду о силе нажатия на.. (по умолчанию стоит на амплитудное значение каналов. Можно поменять на Mod X и Mod Y. В каналах семплера это два параметра фильтрации.

— Link release velocityto – Назначить силу отжатия ноты на… (по умолчанию стоит на само отжатие, и менять не советую))

Так же можно отрегулировать чувствительности кривых силы нажатия и отжатия – на более чувствительные и менее чувствительные, нажав на кнопки Edit Mapping Curve. (но как по мне так это лишнее)

— Refresh device list – проверка новых подключенных MIDI устройств.

Если при игре или работе с MIDI устройством, ты чувствуешь неудобство, по типу того что ты нажимаешь на клавишу или кнопку Drum Pad’а и звук хоть немного запаздывает – так быть не должно! Вероятнее всего у тебя нет драйверов ASIO4ALL, которые просто необходимы для комфортной работы в секвенсоре, или они есть – но не настроены должным образом. В любом случае быстро и навсегда разобраться с этой ситуацией тебе поможет ЭТА коротенькая статья!

Источник

Оцените статью