21391| 7
|
[M10教程] 【行空板图形化Python入门教程】第08课:智慧钢琴 |
第08课:智慧钢琴 你是否想象过自己成为一名钢琴家,让音符在指尖飞舞?弹钢琴的过程,如同在平静的湖面上,用指腹敲起的一个个音符,坠落荡起的一阵涟漪,震撼着聆听者的内心。因为种种原因,或许我们没能学习过钢琴也没能拥有一台钢琴,但这些都阻碍不了对钢琴的喜爱。接下来,利用行空板制作一台专属的智慧钢琴吧! 任务目标 行空板下半部分显示钢琴按键,并为每个琴键附上一个音符,琴键的上方在演奏过程中自动移动琴谱图。 知识点 1. 认识蜂鸣器 2. 掌握蜂鸣器的使用方法 材料清单 1. 硬件清单 行空板x1 Type-C&Micro二合一USB线x1 2. 软件使用 Mind+编程软件,下载地址:https://www.mindplus.cc 动手实践 这个项目中,主要是在行空板屏幕上显示一个简易的钢琴琴键,然后为每个琴键都赋一个蜂鸣器的音符。按下不同的琴键,播放不同的音符。在琴键上面会有一个辅助琴谱,琴谱可以自动移动,对于初学者来说辅助琴谱降低了演奏者的表演难度。接下来,从下面两个任务来实现智慧钢琴项目。 任务一:设置琴键布局 利用图片素材,完成行空板屏幕上的琴键布局,并为每个琴键设置一个蜂鸣器音符。 任务二:设置辅助琴谱 做一个辅助琴谱,让琴谱自动移动。 任务一 设置琴键布局 1. 硬件搭建 使用USB连接线将行空板连接到计算机。 2.软件准备 打开Mind+,按照下面图示完成软件准备过程。 3. 编写程序 开始编写程序之前,先分析一下布置琴键这个任务中要具体实现哪些功能。首先需要在行空板左侧部分显示1-7的琴键,然后为每个琴键赋一个音符。 (1) 确定琴键大小 将图片素材文件中的琴键图片,加载进项目中。 行空板的屏幕高为320,要放置7个相同的琴键,每个琴键占的宽大约为45,每个琴键之间再留个1的间距,因此将琴键的高设置为44比较合理。 (2) 确定琴键位置 七个琴键的大小相同,但是放置的位置应该是从上到下,依次放置。并且琴键之间需要留个“1”的间距,因此第二个琴键的位置就是x坐标不变,初始坐标3的基础上,加琴键高(44)再加间距1,第二个琴键坐标为(0,48)。 第三个琴键的位置就应该在第二个琴键Y坐标(48)的基础上,加上琴键宽度(44),再加上琴键之间的间距1,即48+44+1=93。因此第三个琴键的坐标为(0,93)。 以此类推,下一个琴键的位置同样是X坐标不变,Y坐标在现在的Y坐标基础上,加上琴键宽度(44),再加上琴键之间的间距1。 (3) 设置音符 按下琴键,触发的对象是琴键。所以要给每个琴键对象设置一个回调函数,需要使用指令 对象名 的点击回调函数为button_click1。 注意:对象名 的点击回调函数为button_click1 需要和 当点击回调函数button_click1 搭配使用,并且回调函数名要保持一致。 怎样才能在按下琴键后,发出对应的音符呢?这就需要用到板载蜂鸣器中的指令,按节拍播放音符。 注意:板载蜂鸣器硬件相关介绍见“知识园地”。 这个指令的音符下拉框里,提供三个音区的音符,节拍下拉框里提供八种节拍。不同音区的音符与节拍具体使用方法如下: 关于节拍的选择,一般都是根据琴谱中节拍进行选择,当然也可以根据自己的喜好来设置。以《小星星》琴谱为例,这首歌设定是4/4拍,他的意思是每小节有4拍,琴谱中每拍里面有4个音符,因此每个音符对应的节拍就该为1/4拍,所以在程序指令中选择1/4拍。 接下来就给每个琴键设置一个对应的音符吧!当按下琴键后,才会发出音符,因此需要在琴键的回调函数中添加 按节拍播放音符 指令,完整程序如下: 4. 程序运行 点击运行,程序运行成功后,行空板屏幕显示效果如下图,快根据《小星星》琴谱来演奏吧! 任务二 设置辅助琴谱 1. 编写程序 任务一演奏过程中,要一边盯着琴键一边看着琴谱,稍不留神就忘了自己弹哪里了,对于初学者来说,弹奏一首完整的曲子简直太难了。如果在我们演奏过程中,琴谱可以自己在行空板的屏幕上显示,这样就变得更加容易了。在上一个任务基础上增加一个辅助琴谱的功能,让琴谱自己在琴键上方移动。 (1) 显示琴谱 将图片素材文件中的琴谱图片,加载进项目中。 使用 显示图片 指令,设置图片在行空板(160,300)的位置显示。由于琴键占的宽度大约为160,因此琴谱的宽度不能超过80,所以使用 更新对象的数字参数 指令,设置琴谱图片的数字参数宽为80。 (2) 琴谱移动 琴谱移动,其实就是让图片循环向上移动,大家还记得怎样让图片向上移动吗?新建一个 变量img_y 用来改变图片的Y坐标值。 要实现琴谱图片连续向上移动,将图片移动的程序放到循环执行里即可。 完整程序如下: 2. 程序运行 点击运行,程序运行成功后,就可以开始演奏啦!演奏过程中,有了辅助琴谱,再也不用盯着琴键的同时,再去查看琴谱了。 3. 试一试 琴谱移动到末尾时,如果我们想再弹一次,只能重新上传程序,这样就太麻烦了。能不能在屏幕上加一个辅助琴谱按键,当我们想再弹一次时,按下辅助琴谱琴键,琴谱重新出现,并且循环向上移动。 知识园地 1. 蜂鸣器 行空板之所以能发声,是因为背部板载了蜂鸣器,简单地说,就是行空板上板载了一个可以发声的电子元件,给这个元件写不同的程序,就可以控制它发出声音。 为什么行空板上的蜂鸣器可以发出不同的音符,而有的蜂鸣器只能发出一种声音?其实蜂鸣器按驱动方式的原理分为有源蜂鸣器和无源蜂鸣器,下面一起来了解一下这两种蜂鸣器有什么区别。 (1) 有源蜂鸣器 有源蜂鸣器和无源蜂鸣器最根本的区别是输入信号的要求不一样,这里的“源”不是指电源,而是指振荡源。有源蜂鸣器内部带振荡源,只要一通电就会有声音输出,并且输出的声音是固定的,不能改变。 (2) 无源蜂鸣器 无源蜂鸣器的内部是没有这样的振荡源,所以仅用这样的直流信号,是不能让它发出声音的,必须方波信号去驱动振动装置,然后输出声音。 你知道什么是方波信号吗? 大家都有直尺吧,将直尺的一端用手固定在桌上,然后用另一只手去拨动直尺。拨动过程中你会发现拨动的力度不一样,直尺的振动频率和发出的声音也不一样。我们可以将拨动直尺的力度,理解为无源蜂鸣器中的方波信号输入。输入的方波信号不同,输出的声音也就不一样。 通过对有源蜂鸣器和无源蜂鸣器的学习,现在是否明白了行空板上的蜂鸣器可以发出不同音符的原因? 行空板上板载的就是这种无源蜂鸣器,程序按节拍播放音符指令中,选择不同的琴键,其实就是在给蜂鸣器设置不同的方波信号输入,所以蜂鸣器可以输出各种不同的音符。 2. 指令学习 该指令用于控制蜂鸣器播放音符,音符分为中高低三个音区,共36种音符,同时还提供8种不同的节拍。 挑战自我 在一些难一点的琴谱中,会出现了“#”和“b”这两种符号。琴谱中加了“#”和“b”的音符,代表该音符是变化音符,“#”代表升音,“b”代表降音。 而钢琴中的白色琴键用于弹奏基本音符,黑色琴键用于弹奏变化音符。变化音与黑色琴键的对应关系如下图: 如果要弹奏有变化音符的琴谱,就需要将黑色琴键也加上去。接下来,大家一起想一想怎样才能在行空板上添加黑色琴键,并且让蜂鸣器发出变化音符? 提示1:使用绘制矩形的方式,绘制钢琴黑白琴键。 提示2:按节拍播放音符指令中,点击黑色琴键可以选择变化音符。 附件下载 第八课 智慧钢琴.zip |
Bincoco 发表于 2023-8-17 10:17 看下这里的解决方法https://mc.dfrobot.com.cn/thread-314045-1-1.html |
一地鸡毛 发表于 2023-12-28 08:49 看下这里的解决方法https://mc.dfrobot.com.cn/thread-314045-1-1.html |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed