• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

用ATMEGA2560 arduino做一把电子琴

WQS1314 2018-07-17 浏览量:2172
怎么用ATMEGA2560arduino做一把电子琴?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 对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事件,所以没把它归在这里说。

    其实一个电子乐器是挺复杂的,不仅需要你有电子知识,还得有很多电子乐器使用经验,不然做出来可能根本不像,如果只是玩玩嘛,方案一吧,虽说只是蜂鸣器的单音,不过小时候的玩具琴,很多不也都是这样子的么?

    • 发布于 2018-07-17
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:12
  • 51单片机电子琴有不少案例,移植一个就好了。
    • 发布于2018-07-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 电子琴的声音就是使用PWM产生的,可以使用开发板生成不同频率的PWM来出不同的声音
    • 发布于2018-07-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 矩阵键盘扫描,用keypad库检测按键,然后串口发送MIDI音符。

    Mega2560本身没有USB,但可以把音符通过串口给Atmel 16U2。

    Atmel 16U2刷MIDI-HID固件,把串口收到的MIDI音符用USB-HID协议发给电脑。

    电脑的GS音源发声。常用的音源宿主软件是MIDI Player。

    电脑的GS音源支持所有的MIDI控制协议,包括乐器音色切换、颤音、变调、延音等,功能与正常电子琴一样。

    • 发布于2018-07-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 其实就是利用tone函数产生不同的PWM控制不同声调,这里有详细教程:https://www.arduino.cn/thread-3272-1-1.html

    此外还有手绘版(按键使用2B铅笔绘制):http://www.geek-workshop.com/thread-4874-1-1.html

    • 发布于2018-07-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 做出专业的肯定是不太行。可以采集一下每个键的音,在储存卡上,然后用按键,按一下播放哪个键的音
    • 发布于2018-07-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 直接调节PWM控制音调,可以参照下别人的程序
    • 发布于2018-07-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 直接用PWM和节拍输出音频,通过这个两个数据数组就可以输出了
    • 发布于2018-07-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 主要是检测按键然后看控制输出的频率达到音乐控制的效果
    • 发布于2018-07-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 一般都是用PWM控制声音的输出来实现音乐
    • 发布于2018-07-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 首先做一个按键扫描程序,检测按下了哪个键

    然后控制PWM产生不同频率的声音

    • 发布于2018-07-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 电子琴主要是按键输入+音频输出,音频输出可以用预先录制的声音或者PWM电子音实现,按键输入直接用GPIO输入的方式实现就可以了。

    • 发布于2018-07-29
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

用ATMEGA2560 arduino做一把电子琴