[Перевод] Делаем музыкальный инструмент из кассетного плеера

3442e5653297ad1e8d7f771b754130d8.jpg


Кассетный синтезатор

Мне нравятся необычные музыкальные проекты. Например, я выпустил альбом, основанный на записях, сделанных NASA во время миссии «Аполлон-12». А недавно я, для управления темпом музыки, использовал собственное сердцебиение. Результаты моих музыкальных экспериментов вы можете найти здесь.

Недавно я сделал из старого кассетного плеера, напоминающего Walkman от Sony, синтезатор, управляемый MIDI-командами. Для этого мне понадобилась плата Arduino и немного кода. То, что получилось, можно назвать «кассетным синтезатором».

Кассетный синтезатор работает, проигрывая монотонный звук (одну ноту), заранее записанный на кассету. Высотой звука можно управлять, она зависит от скорости проигрывания плёнки. К идее создания кассетного синтезатора меня привёл проект Onde Magnétique, а создатели этого проекта вдохновлялись идеей меллотрона.


Вот видео, в котором показано как я играю на кассетном синтезаторе, используя MIDI-клавиатуру.

Этот синтезатор хорош тем, что у него получается очень «аналоговое» звучание при смене нот. А именно, часто высота звука плавно меняется при переходе от ноты к ноте, звук, в результате, получается весьма интересным (то есть, в музыке, исполняемом на этом синтезаторе, часто встречается эффект портаменто). Кроме того, на плёнку можно записать абсолютно любой звук, поэтому синтезатор у меня получился достаточно универсальным.

Создание кассетного синтезатора


На самом деле, создать такой синтезатор очень просто. Мне попалось хорошее видео, посвящённое тому, как модифицировать кассетный плеер, сделав так, чтобы скоростью воспроизведения кассеты можно было бы управлять, используя регулятор напряжения. Я доработал имеющийся у меня плеер подобным образом. Я, кроме того, создал, на основе браузера, простой MIDI-контроллер, рассчитанный на то, чтобы получать нужные ноты путём модификации напряжения.

Нижеприведённые инструкции посвящены аппаратной части синтезатора, представленной плеером и Arduino, и программной, роль которой играет MIDI-контроллер.

Материалы


  • Кассетный плеер GE 3–5362A ($15, их очень много на eBay)
  • Arduino ($23).
  • Цифроаналоговый преобразователь MCP4725 ($11).
  • Аудиокабель с 3,5 мм разъёмом на одной стороне и с обычными проводами на другой ($8).
  • Соединительные провода (если у вас их нет, то стоят они $5).
  • Паяльник и то, что нужно для пайки ($25, пользоваться им можно будет всю жизнь).


Модификация плеера GE 3–5362A


Обратите внимание на то, что вам необязательно использовать плеер GE 3–5362A. Подойдёт любой плеер, который поддерживает переменную скорость воспроизведения. Если вы будете делать кассетный синтезатор на основе другого плеера — вам лишь понадобится разобраться с его внутренним устройством, и с тем, куда припаивать соответствующие провода.

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

d281ac4bec3c7e970bf1a87d57610f9a.jpg


Разобранный плеер, который уже модифицирован

Для того чтобы превратить плеер в кассетный синтезатор, нам понадобится припаять к нему два новых компонента. Первый — это провод, подключённый к Vin, с помощью которого мы сможем управлять скоростью проигрывания плёнки, используя регулятор напряжения. Второй — это аудиоразветвитель, подключённый к Line in, который позволит нам записывать звуки на кассету (это пригодится тем, у кого нет магнитофона).

Если вы не умеете паять — не переживайте. Это просто. Посмотрите это видео. Из него вы узнаете о том, как припаивать провода к контактным площадкам.

Подключение к Vin и организация управления скоростью протяжки ленты


Найдите на корпусе устройства колёсико с подписью Variable Speed Playback. Именно тут мы и будем припаивать пару проводов. Я предпочитаю использовать красный провод для «плюса», а коричневый или зелёный — для «минуса». Поэтому красный провод мы припаиваем к контактной площадке VS+, а провод другого цвета — к площадке, расположенной сразу под B+.

0d122ef25ae00c1bf72f00b0460d01d2.jpg


Провода, припаянные к контактной площадке VS+ и к площадке, расположенной около B+

Обратите внимание на то, что я в подобных ситуациях, использую кабели с Female-разъёмами на одном конце. К ним очень удобно что-нибудь подключать.

Подключение к Line in для организации записи звука на кассету


Теперь нужно найти контактные площадки MIC- и MIC+, к которым припаяны красный и чёрный провода от микрофона. Эти провода можно просто отпаять и припаять к данным площадкам провода аудиокабеля. Красный — к MIC+, чёрный — к MIC-.

75e9fad71f3f662b9bbbe030c151c651.jpg


Провода, припаянные к MIC- и MIC+

Запись монотонного звука на кассету


Теперь можно вставить кассету в плеер и записать на неё звук, подключившись к Line in! Записать можно звучание любой ноты. Как правило, начать эксперименты можно с ноты «до». Запись должна быть достаточно длинной — 30 минут или что-то около того (тут, кстати, пригодилась бы кассета с плёночной петлёй). Обратите внимание на то, что на кассету надо записать лишь один тон, так как именно высоту этого тона мы будем изменять, управляя скоростью воспроизведения записи.

d2227953717bc355a4e93b3151ad2edd.jpg


Запись звука на кассету с помощью OP-1

Подготовка Arduino для использования в роли MIDI-интерфейса


Arduino служит посредником между MIDI-интерфейсом и цифроаналоговым преобразователем, отвечающим за изменение напряжения. MIDI-клавиатура подключена к компьютеру. Сигналы от клавиатуры принимает программа, работающая в Chrome. Она обращается к серверу, который отправляет данные об изменении напряжения на Arduino, а Arduino передаёт соответствующие сигналы цифроаналоговому преобразователю, который и управляет скоростью воспроизведения кассеты на плеере.

600d172fefef9ffb0cefa0e0b278ee23.png


Подключение цифроаналогового преобразователя MCP4725 к Arduino

Для начала нужно подключить MCP4725 к Arduino, воспользовавшись вышеприведённой схемой. MCP4725 — это цифроаналоговый преобразователь, которым можно управлять с Arduino. Контактную площадку OUT преобразователя надо соединить с красным проводом, который мы ранее припаяли к плееру. Другой провод надо подключить к контакту GND на Arduino.

Код, обеспечивающий взаимодействие компьютера и Arduino, обменивается с устройством данными, отправляя ему сведения о том, как нужно изменить напряжение. Например, если Arduino получит команду dac.setVoltage(newVolts, 1), то MCP4725 выдаст напряжение newVolts. Вот код:

#include 
#include 

Adafruit_MCP4725 dac;
String sdata = ""; // инициализация пустой строкой.
bool started = false;
void setup(void) {
  Serial.begin(9600);

  // Для Adafruit MCP4725A1 адрес - это 0x62 (по умолчанию) или 0x63 (пин ADDR связан с VCC)
  // Для MCP4725A0 адрес - это 0x60 или 0x61
  // Для MCP4725A2 адрес - это 0x64 или 0x65
  dac.begin(0x62);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);

  Serial.println("Begin");
}

void loop(void) {
  if (started == false) {
    started = true;
    dac.setVoltage(0, 1);
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
  }
  byte ch;
  if (Serial.available()) {
    ch = Serial.read();
    sdata += (char)ch;
    if (ch == '\n') {
      sdata.trim();
      if (sdata.indexOf("voltage") > -1) {
        sdata.remove(0, 7);
        float newVal = sdata.toFloat();
        // установка напряжения
        float newVoltage = round(910.0 * newVal);
        if (newVoltage > 4095) {
          newVoltage = 4095;
        }
        uint16_t newVolts = uint16_t(newVoltage);
        dac.setVoltage(newVolts, 1);
        Serial.print("volts: ");
        Serial.println(newVolts);
      } else {
        Serial.println("?");
      }
      sdata = "";
    }
  }
}


Сервер, используемый для отправки команд на Arduino


Для управления Arduino можно воспользоваться простым сервером, который отправляет плате команды, приводящие к изменению напряжения. Соответствующий код можно найти здесь. Для работы сервера понадобится Golang. Вот как подготовить сервер к работе:

$ git clone https://github.com/schollz/tape-synth
$ cd tape-synth
$ go build
$ ./tape-synth -com ARDUINOCOM


Если вы пользуетесь Linux, то для организации работы с USB-портом вам понадобится воспользоваться командой sudo. ARDUINOCOM — это COM-порт для платы Arduino, подключённой к компьютеру по USB. В Windows это обычно COM4.

Для управления сервером служит страница index.html. Для того чтобы открыть её в Chrome, надо перейти по адресу localhost:8080. Далее, можно будет подключить MIDI-клавиатуру и отправлять команды Arduino (Chrome — это самый популярный браузер, поддерживающий MIDI).

Сборка системы и игра на синтезаторе


Для того чтобы поиграть на кассетном синтезаторе нужно запустить сервер, подключить MIDI-клавиатуру и перейти в Chrome по адресу localhost:8080. Теперь можно включить плеер и начать играть! Нота, которую играют на клавиатуре, должна воспроизводиться плеером.

Настройка синтезатора


Мы имеем дело с механической системой, меняющей высоту звука путём изменения скорости протяжки ленты. Поэтому наш синтезатор нуждается в настройке. Для этого надо открыть index.html и отредактировать свойства объекта voltageMap. Каждой ноте должно быть назначено напряжение (между 0 и 3), соответствующее её высоте.

var voltageMap = {
    "C": 0,
    "C#": 0.7,
    "D": 0.9,
    "D#": 1.2,
    "E": 1.4,
    "F": 1.62,
    "F#": 1.85,
    "G": 2.25,
    "G#": 2.6,
    "A": 3.0,
    "A#": 0,
    "B": 0,
}


Итоги


Если я что-то объяснил непонятно (подозреваю, что так оно и есть) — задавайте мне вопросы в Twitter или в Instagram.

А вы планируете собрать собственный кассетный синтезатор?

oug5kh6sjydt9llengsiebnp40w.png

3piw1j3wd_cgmzq9sefgferaumu.png

© Habrahabr.ru