盒式合成器
我喜欢不寻常的音乐作品。例如,我根据阿波罗12号任务期间NASA的录音发布了一张专辑。最近我用自己的心脏来控制音乐的节奏。您可以在这里找到我的音乐实验的结果。
最近,我用让人想起索尼Walkman的旧式录音机制作了MIDI控制的合成器。为此,我需要一个Arduino开发板和一些代码。发生的事情可以称为“盒式合成器”。
盒式合成器通过播放以前录制在盒式磁带上的单调声音(一个音符)来工作。音高可以控制,取决于磁带的速度。OndeMagnétique项目使我想到了创建盒式合成器的想法,并且该项目的创建者受到Mellotron想法的启发。
这是一个视频,显示我使用MIDI键盘播放盒式合成器。
该合成器的优点是,在更改音符时会产生非常“模拟”的声音。即,音高在从一个音符到另一个音符的传递时通常会平滑变化,结果声音变得非常有趣(也就是说,在此合成器上播放的音乐中,经常会出现滑音效果)。此外,几乎任何声音都可以录制在磁带上,因此我的合成器功能非常丰富。
创建盒式合成器
实际上,创建这样的合成器非常简单。我看过一个很好的视频,介绍了如何修改磁带播放器,以便可以使用稳压器控制磁带的播放速度。我已经以类似的方式修改了我现有的播放器。我还基于浏览器创建了一个简单的MIDI控制器,该控制器旨在通过修改电压来获取所需的音符。
下面的说明集中于由播放器和Arduino表示的合成器的硬件,以及由MIDI控制器播放的软件。
用料
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端口的工作
sudo
。ARDUINOCOM
是用于通过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,
}
结果
如果我无法理解的解释了(我怀疑是这样),请在Twitter或Instagram上问我问题。
您是否打算构建自己的盒式合成器?