用Arduino与Mozzi库自制复古合成器:探索AM/FM调制与声音合成原理 1. 项目概述与核心思路如果你对上世纪六七十年代那些充满未来感和神秘色彩的科幻影视作品音效着迷比如《神秘博士》里塔迪斯起飞的呼啸声或者早期电子音乐里那些非自然的、仿佛来自另一个维度的声音那么你一定会对它们的诞生方式感兴趣。在那个数字合成器还是天方夜谭的年代BBC的Radiophonic Workshop等先驱们依靠的是笨重的工业测试设备——信号发生器、滤波器、环形调制器以及大量的磁带剪辑和拼接。这些设备如今已成为收藏家追逐的珍品价格不菲。但技术的魅力在于我们可以用现代的工具去复现甚至重新演绎经典。这个项目我称之为“Audiophonic Workbench”音频工作台就是用一块不到20块钱的Arduino Nano配合Mozzi音频库在面包板或洞洞板上搭建的一个迷你复古合成器。它的核心是模拟了三个经典的测试振荡器并实现了它们之间的振幅调制AM和频率调制FM让你能以极低的成本亲手触摸并创造出那些标志性的早期电子音效。这个项目的价值远不止于“复刻”。它更像是一个理解声音合成基础原理的绝佳实验平台。通过八个旋钮和两个开关的直观控制你可以实时听到FM调制如何从温和的颤音演变为刺耳的金属声AM调制如何从规律的振幅起伏变成复杂的边带频率。整个系统完全开源硬件电路简单到初学者也能轻松焊接软件代码虽然为了性能做了优化但结构清晰为你后续的魔改比如添加新波形、MIDI控制留下了充足的空间。无论你是电子音乐爱好者、硬件DIY玩家还是嵌入式系统学习者这个项目都能让你在动手实践中获得从模拟电路思维到数字信号处理DSP的直观认知。2. 硬件设计与元件选型解析2.1 核心控制电路电位器与开关的布局整个系统的“大脑”是Arduino Nano它负责运行Mozzi库生成音频数据。而“四肢”和“感官”则是面板上的控制元件。项目使用了总共9个电位器但其中8个用于音频控制1个如果外接扬声器用于总音量控制。原设计中的8个控制电位器其连接方式体现了模拟电路设计的简洁与高效。所有电位器的两侧引脚分别并联在一起一侧统一连接到Arduino的5V输出例如通过引脚VCC或5V另一侧统一连接到GND地。这种“总线式”供电方式在低频、小电流的控制电路中非常常见它能有效减少飞线数量简化布局。电位器的中间引脚滑臂则各自独立通过导线连接到Arduino的模拟输入引脚A0-A7。当旋动旋钮时滑臂在电阻体上移动从Arduino的视角看就是在A0-A7引脚上读取到一个在0对应GND到1023对应5V之间变化的电压值。这个值就是控制振荡器频率、音量以及调制深度的原始数据。这里有一个关键细节电位器类型的选择。项目明确指出控制音量的三个电位器对应三个振荡器需要使用对数型Audio Taper而控制音高的六个电位器使用线性型Linear Taper。这不是随意为之。人耳对声音响度的感知是对数关系的即声音能量增加十倍我们感觉到的响度才大约增加一倍。使用对数型电位器来控制音量旋钮旋转的角度变化与听觉上的音量变化会更接近线性关系操作起来更符合直觉。如果误用了线性电位器你会发现在旋钮转动的前半段音量就急剧增加后半段则变化甚微非常难进行精细调节。而音高频率的控制我们通常期望旋钮的旋转与频率变化成线性关系或音乐上的指数关系但由代码映射因此使用线性电位器更为合适。两个SPST单刀单掷拨动开关分别用于将振荡器1和振荡器2切换到低频振荡器LFO模式。它们一端接GND另一端接Arduino的数字输入引脚如D2, D3并启用内部上拉电阻。当开关断开时数字引脚通过上拉电阻读到高电平HIGH当开关闭合接地时读到低电平LOW。代码通过检测这个电平变化来决定对应振荡器是工作在可听频率范围还是低频调制范围。2.2 音频输出电路PWM与RC滤波的奥秘音频输出部分是整个硬件设计的精髓它用最少的元件实现了数模转换DAC。Arduino Nano本身没有专用的DAC但它有PWM脉宽调制输出引脚。PWM的本质是输出一系列固定频率、但占空比高电平时间占整个周期的比例可变的方波。对于一个纯粹的方波其频谱中除了基频还包含大量高次谐波听起来非常刺耳不是我们想要的“平滑”音频波形。Mozzi库的“HIFI PWM”模式巧妙地解决了这个问题。它并非使用单个PWM引脚而是同时使用两个相位互补的PWM输出在Nano上通常是引脚9和10。通过精心设计的算法这两个PWM信号组合后其等效的模拟电压分辨率远高于单个PWM。你可以把它想象成用两把精度不高的尺子通过交错测量得到更精确的结果。但是即便这样引脚输出的仍然是数字脉冲信号。要得到平滑的模拟音频电压必须经过一个低通滤波器LPF。这就是电路中那个4.7nF电容和3.9kΩ电阻组成的RC网络的作用。电阻和电容串联从PWM引脚取信号从电容和地之间输出信号。这个RC电路构成了一个一阶无源低通滤波器。其工作原理是电容具有“通交流、阻直流”和“电压不能突变”的特性。高频的PWM方波变化极快电容来不及充分充放电其两端的电压即输出电压变化就很小相当于把高频成分“阻挡”或“短路”到地了。而低频成分我们想要的音频信号则能顺利通过电容在输出端形成变化的电压。截止频率f_c由公式f_c 1 / (2π * R * C)决定。代入R3.9kΩ C4.7nF即4.7 x 10^-9 F计算可得f_c ≈ 1 / (2 * 3.1416 * 3900 * 4.7e-9) ≈ 1 / (6.2832 * 1.833e-5) ≈ 1 / 1.151e-4 ≈ 8686 Hz。这个截止频率大约在8.7kHz刚好高于人耳可听范围的上限约20kHz但能有效滤除PWM载波频率通常为32kHz或更高及其谐波只留下我们需要的音频信号。最后信号经过一个1MΩ的电阻连接到音频输出插座这个电阻主要起限流和隔离作用保护Arduino引脚。另一个1MΩ电阻从输出端连接到地为输出提供一个直流参考路径避免信号悬空。注意这个RC滤波器的参数是经过权衡的。截止频率设得高一些如8.7kHz对音频信号的衰减小保真度相对好但滤除PWM载波噪声的效果会稍差可能在输出中听到轻微的高频嘶声。如果你追求更纯净的声音可以尝试增大电阻或电容值来降低截止频率例如用10nF电容截止频率约4kHz但要注意这也会衰减音频的高频部分让声音听起来更闷。实际制作时可以根据听感微调。2.3 元件清单与采购建议以下是完整的元件清单以及一些采购和替代建议元件规格数量说明与替代建议微控制器Arduino Nano 或兼容板1Nano尺寸小巧适合装入小盒子。兼容板如CH340芯片价格更低但首次使用需安装驱动。电位器10kΩ 线性 (B型)6用于控制振荡器1、2、3的音高以及两个调制深度。电位器10kΩ 对数/音频型 (A型)3务必注意用于控制三个振荡器的音量。买错类型会影响音量控制手感。电阻1MΩ (兆欧)2碳膜或金属膜均可精度不限。电阻3.9kΩ1用于RC滤波3.3kΩ或4.7kΩ也可会轻微改变滤波特性。电容4.7nF (473) 陶瓷或薄膜电容1即0.0047μF。标号通常为“473”表示47后面加3个0单位皮法。可用两个2.2nF并联或一个10nF替代并调整听感。开关SPST 拨动开关2单刀单掷用于LFO模式切换。自锁式或非自锁式均可代码中为瞬时切换逻辑。音频接口3.5mm 或 6.35mm 立体声插座1项目为单声道输出通常连接插座的“尖”Tip和“套”Sleeve端。使用立体声插座时中间环Ring悬空或接地。电路板洞洞板 (Perfboard)1片大小约5x7 cm足够。建议选用质量好、焊盘牢固的板子。排针/排母2.54mm间距1套用于将Arduino Nano以插座形式安装在洞洞板上便于拆卸和更换。外壳自制或现成盒子1作者用了首饰盒。建议选择比预想大一点的盒子给布线和散热留空间。连接线杜邦线或导线若干用于连接电位器、开关与主板。建议使用不同颜色区分电源、地、信号线。电源USB线 (Micro USB)1为Arduino供电任何手机充电器或电脑USB口均可。采购时线性电位器非常常见而对数电位器在通用电子零售商处可能不多但在专业的音响元件店或线上音乐设备配件店很容易找到。如果实在找不到用线性电位器临时替代音量控制也行但要做好手感不佳的心理准备。3. 软件核心Mozzi库的配置与代码剖析3.1 Mozzi库的安装与关键配置Mozzi是一个为Arduino设计的、非常高效的声音合成库。它通过在后台运行一个高优先级的定时器中断来生成音频从而允许你在主循环中同时处理控制逻辑如读取旋钮而不会导致音频输出产生爆音或中断。首先你需要安装Mozzi库。最可靠的方法是通过Arduino IDE的库管理器打开IDE点击“工具” - “管理库...”在搜索框中输入“Mozzi”找到后点击安装。或者你也可以从它的GitHub页面下载ZIP文件然后通过“项目” - “加载库” - “添加.ZIP库...”来手动安装。安装完成后最关键的一步是启用HIFI PWM模式。这需要修改Mozzi库中的一个配置文件。找到你Arduino库文件夹下的Mozzi文件夹。路径通常类似文档/Arduino/libraries/Mozzi/。在该文件夹内找到mozzi_config.h这个文件用文本编辑器如记事本、VS Code打开它。在文件中找到关于音频模式定义的段落大约在27行附近。你会看到类似下面的三行被注释的代码//#define AUDIO_MODE STANDARD #define AUDIO_MODE STANDARD_PLUS //#define AUDIO_MODE HIFI你需要修改为//#define AUDIO_MODE STANDARD //#define AUDIO_MODE STANDARD_PLUS #define AUDIO_MODE HIFI即注释掉STANDARD_PLUS取消HIFI的注释。这个操作告诉Mozzi我们将使用两个PWM引脚来生成质量更高的音频。务必保存文件。如果你在修改后编译代码遇到大量关于“AUDIO_BITS”未定义的错误这通常意味着你修改了错误版本的配置文件或者库文件损坏。请确保你修改的是你当前Arduino IDE正在使用的Mozzi库路径下的文件并考虑重新安装库。3.2 主程序逻辑与核心函数解读项目的核心代码结构清晰遵循了Mozzi的标准框架。主要包含两个核心函数updateControl()和updateAudio()。updateControl()函数这是控制循环。Mozzi会以大约128Hz的频率由CONTROL_RATE定义自动调用它。在这个函数里程序读取所有模拟输入A0-A7和数字输入两个开关并根据这些值更新控制振荡器的全局变量。例如读取控制振荡器1频率的电位器值A0将其从0-1023的范围映射到一个更合适的频率范围比如20Hz到2000Hz。对于LFO开关如果检测到按下则将该振荡器的频率映射到一个更低的范围如0.1Hz到20Hz使其成为调制源而非可听声源。updateAudio()函数这是音频渲染循环。它以高达32768Hz的频率AUDIO_RATE被调用这个速度决定了最终音频的采样率。在这个函数里程序根据updateControl()设置好的全局变量实时计算每一个采样时刻三个振荡器的瞬时振幅值。这个过程是这样的每个振荡器内部维护一个“相位累加器”。每次updateAudio()被调用时根据当前频率一个数值向这个累加器加上一个“相位增量”。累加器的值对应一个波形表这里用的是正弦波表中的位置。通过查找波形表就得到了当前时刻的振幅值。然后代码会处理调制例如如果设置了FM振荡器2的相位增量会随着振荡器1的瞬时振幅微小变化从而导致振荡器2的频率发生波动产生颤音或更复杂的FM音色。AM处理也类似振荡器2的振幅会与振荡器1的振幅相乘。最后将三个振荡器的输出值可能已被调制相加、混合并缩放到合适的输出范围例如-244到243之间对应PWM的占空比通过AudioOutput::updateAudio()函数输出到硬件。实操心得理解“优化与可读性”的权衡原作者提到代码为了速度优化而牺牲了部分可读性。这是嵌入式音频编程的常态。updateAudio()函数每秒被调用数万次里面的每一行代码、每一个乘法运算都至关重要。因此你会看到大量使用整数运算而非浮点数使用位操作而非乘除法以及预先计算好的查找表。如果你打算修改代码添加功能务必注意性能影响。一个简单的测试方法是在updateAudio()开头和结尾用digitalWrite快速翻转一个未使用的引脚然后用示波器观察这个引脚的高电平时间这就是函数执行时间。它必须远小于采样间隔1/32768 ≈ 30.5微秒否则会导致音频输出欠载产生爆音。3.3 硬件测试代码的使用在焊接组装好硬件之后强烈建议先上传并运行作者提供的硬件测试代码APW-HW-Test.ino。这个代码有两个重要作用验证硬件连接它会循环读取A0-A7的模拟值以及两个数字引脚的状态并打印到串口监视器。打开Arduino IDE的串口监视器波特率设为115200逐个转动每个电位器观察对应的数值是否在0-1023之间平滑变化。拨动开关观察对应的数字输入值是否在0和1之间切换。这是排查接线错误如短路、断路、接错引脚最直接的方法。验证音频输出通路测试代码会生成一个简单的测试音。如果配置正确特别是mozzi_config.h已修改为HIFI模式你应该能从音频输出口听到声音。如果没有声音请检查RC滤波电路焊接、音频插座接线以及Mozzi库的配置。4. 制作与组装全流程指南4.1 电路焊接与布局要点我强烈建议先在面包板上搭建原型测试所有功能正常后再进行焊接。焊接时洞洞板万用板是不错的选择。布局建议电源与地线首先规划好5V和GND的“总线”。可以用较粗的导线或者在板子背面用焊锡连接一整排的孔形成两条坚固的电源轨。所有电位器、开关的电源和地脚都就近连接到这两条总线上。Arduino插座使用排母将Arduino Nano固定在板子上而不是直接焊接。这方便日后调试、烧录程序或更换主板。确保排母的朝向正确与Nano的引脚对应。信号线走线从电位器中脚引出的信号线建议使用不同颜色的导线并做好标记例如用标签或热缩管避免接错到Arduino的模拟口。模拟输入线应尽量远离PWM输出线和高频数字线以减少噪声耦合。RC滤波电路将3.9kΩ电阻和4.7nF电容靠近Arduino的PWM输出引脚9和10放置。滤波后的输出点再用导线连接到音频插座和1MΩ的下拉电阻。确保电容的极性如果是电解电容但此处通常用无极性电容。开关连接两个开关的一端接GND总线另一端分别接数字引脚如D2, D3。记得在代码中为这两个引脚启用内部上拉电阻pinMode(pin, INPUT_PULLUP)。焊接技巧焊接前确保所有元件引脚和焊盘清洁。使用合适的焊锡建议含铅焊锡熔点低流动性好和功率适中的烙铁30-60W。先焊接高度较低的元件电阻、电容、IC座再焊接较高的元件电位器、开关的引脚。焊点应呈光滑的圆锥形避免虚焊焊锡只包住引脚未与焊盘融合或桥接相邻焊点被焊锡意外连接。4.2 外壳设计与面板布局外壳不仅是保护更是用户体验的一部分。一个复古风格的外壳能极大提升项目的把玩乐趣。面板布局设计 参考原设计控制面板可以分成三行顶行三个旋钮分别控制振荡器1、2、3的频率/音高。建议使用线性电位器并配上较大的旋钮便于精确调音。中行两个旋钮分别控制“振荡器1 - 振荡器2”和“振荡器2 - 振荡器3”的调制深度/类型。旋钮中心位置为“无调制”顺时针旋转增加AM振幅调制逆时针旋转增加FM频率调制。这是本项目的精髓控制。底行三个旋钮分别控制振荡器1、2、3的音量。务必使用对数电位器。开关位置在两个调制旋钮旁边或下方安装两个拨动开关分别标注“OSC1 LFO”和“OSC2 LFO”。制作方法测量与规划在纸上或使用绘图软件如Inkscape, Fusion 360画出1:1的面板布局图标出所有旋钮和开关的孔位、孔径。开孔对于木质或塑料外壳可以使用手电钻配合阶梯钻头或开孔器来开出干净圆滑的孔。先用小钻头定位再用大钻头扩孔。对于金属面板可能需要中心冲定位并使用金属开孔器。固定电位器和开关通常用螺母固定在面板上。安装时可以先在面板内侧的电位器轴上套上一个垫片再拧紧螺母这样更牢固。标识可以用标签打印机制作不干胶标签或者用移印、丝网印刷甚至手写来标注各个控制功能。复古的字体和配色能加分不少。4.3 总装与内部布线将焊接好的主板放入外壳连接面板上的所有电位器和开关。这是一个需要耐心和细心的过程。布线建议使用彩虹排线或不同颜色的导线束将电源红、地黑、信号线其他颜色分组捆扎使机箱内部整洁也便于日后检修。导线长度要适中留有余量以便主板取出但不宜过长以免杂乱。音频输出线建议使用屏蔽线并将屏蔽层单端接地通常在主板端接地以减少引入噪音。为USB电源线在外壳上开一个合适的孔可以使用橡胶护线套来保护线材并让外观更整洁。最后确保所有元件没有短路风险特别是Arduino板子背面不要接触到金属外壳或其他元件引脚。可以用绝缘胶带或热缩管做隔离。5. 演奏技巧与声音探索硬件制作完成软件也上传了接上音箱或耳机你就可以开始探索这个复古声音宇宙了。它没有复杂的菜单所有交互都通过旋钮和开关鼓励即兴和实验。基础操作流程开机与初始状态上电后你应该能听到声音。先将所有音量旋钮底行调到最小逆时针到底然后缓慢调大OSC3的音量应该能听到一个纯净的正弦波音调。调节OSC3的音高旋钮顶行最右边音调应随之变化。引入更多声部慢慢打开OSC1和OSC2的音量。现在你听到的是三个独立正弦波的叠加。尝试调节它们的音高找到一些和谐的或不和谐的音程组合。纯正弦波叠加的声音比较柔和、空洞。探索调制核心玩法现在动动中间行的两个旋钮。以“OSC1 - OSC2”调制旋钮为例从中心位置无调制开始顺时针旋转。你正在增加振幅调制AM。一开始你会听到OSC2的音量开始有规律的起伏颤音。随着调制深度加深颤音频率变快声音会逐渐变得粗糙产生出类似“机器人”或“收音机干扰”的边带频率这是AM调制的典型特征。将旋钮调回中心再逆时针旋转。你正在增加频率调制FM。一开始OSC2的音高会有轻微的、缓慢的波动振音。随着深度增加波动加剧会产生出金属感、钟声般甚至刺耳的电子音色。FM是合成“科幻感”音效的利器。“OSC2 - OSC3”旋钮控制着第二条调制链路。你可以创造出链式调制效果例如OSC1调制OSC2同时OSC2又调制OSC3产生极其复杂和动态的音色。启用低频振荡器LFO拨动“OSC1 LFO”开关。现在OSC1的频率范围被切换到极低可能低于20Hz人耳听不到。但它仍然可以作为调制源。此时再调节“OSC1 - OSC2”的调制旋钮你会听到经典的、缓慢的颤音FM LFO或振幅起伏AM LFO效果非常适合营造氛围或节奏感。创意音效配方科幻扫描音将OSC1设为LFO模式频率调低。OSC2调到一个中高音调。将“OSC1-OSC2”调制设为FM深度调至中等。缓慢旋转OSC1的音高旋钮此时它控制LFO频率你会听到OSC2的音高被一个缓慢变化的低频所调制产生出经典的雷达扫描或飞船飞过的声音。脉冲节奏将OSC1和OSC2都设为LFO模式并设置成不同的低频如一个0.5Hz一个0.7Hz。将它们分别以AM方式调制OSC3深度调大。OSC3本身音量调小。你会听到一个不规则但富有韵律的脉冲节奏。不和谐和弦垫底将三个振荡器调成不和谐的音程例如根音、增四度、小七度。将两个调制旋钮都调到轻微的AM或FM位置。打开所有音量你就得到了一个充满张力、持续变化的背景铺垫音色非常适合营造悬疑或科幻场景。6. 进阶修改与扩展思路这个开源项目的魅力在于它的可扩展性。以下是一些你可以尝试的魔改方向6.1 硬件扩展提升音频质量内置的PWM输出虽然简便但音质和动态范围有限。你可以外接一个专用DAC芯片如PT8211、MAX98357或更高级的CS4344。这需要修改代码使用Mozzi库支持的其他音频输出模式如I2S并连接额外的电路。音质将会有质的飞跃。添加波形选择原设计只有正弦波。你可以通过增加开关在代码中切换使用Mozzi提供的其他波形表如锯齿波、方波、三角波。这需要增加数字输入引脚并在updateControl()中读取开关状态在updateAudio()中选择对应的波形表进行查找。MIDI输入让合成器能被MIDI键盘控制。你可以添加一个MIDI输入接口一个光耦6N138或H11L1加几个电阻连接到Arduino的RX引脚。然后需要编写MIDI解析代码将接收到的音符编号Note Number转换为对应的频率赋值给某个振荡器例如OSC3从而实现旋律演奏。模拟滤波与效果在音频输出之后接入一个简单的有源低通滤波器如使用一个运放TL072搭建的Sallen-Key滤波器并用一个电位器控制截止频率就变成了一个简单的模拟滤波器能让声音更温暖、更复古。更进一步可以接入弹簧混响模块或模拟延迟BBD芯片直接复刻硬件效果。6.2 软件优化与功能添加包络发生器目前声音是“常开”的。可以添加一个简单的ADSR起音、衰减、维持、释音包络来控制每个振荡器的振幅使声音像传统乐器一样有起落。这需要在代码中为每个声音通道维护一个状态机。音阶量化对于演奏旋律自由变化的音高旋钮很难调准音。可以编写一个功能将OSC3的频率“吸附”到最接近的十二平均律半音上这样旋转旋钮时音高就会在音符间跳变更容易弹出准确的旋律。预设存储利用Arduino的EEPROM电可擦写存储器可以保存几组最喜欢的旋钮位置即参数组合并通过一个按钮来循环调用实现“音色预设”功能。代码重构与模块化如果你希望更深入地学习可以尝试将原代码重构得更易读。例如将每个振荡器定义为一个Oscillator类将调制器定义为一个Modulator类。这样虽然可能增加一点点开销但代码结构会清晰得多便于添加新功能。7. 常见问题排查与调试心得在制作和调试过程中你可能会遇到以下问题。这里是我的排查思路和解决方法问题现象可能原因排查步骤与解决方案完全无声1. 电源未接通。2. 音频输出线断路或短路。3.mozzi_config.h未修改为HIFI模式。4. 程序未成功上传。1. 检查USB线、电源指示灯。2. 用万用表通断档检查从RC滤波电路到音频插口的通路。3.重点检查确认修改了正确的mozzi_config.h文件并保存。上传硬件测试代码验证。4. 重新编译上传观察IDE下方输出窗口有无错误。有严重失真或爆音1. 音量电位器类型错误线性代替了对数。2. RC滤波电路值错误或焊接问题。3. 代码中音频计算溢出。4.updateAudio()函数执行超时。1. 确认底行三个音量电位器是对数型A型。2. 检查3.9kΩ电阻和4.7nF电容的值和连接。3. 使用原版未修改的代码测试。4. 如果你修改了代码特别是updateAudio()尝试简化或优化。旋钮控制不灵或跳动1. 电位器接触不良或损坏。2. 电源电压不稳。3. 模拟输入引脚未接滤波电容。1. 更换电位器。焊接时避免过热损坏。2. 使用质量好的USB电源。在Arduino的5V和GND之间加一个100uF的电解电容稳压。3. 在每个模拟输入引脚与地之间加一个0.1uF104的陶瓷电容滤除噪声。调制效果不明显或奇怪1. 调制旋钮接线错误中间脚未接模拟口。2. LFO开关逻辑接反。3. 代码中调制映射范围不合适。1. 用测试代码确认每个模拟口读数正常。2. 检查开关接线一端接地另一端接数字引脚代码中启用INPUT_PULLUP。3. 理解代码中关于调制深度的计算部分尝试调整映射公式。编译错误修改config后1. 修改了错误的配置文件。2. Mozzi库版本不兼容。3. 语法错误如少注释符。1. 确认Arduino IDE首选项中设置的库路径修改该路径下的文件。2. 尝试从GitHub下载最新版Mozzi或回退到旧版。3. 仔细检查修改处确保//和#define使用正确。最重要的调试工具就是你的耳朵和串口监视器。遇到问题时先简化只接一个振荡器只用一个旋钮用测试代码验证硬件。逐步添加功能定位问题所在。这个DIY的过程本身就是一个极佳的学习路径从电路原理到代码逻辑从焊接技巧到声音设计每一步的排错都会让你对系统有更深的理解。当你第一次扭动旋钮听到自己亲手制作的设备发出那些充满复古未来感的声响时所有的努力都是值得的。