电爵士鼓入门(DIY一套便宜好用的电子爵士鼓)

只需一块Arduino MEGA板,再配置好电脑(Linux操作系统)上免费或者开源的MIDI应用程序,即可制成一套真正能够用来演奏的电子爵士鼓。根据你的心愿,它可以被做成任何样式:可以是自己设计的鼓架,也可以是薄膜状,甚至可以用更加高端的传感器,玩出各种花样来。

准备材料

笔者的鼓架由Φ28mm的透明PC管和金属连接件构成,上面安装有7个鼓面和2个踏板,有一个脚踏的低音大鼓(Bass Drum,又称“底鼓”)、一个军鼓、两个嗵嗵鼓(Tom-Tom Drum)、一个吊镲(Crash Cymbal)、一个节奏镲(Ride Cymbal)和一个带踏板的踩镲(Hi-Hat)。

主要的电子设备是一块Arduino MEGA开发板,还有压电陶瓷片——它可以用电压表示其表面压力的变化率,从而起到采集鼓面震动情况的作用。

制作过程

1 先从制作鼓面开始。为了降低敲击噪声,我用双面胶在木板上粘贴了一层2mm厚的软橡胶(你也可以用鼠标垫代替)。这样既可以灵敏地测到数据,木板本身又不会发出太大的声响。

电爵士鼓入门(DIY一套便宜好用的电子爵士鼓)(1)

2 然后在没有橡胶的一面粘上压电陶瓷片(也叫压电震动传感器,或者piezo)。如果是新的元器件,焊接导线可能有一点难度,需要涂上助焊剂,用合适的温度快速焊上。此外提醒,传感器片不可以用502胶水粘贴,502胶水会腐蚀压电陶瓷。在元器件两端并联一个1kΩ的电阻,防止元器件产生太高的电压。完成后可以用示波器测试元器件的输出电压,确保即使大力敲击木板,元器件也不会产生高于5V的电压,因为Arduino的ADC最大只可以承受5V的输入。将这些元器件用胶布固定好,制作出不同大小的多个鼓面。

电爵士鼓入门(DIY一套便宜好用的电子爵士鼓)(2)

3 然后就可以将制作好的鼓面固定在支架上了。我用了M10丝杆和螺帽,以及自己设计的3D打印件。

电爵士鼓入门(DIY一套便宜好用的电子爵士鼓)(3)

4 踏板很好制作。如果不需要力度响应,用两个键盘的延音踏板即可(实际为脚踏开关)。

电爵士鼓入门(DIY一套便宜好用的电子爵士鼓)(4)

5 接下来测试下位机端的程序。图中所示为Arduino Nano,因为其模拟输入口数量不够,最终换用Arduino MEGA。设计一块扩展板,以便用你喜欢的接口连接各个鼓面。

电爵士鼓入门(DIY一套便宜好用的电子爵士鼓)(5)

6 将鼓面按程序中设定好的顺序分别连接板子的I/O口,硬件部分就全部完成了!

电爵士鼓入门(DIY一套便宜好用的电子爵士鼓)(6)

PC端软件

这里需要在安装Linux操作系统的PC上安装以下软件:

(1)Jackd:这是一个简单易用的MIDI、ALSA接口管理器;

(2)Qjackctl:Jackd的GUI界面,可能会自动安装上;

(3)Fluidsynth:MIDI合成器;

(4)Qsynth:Fluidsynth的GUI;

(5)Fluid-soundfont-gm:免费的MIDI音色库;

(6)Hairless-Midiserial:MIDI-串口转换器。

如果需要编曲、伴奏等更高级的功能,还需要rosegarden等音序器应用程序。

电爵士鼓入门(DIY一套便宜好用的电子爵士鼓)(7)

将它们分别打开,进行一些设置。

1 打开Hairless的Settings,设置好对应的波特率,然后选择Arduino的串口号,在“Serial<->MIDI Bridge On”前打钩,此时Arduino会重启。

电爵士鼓入门(DIY一套便宜好用的电子爵士鼓)(8)

2 打开QSynth的Setup,切换到Soundfonts选项卡,单击“Open”加载Fluid音色库。

电爵士鼓入门(DIY一套便宜好用的电子爵士鼓)(9)

3 最后一步,打开Qjackd 的Connects窗口,在ALSA选项卡中,将Hairless的输出端口连接到Fluid的输入端口上,大功告成!

电爵士鼓入门(DIY一套便宜好用的电子爵士鼓)(10)

4 在QSynth的Channels窗口中选择第10通道,可以切换很多种鼓的声音。

电爵士鼓入门(DIY一套便宜好用的电子爵士鼓)(11)

设置好这些后,就可以试着演奏了,电脑的扬声器中会实时播放出你敲击的鼓面所对应的声音。

MIDI协议

Arduino向PC发送信息的代码片段如下:

void midiSend (int cmd, int pitch, int velocity) {

Serial.write(cmd);

Serial.write(pitch);

Serial.write(velocity);

}

这种通信协议就是MIDI协议。标准的乐器MIDI有其特定的波特率(31250)。因为我们这里可以使用串口-MIDI转换,所以可以随意设置波特率。一句MIDI指令包含3字节数据:

(1)MIDI命令,就是启动或者停止一个音符;

(2)音符,指定要传送的是哪个音符;

(3)力度,这个音符的演奏力度强弱。

//Adjust this if your pads are

dull or too sensitive

//{crash, hat, snare, tom_bass, crash_right, tom_high, tom_low}

unsigned char adc_cutoff[7]=

{3,3,10,7,3,3,3};

//minimum strength

unsigned char adc_limit[7]=

{40,10,30,50,40,10,10};

//maximum strength

以上这段代码是每个鼓面力度范围设置,请根据制作所用的材料和结构不同进行设置,如果某些鼓面不灵敏,或者过于灵敏,这些值有可能需要大幅调节。

然后,程序会轮询收集来自各个传感器的数据并判断两个踏板的开关量。

for(byte count=0;count<=6;count )

{

adc_sample[count]=map(analogRead (adc_channel[count]),0,1023,0,254);

}

因为在一次敲击过程中,鼓面可能会振动一小段时间,可能会使Arduino采集了太多次,向电脑发送大量数据,导致电脑停止响应。简单的解决方法是,在每次采集过程的最后加一句“delay(5);”。这种方法不会降低实时性。

以上这些就是制作这套Arduino架子鼓的一些经验。基于这种思想,还可以做出很多不一样的乐器,以及多用途控制器等产品。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页