用盒式磁带播放机制作乐器



盒式合成器



我喜欢不寻常的音乐作品。例如,我根据阿波罗12号任务期间NASA的录音发布了一张专辑。最近我用自己的心脏来控制音乐的节奏。您可以在这里找到我的音乐实验的结果



最近,我用让人想起索尼Walkman的旧式录音机制作了MIDI控制的合成器。为此,我需要一个Arduino开发板和一些代码。发生的事情可以称为“盒式合成器”。



盒式合成器通过播放以前录制在盒式磁带上的单调声音(一个音符)来工作。音高可以控制,取决于磁带的速度。OndeMagnétique项目使我想到了创建盒式合成器的想法,并且该项目的创建者受到Mellotron想法的启发





这是一个视频,显示我使用MIDI键盘播放盒式合成器。



该合成器的优点是,在更改音符时会产生非常“模拟”的声音。即,音高在从一个音符到另一个音符的传递时通常会平滑变化,结果声音变得非常有趣(也就是说,在此合成器上播放的音乐中,经常会出现滑音效果)。此外,几乎任何声音都可以录制在磁带上,因此我的合成器功能非常丰富。



创建盒式合成器



实际上,创建这样的合成器非常简单。我看过一个很好的视频,介绍了如何修改磁带播放器,以便可以使用稳压器控制磁带的播放速度。我已经以类似的方式修改了我现有的播放器。我还基于浏览器创建了一个简单的MIDI控制器,该控制器旨在通过修改电压来获取所需的音符。



下面的说明集中于由播放器和Arduino表示的合成器的硬件,以及由MIDI控制器播放的软件。



用料



  • GE 3-5362A盒式磁带播放器(15美元,在eBay上很多)
  • Arduino(23美元)。
  • DAC MCP4725(11美元)。
  • 3,5 ($8).
  • ( , $5).
  • , ($25, ).


GE 3-5362A



请注意,您不需要使用GE 3-5362A播放器。任何支持可变播放速度的播放器都可以。如果要基于其他播放器制作盒式合成器,则只需找出其内部结构以及在何处焊接相应的导线即可。



让我们从打开播放器的主体开始。为此,您需要拧松位于设备背面的四颗螺钉。您无需在此处花费太多精力-只需拧下螺钉并小心地打开盒子即可。请注意,本机的背面和正面通过电线连接,该电线为播放器的电子设备供电。请勿切断这些电线。









为了将播放器变成盒式合成器,我们需要在其上焊接两个新组件,以便对其进行改装第一个是连接到的电线Vin,通过它我们可以使用稳压器控制播放磁带的速度。第二个是连接到的音频分配器Line in,它使我们可以在盒式磁带上录制声音(这对没有磁带录音机的人很有用)。



如果您不能焊接,请不要担心。这很简单。观看视频。从中您将学习如何将电线焊接到接触垫上。



连接到Vin并组织磁带速度控制



在设备上找到标有``变速播放''的滚轮。在这里,我们将焊接几根电线。我更喜欢将红色导线用于正号,将棕色或绿色导线用于负号。因此,我们将红色导线焊接到VS +焊盘上,将另一根彩色导线焊接到B +下方的焊盘上。





焊接到VS +焊盘和靠近B +的焊盘的导线



请注意,在这种情况下,我会使用一端带有母接头的电缆。将某些东西连接到他们非常方便。



连接到Line in以在录音带上组织录音



现在,您需要找到MIC-和MIC +垫,将来自麦克风的红色和黑色导线焊接到该垫上。您可以简单地拆焊这些导线并将音频电缆导线焊接到这些垫上。红色为MIC +,黑色为MIC-。





焊接到MIC-和MIC +的导线



在卡带上录制单调声音



现在,您可以将录音带插入播放器,并通过连接到Line in来录制声音您可以录制任何音符的声音。通常,您可以使用注解“ C”开始实验。录音应足够长-30分钟左右(顺便说一句,这里有带环的磁带会派上用场)。请注意,盒式磁带上只需要录制一个音调,因为正是这种音调的音高会通过控制录制的播放速度而改变。





用OP-1将声音录制到录音带



准备将Arduino用作MIDI接口



Arduino充当MIDI接口和数模转换器之间的中介,负责改变电压。MIDI键盘已连接到计算机。键盘信号是由Chrome中运行的程序接收的。它对服务器进行寻址,该服务器将有关电压变化的数据发送到Arduino,然后Arduino将相应的信号传输到数模转换器,该转换器控制磁带在播放机上的播放速度。





将MCP4725 D / A转换器连接到Arduino



首先,您需要使用上图将MCP4725连接到Arduino。MCP4725是可以由Arduino控制的数模转换器。转换器的OUT端子必须连接到我们先前焊接到播放器的红色导线。另一根线需要连接到Arduino的GND引脚。



计算机和Arduino之间通信的代码与设备通信,向其发送有关如何更改电压的信息。例如,如果Arduino收到命令dac.setVoltage(newVolts, 1),则MCP4725将输出电压newVolts这是代码:



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

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端口的工作sudoARDUINOCOM是用于通过USB连接到计算机的Arduino板的COM端口。这在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,
}


结果



如果我无法理解的解释了(我怀疑是这样),请在TwitterInstagram上问我问题



您是否打算构建自己的盒式合成器?










All Articles