对ARDUINO了解有限,但是从电子琴的角度来解答一下:
首先,要看看你对电子琴的要求有多高了,如果能出音符,不追求音质的话,应该ARDUINO本身就已经具备这样的库了,它的声音库可以产生频率,只需要把按键和对应的频率发生器设置好基本上就行了,按下开始响,松开停止。至于音符的频率表,在很多网上都能查到。例如标准A音440Hz。我们把这个目标看作最基本的,最简单的,最原始的电子琴。
然后,稍微高级一眯的方案二:现在正式商用的电子琴,都采用了MIDI音源来处理,这个在ARDUINO上貌似没见到MIDI库,所以如果采用MIDI芯片,需要先学习MIDI协议,然后按MIDI的波特率向芯片发送MIDI数据就可以控制它了,比如发送NOTE C2按下或释放的消息,就可以让它响或停止,同时MIDI提供了大量的接口功能,做起来稍微复杂了许多,所幸的是如果不做音效和自动节拍什么的,只实现一个符号和音色加上必要的音量功能,还是相对简单的,查一下GM标准的MIDI手册便知,网上也比较容易找到,
方案三:物理建模方法,就是把乐器发声的原理用电子方法重建,这个就比较高深了,而且现成的芯片我也不知有哪些,貌似成熟的产品都是用DSP平台编写软件实现的。比如说,一支笛子,从哨再到管身,经过了什么样的共鸣、谐振、反射,就用软件模拟这一过程,最终把简单的哨音变成层次丰富接近真实笛子的音色,因为过于专业,这个方案大家就听听,我觉得应该咱们大多们没有这个能力实现。
另外,电子琴上还有好多周边问题需要解决,要制作的话,还要一一搞清楚它们的功能、使用方法和原理。
先从键盘说起:为了让所有键都能任意组合同时按下,必须使用带二极管的阵列扫描,防止多键同时按下而“误按”了同行或同列的其它键,或产生冲突,无法识别。另外,如果要实现力度键,需要双触点键盘,再配合力度键芯片才能实现,原理很简单,根据两个触点接触的间隔,就可以判断出按键的力度了,由于结构过于复杂,建议买成品的键盘总成,自己只做后边的处理,编写程序时只要明白原理就行了。另外还有“触后”的实现,触后分两种,一种叫“Key AfterTouch”,中文叫键触后,是每个键下有独立的电容或其它类型的压力应变传感器,用来单独实现单个音在按下以后的揉键变音功能,例如,吉它有6根弦,当你模拟其中的1根被推或揉弦,其它打合弦的弦不被揉时,键触后就很重要了。因为如果你使用了“Channel AfterTouch”也就是通道触后的话,整个键盘有任意一个键在揉,所有的弦相当于都被拉紧或放松,有点类似电吉它上摇杆的作用了。所以说,两种触后,在高级的键盘上都需要有,但是功能不同,需要分别实现。不幸的是,因为成本原因,大部分键盘不是没有触后,就是只有通道触后,楼主要想做键触后的话,成本也是大大嘀!
再说说踏板:总体来说,键盘分两类,开关类的和电位器类的(当然你也可以用霍尔踏板代替电位器)。像延音这类的踏板,就是开关式的,只有开关两种状态。而感情踏板(音量踏板)就必须是电位器式的了。而且通常商业的琴会照顾到踏板的生产商定义不同,在开机时有自检,自动判断它是开有效还是关有效,或者是高电平或低电平方向控制音量什么的。都是以上电时踏板的状态来确定的。因为这个原因,像YAMAHA之类的琴一般都会要求开机时不要踩下任何踏板,否则可能造成踏板识别成反极性。
然后是关于MIDI控制器:这个东西本来是在MIDI协议中虚拟出来的,但是它也可以存在于硬件上方便你的操作,最常见的当然是如下几种:弯音轮(Picth Wheel)、调制轮(Modulation)也就是颤音,主音量(Master Volume),通道选择(Channel)等。如果需要控制音色,这个可以做单独的控制钮,但是不是直接对应MIDI控制器,而是发送的NOTE事件,所以没把它归在这里说。
其实一个电子乐器是挺复杂的,不仅需要你有电子知识,还得有很多电子乐器使用经验,不然做出来可能根本不像,如果只是玩玩嘛,方案一吧,虽说只是蜂鸣器的单音,不过小时候的玩具琴,很多不也都是这样子的么?