电爵士鼓入门(DIY一套便宜好用的电子爵士鼓)
只需一块Arduino MEGA板,再配置好电脑(Linux操作系统)上免费或者开源的MIDI应用程序,即可制成一套真正能够用来演奏的电子爵士鼓。根据你的心愿,它可以被做成任何样式:可以是自己设计的鼓架,也可以是薄膜状,甚至可以用更加高端的传感器,玩出各种花样来。
准备材料笔者的鼓架由Φ28mm的透明PC管和金属连接件构成,上面安装有7个鼓面和2个踏板,有一个脚踏的低音大鼓(Bass Drum,又称“底鼓”)、一个军鼓、两个嗵嗵鼓(Tom-Tom Drum)、一个吊镲(Crash Cymbal)、一个节奏镲(Ride Cymbal)和一个带踏板的踩镲(Hi-Hat)。
主要的电子设备是一块Arduino MEGA开发板,还有压电陶瓷片——它可以用电压表示其表面压力的变化率,从而起到采集鼓面震动情况的作用。
制作过程1 先从制作鼓面开始。为了降低敲击噪声,我用双面胶在木板上粘贴了一层2mm厚的软橡胶(你也可以用鼠标垫代替)。这样既可以灵敏地测到数据,木板本身又不会发出太大的声响。
2 然后在没有橡胶的一面粘上压电陶瓷片(也叫压电震动传感器,或者piezo)。如果是新的元器件,焊接导线可能有一点难度,需要涂上助焊剂,用合适的温度快速焊上。此外提醒,传感器片不可以用502胶水粘贴,502胶水会腐蚀压电陶瓷。在元器件两端并联一个1kΩ的电阻,防止元器件产生太高的电压。完成后可以用示波器测试元器件的输出电压,确保即使大力敲击木板,元器件也不会产生高于5V的电压,因为Arduino的ADC最大只可以承受5V的输入。将这些元器件用胶布固定好,制作出不同大小的多个鼓面。
3 然后就可以将制作好的鼓面固定在支架上了。我用了M10丝杆和螺帽,以及自己设计的3D打印件。
4 踏板很好制作。如果不需要力度响应,用两个键盘的延音踏板即可(实际为脚踏开关)。
5 接下来测试下位机端的程序。图中所示为Arduino Nano,因为其模拟输入口数量不够,最终换用Arduino MEGA。设计一块扩展板,以便用你喜欢的接口连接各个鼓面。
6 将鼓面按程序中设定好的顺序分别连接板子的I/O口,硬件部分就全部完成了!
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等音序器应用程序。
将它们分别打开,进行一些设置。
1 打开Hairless的Settings,设置好对应的波特率,然后选择Arduino的串口号,在“Serial<->MIDI Bridge On”前打钩,此时Arduino会重启。
2 打开QSynth的Setup,切换到Soundfonts选项卡,单击“Open”加载Fluid音色库。
3 最后一步,打开Qjackd 的Connects窗口,在ALSA选项卡中,将Hairless的输出端口连接到Fluid的输入端口上,大功告成!
4 在QSynth的Channels窗口中选择第10通道,可以切换很多种鼓的声音。
设置好这些后,就可以试着演奏了,电脑的扬声器中会实时播放出你敲击的鼓面所对应的声音。
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