Да си направим музикален инструмент от касетофон

Оригиналът е на Zack Scholl

7
1452

Много ми харесват необичайните музикални проекти. Така например, направих музикален албум, базиран на записите, направени от НАСА по време на мисията Аполо-12. А наскоро за управление темпа на музиката, използвах собственото си сърцебиене.

Наскоро направих от стар касетен плеър, приличащ на Walkman на Sony, синтезатор, който се управлява с помощта на MIDI команди. Необходима ми бе платка Arduino и малко код. Това, което се получи, смело може да бъде наречено ‘касетен синтезатор‘.

Касетният синтезатор работи чрез възпроизвеждането на един и същ монотонен звук, който всъщност е само една нота. Височината на звука може да се управлява чрез промяна на скоростта на възпроизвеждане на лентата на касетката.

Знам, че дори е по-лесно да се използва цифрова памет със същата нота, записана в нея, но този синтезатор е интересен с това, че дава съвсем аналогово звучене на нотите. А и честотата на звука плавно се променя при прехода от една нота към друга, като резултатът е много интересен. Освен това, на лентата на касетката могат да бъдат записани всякакви звуци и да се получи съвсем ново звучене. Може да се каже, че моят касетен синтезатор е достатъчно универсален.

Създаване на касетния синтезатор

Всъщност, създаването на този синтезатор е съвсем лесно Гледах едно старо видео, което показваше как трябва да се модифицира един касетофон, за да може да се управлява скоростта на движение на лентата с помощта на регулатор на напрежение. Почти същите промени направих и с моя касетен плеър. Но освен това, направих и един съвсем опростен MIDI контролер, който дава възможност за възпроизвеждане на необходимите ноти чрез промяна на напрежението на малкия електродвигател. Да започваме.

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

Обърнете внимание, че не е задължително за се използва плеъра GE 3-5362A. Подходящ е всеки касетен плеър или касетофон с променлива скорост на възпроизвеждане.

Да отворим малкия плеър – достатъчно е да отвием болтчетата и да внимаваме да не скъсаме някой проводник, който преминава от едната половина на устройството към другата.

За превръщането на плеъра в синтезатор е необходимо към него да се запоят два нови компонента. Първият е проводникът, съединен с извода Vin, с помощта на който ще управляваме напрежението. Вторият е аудио кабел, запоен към Line in, с който ще записваме звуци на касетката.

Управлението скоростта на възпроизвеждане

Намерете в кутията колелцето с надпис Variable Speed Playback. Точно до него ще запоим двойка проводници. Лично аз предпочитам да използвам червен цвят за ‘плюса’ и кафяв или зелен за ‘минуса’. И така, червения проводник запояваме към контактната площадка VS+, а другият – към контактната площадка точно до B+:

Обърнете внимание, че в подобни случаи е много удобно да се използват кабели с Female конектори от едната страна, към които е лесно да се включи каквото и да било.

Запояване на проводниците към Line

Сега трябва да намерим контактните площадки MIC- и MIC+, към които са запоени червения и черния проводници на микрофона. Тези проводници можем направо да махнем и към освободилите се места да запоим аудио кабела – червеният към MIC+ и черният – към MIC-.

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

Сега вече можем да поставим касетката в плеъра и да запишем необходимия звук чрез Line in. Може да бъде записана произволна нота, но препоръчвам да се започне с нотата ‘до’. Записът трябва да е достатъчно дълъг – около 30 минути или нещо подобно. Трябва да бъде записан само един тон, височината на който ще управляваме чрез промяна скоростта на възпроизвеждане на записа.

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

Arduino използваме като посредник между MIDI интерфейса и цифрово аналоговия преобразовател, който служи за съответната промяна на напрежението. MIDI клавиатурата е включена към компютъра. Сигналите от клавиатурата се приемат от програма, работеща в средата на уеб браузъра Chrome. Тя се обръща към сървър, който изпраща данните за необходимите промени на напрежението към Arduino, а Arduino подава тези сигнали на ЦАП-а, който на практика управлява скоростта на възпроизвеждане на плеъра.

В началото е необходимо да се включи MCP4725 към Arduino според показаната по-горе схема. MCP4725 е цифрово аналогов преобразовател, който може да се управлява с помощта на Arduino. Контактната площадка OUT на ЦАП-а трябва да се съедини с червения проводник, който запоихме към плеъра. Другият проводник от плеъра трябва да се съедини с GND на Arduino.

Кодът, осигуряващ взаимодействието на компютъра с Arduino, обменя данни с устройството, като му изпраща информация за това, как трябва да се промени напрежението, Така например, ако Arduino получи командата dac.setVoltage(newVolts, 1), то MCP4725 ще подаде напрежението newVolts. Ето го и самият код:

#include <Wire.h>
#include <Adafruit_MCP4725.h>

Adafruit_MCP4725 dac;
String sdata = ""; // Initialised to nothing.
bool started = false;
void setup(void) {
  Serial.begin(9600);

  // For Adafruit MCP4725A1 the address is 0x62 (default) or 0x63 (ADDR pin tied to VCC)
  // For MCP4725A0 the address is 0x60 or 0x61
  // For MCP4725A2 the address is 0x64 or 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();
        // set voltage
        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. Сега вече може да включим касетния плеър и да свирим! Само че нотата, която натискаме на MIDI клавиатурата трябва точно да се възпроизвежда от плеъра.

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

И така, имаме работа с механична система, която променя честотата на звука чрез промяна на скоростта на движение на лентата. А това означава, че нашият синтезатор има нужда от настройка. За тази цел трябва да отворим файла 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,
}

Това е!


Проектът на Zack Scholl изглежда прекалено сложен, но подобни неща не се правят, за да се използват в практиката. По този начин се споделят нови смели идеи и съвместното използване на най-различни техники.

1 2 гласа
Оценете статията
Абонирай се
Извести ме за
guest
7 Коментара
стари
нови оценка
Отзиви
Всички коментари