В этой статье я расскажу как и из каких компонентов можно самостоятельно изготовить клон знаменитого синтезатора Yamaha DX7.
Статья рассчитана в основном на новичков и энтузиастов ретро музыкальных инструментов. Чуда не ждите 🙂
Около 10 лет назад в моей коллекции был этот синтезатор, но при переезде мне пришлось продать многие из своих инструментов.
Теперь предо мной стоит задача восстановить свою коллекцию. И при этом за минимальный бюджет.
Я решил начать с самого простого и дешевого варианта из доступных- самодельный клон Yamaha DX7. Поискав в интернете я наткнулся на несколько готовых решений.
1. MiniDexed. https://github.com/probonopd/MiniDexed
2. PicoDexed. https://github.com/diyelectromusic/picodexed
3. MicroDexed. https://codeberg.org/dcoredump/MicroDexed.
Вариант №3 отпал сразу, так как он базируется на Teensy, дорогой и труднодоступный компонент.
Так же есть вариант MicroDexed на ESP32, но проект сырой, полифония урезана, и в таком виде, без доработки, реализовывать его не имеет смысла.
Итак, вариант №1: MiniDexed.
Всего этот клон DX7 имеет 8 банков звуков по 32 инструмента в каждом.
Для его сборки понадобится Raspberry Pi 3,4 или Raspberry Pi Zero 2w.
Примерная цена компонентов для сборки- 50$. Зависит от выбранной версии Raspberry.
В этом случае мы получим довольно удобное устройство с экраном LCD 1620, кнопками, MIDI входом и выходом.
Оно совместимо с оригинальными банками звуков, позволяет изменять параметры звука в реальном времени посредством внешнего MIDI контроллера. (Предполагается что он у вас уже есть).
Это устройство является модулем и не имеет своей собственной клавиатуры. Соответственно для его использования понадобится MIDI клавиатура, либо MIDI USB шнур, для управления им с компьютера.
Вместо профессиональной MIDI клавиатуры можно использовать и любой старенький детский синтезатор, главное чтоб на нем был MIDI OUT разъём.
Но есть и более дешевый вариант.
№2: PicoDexed. Для его сборки понадобится RP2040.
Его цена примерно 3-4$. I2S PCM5102 — 3-4$.
Разъем MIDI и разъем питания 1-2$.
Микросхема оптоизолятор такая как 6N137, 6N138 или H11L1, это еще 1$, и пара резисторов, 0,2$.
Корпус можно изготовить из чего угодно. Итого, цена составит примерно 10$. Многое из этого у меня уже было, и цена для меня составила 3$, за RP2040.
В этом устройстве качество звука ничем не уступает вышеописанному, но количество одновременно звучащих нот- меньше.
Органы управления и экран отсутствуют. Управление осуществляется только по MIDI.
На корпусе устройства присутствуют только кнопка включения, аудио выход, MIDI вход и разъем питания.
Несмотря на это я остановился именно на этом варианте.
Схема MIDI In:
Схема подключения PCM5102:
Так как MIDI контроллер у меня уже есть, а для тех у кого его нет, есть простой вариант построения MIDI контроллера на базе Arduino, с кнопками переключения пресетов и банков.
Вот отредактированный код для построения MIDI контроллера для переключения банков звуков и тембров/инструментов.
Я использовал Arduino Nano.
2 кнопки используются для изменения тембров, +1 и -1.
2 кнопки для переключения банков. +1 и -1.
Для большей универсальности добавил кнопки выбора MIDI канала. +1, -1 и 16 канал.
Вот примерная схема:
Код для прошивки MIDI контроллера:
#include <MIDI.h> // #include MIDI_CREATE_DEFAULT_INSTANCE(); byte patchNum = 1; byte midiCh = 1; byte bankNum = 1; void setup() { pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(5, INPUT_PULLUP); pinMode(6, INPUT_PULLUP); pinMode(7, INPUT_PULLUP); pinMode(8, INPUT_PULLUP); pinMode(9, INPUT_PULLUP); pinMode(10, INPUT_PULLUP); //pinMode(11, INPUT_PULLUP); // Uncomment this line for 1 more button //pinMode(12, INPUT_PULLUP); // Uncomment this line for 1 more button MIDI.begin(MIDI_CHANNEL_OMNI); } void loop() { //Serial.print(patchNum); //bankNum, midiCh); if (digitalRead(5) == LOW && patchNum <= 126) { bankNum; // patchNum++; // advance patch number +1 MIDI.sendControlChange(32, bankNum, midiCh); //Send CC MIDI.sendProgramChange(patchNum, midiCh); // Send PC delay(150); } if (digitalRead(2) == LOW && patchNum >= 1) { bankNum; patchNum--; // decrease patch number -1 MIDI.sendControlChange(32, bankNum, midiCh); MIDI.sendProgramChange(patchNum, midiCh); delay(150); } if (digitalRead(6) == LOW && patchNum <= 126) { patchNum++; MIDI.sendProgramChange(patchNum, midiCh); delay(150); } if (digitalRead(3) == LOW && patchNum >= 1) { patchNum--; MIDI.sendProgramChange(patchNum, midiCh); delay(150); } if (digitalRead(7) == LOW && bankNum <= 7) { bankNum++; // patchNum=0; Uncomment to reset program # to 0 MIDI.sendControlChange(32,bankNum, midiCh); // MIDI.sendProgramChange(patchNum, midiCh); // Uncomment to send Program Change 0 delay(150); } if (digitalRead(4) == LOW && bankNum >= 1){ bankNum--; //patchNum=0; Uncomment to reset program # to 0 MIDI.sendControlChange(32, bankNum, midiCh); // MIDI.sendProgramChange(patchNum, midiCh); // Uncomment to send Program Change 0 delay(150); } if (digitalRead(10) == LOW && midiCh < 16) { midiCh++; // Increase MIDI CH +1 delay(200); } if (digitalRead(8) == LOW) { // if(digitalRead(chan)) midiCh= 1; midiCh = 16; // MIDI CH=16 delay(200); } if (digitalRead(9) == LOW && midiCh > 1) { midiCh--; // Lower MIDI CH -1 delay(200); // } // if (digitalRead(11) == LOW) { // Uncomment if you want a separate button that resets instrument # to 0 // patchNum=0; // Uncomment to reset program # to 0 // MIDI.sendProgramChange(patchNum, midiCh); // Uncomment to send Program Change 0 } }
Ресурсы:
-
Notes&Volts
-
LMNC / Look mom no computer
-
-
ссылка на оригинал статьи https://habr.com/ru/articles/852042/
Добавить комментарий