Как собрать клон Yamaha DX7 за 10$

в 14:30, , рубрики: Raspberry Pi, rp2040, yamaha, Yamaha DX7, ретро, Синтезатор

В этой статье я расскажу как и из каких компонентов можно самостоятельно изготовить клон знаменитого синтезатора Yamaha DX7.

Как собрать клон Yamaha DX7 за 10$ - 1

Статья рассчитана в основном на новичков и энтузиастов ретро музыкальных инструментов. Чуда не ждите :)

Около 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. 

Как собрать клон Yamaha DX7 за 10$ - 2

Его цена примерно 3-4$. I2S PCM5102 - 3-4$. 

Разъем MIDI и разъем питания 1-2$. 

Микросхема оптоизолятор такая как 6N137, 6N138 или H11L1, это еще 1$, и пара резисторов, 0,2$. 

Корпус можно изготовить из чего угодно. Итого, цена составит примерно 10$. Многое из этого у меня уже было, и цена для меня составила 3$, за RP2040.

В этом устройстве качество звука ничем не уступает вышеописанному, но количество одновременно звучащих нот- меньше. 

Органы управления и экран отсутствуют. Управление осуществляется только по MIDI. 

На корпусе устройства присутствуют только кнопка включения, аудио выход, MIDI вход и разъем питания.

Несмотря на это я остановился именно на этом варианте. 

Схема MIDI In:

Как собрать клон Yamaha DX7 за 10$ - 3

Схема подключения PCM5102:

Как собрать клон Yamaha DX7 за 10$ - 4

Так как MIDI контроллер у меня уже есть, а для тех у кого его нет, есть простой вариант построения MIDI контроллера на базе Arduino, с кнопками переключения пресетов и банков.

Вот отредактированный код для построения MIDI контроллера для переключения банков звуков и тембров/инструментов. 

Я использовал Arduino Nano.

Как собрать клон Yamaha DX7 за 10$ - 5

2 кнопки используются для изменения тембров, +1 и -1.

2 кнопки для переключения банков. +1 и -1.

Для большей универсальности добавил кнопки выбора MIDI канала. +1, -1 и 16 канал.

Вот примерная схема:

Как собрать клон Yamaha DX7 за 10$ - 6

Код для прошивки 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://diyelectromusic.com/2024/01/09/raspberry-pi-pico-synth_dexed/

  • https://diyelectromusic.com/2024/02/18/raspberry-pi-pico-synth_dexed-part-5/

  • MiniDexed

  • PicoDexed

  • MicroDexed

Автор: sinitsinmike

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js