2056| 3
|
音乐OLED彩光yeelight灯 |
完整视频地址:https://mp.weixin.qq.com/s/p1K3nIepECMDAaQ8Wfs6Dw 长时间以来,用树莓派弹奏靠谱、着调的音乐是很多树莓派初学者的梦想。本文用语音播放的形式配合纯正的钢琴音实现了乐谱的演奏,同时,借助OLED显示屏实时显示正在弹奏的乐谱,让彩光灯随音乐一起翩翩起舞! 视频地址: 一、文件准备 1、准备基本音阶声音文件 音阶文件中有7个mp3文件,猜猜1-7分别代表什么意思?别告诉我你没有音乐细胞呀! 2、把声音文件夹拷贝到树莓派/home/pi/下。如图: 树莓派传输文件的方法有很多,最常用的是远程控制,当然还有FTP和SFTP的方法。先学会一种方法,操作熟练了,再去试试其他方法,不要总问为什么?不同方法各有优劣,多一种方法,你就就会多一条成功的道路。 二、音乐处理 1、寻找合适的乐谱 这里我选择的是简单易用的儿歌小星星。如果你选择的是较为复杂的乐谱,那么第一大步中基本的音阶就不够用了,你需要增加另外音阶的声音文件。 2、分析乐谱 儿歌非常简单,我把它分解成对称的6个部分。每一个部分用1个列表来描述,全歌共有6个列表,把整个的歌曲存储为1个大列表。 3、创建第1部分列表: 创建变量1,赋值为列表使用。 4、依次创建其他5部分的列表 分别命名为2、3、4、5、6。 各部分积木与第1部分类似,最终完成6个列表。 5、创建音乐列表 创建音乐列表,将6个部分的列表赋值给音乐列表。 现在我们就建立了一个二维列表。大列表是音乐列表,其中又包含了6个小列表,每一个小列表中存储了每一部分的乐谱。 三、创建颜色列表 1、查找单色RGB值 借助百度搜索引擎,查找红、橙、黄、绿、蓝、靛、紫七种颜色的RGB,如下所示: 2、单色列表 创建红、橙、黄、绿、蓝、靛、紫七种颜色的列表,输入其RGB值。红色列表如下图,其他颜色类似。 3、创建颜色列表 将七色列表赋值给颜色列表,如下图: 四、yeelight灯设置 1、搜索yeelight灯的设备IP列表 2、输出设备IP列表 3、实例化一个yeelight为实例,命名为yeelight 实例化是面向对象编程的常用方法,简单说,就是先创建一个类,然后为这个类添加属性和方法,当你需要用到这个类时,只需要实例化一个对象,然后就可以调用这个类的属性和方法了。 将上一步获取的设备IP正确填写。 4、先关闭yeelight灯,再重新打开yeelight灯,以便后面程序调用。 五、创建初始化函数 创建初始化函数,将以上所有的积木封装起来,如下图: 将其折叠: 今天我们的程序比较大,在一个页面上显示有些困难,通过封装的形式,把已经完成的积木封装成一个函数,是一个良好的习惯。用封装的方法打包程序,增加程序的可读性,今后我们会反复运用。 六、循环读取音乐列表中的每一部分 1、打开OLED屏 2、初始化OLED屏 参数采用默认设置。 3、创建1-6的循环,步长为1 音乐列表中一共有6个小列表,故循环6次。 4、从音乐列表读取第i个元素 获取第i个列表元素,如果i为1时,读取的是第1个小列表,即第1部分的小列表,并将其赋值为当前列表。 至此,我们通过循环来读取对应i值的小列表,并赋值给当前列表。 5、创建变量X0并赋值为0 这个X0,在后续的OLED显示中作为它的横坐标,这个横坐标在每读取一次音乐小列表时,都需要从0开始。 6、新建图片并赋值给变量图片 参数采用默认设置。 第六部分程序如下: 七、循环读取每一个音符 1、创建从1到7的j循环 在我们的音乐小列表中,已经存储了7个音符,通过循环的方法依次获取每一个音符。 2、创建当前音符变量 从当前列表中取出第j个音符,并赋值给当前音符。 3、动态更新X0坐标 将X0加上14后,重新赋值给X0。 后面OLED要显示每一个当前音符,通过这条积木实现相邻音符间隔14个像素。 4、如果j是第7个,显示内容为当前音符再增加一个延长线- 5、如是j不是第7个,显示内容为当前音符 八、播放显示当前音符 1、为图片添加文字 显示当前音符,大小是18个像素。 2、把图片显示到OLED屏 3、设置yeelight灯的颜色 根据当前音符获取颜色列表中的对应颜色。 如当前音符为1时,对应的颜色是红色。再如当前音符是7时,对应的颜色是紫色。从而实现了灯光颜色随音符而改变。 4、获取当前音符的文件地址 建立字符串使用,动态取得当前音符对应的mp3文件地址,并将其赋值给文件地址变量。 5、播放音乐 6、时值延长 通过观察乐谱,我们发现,最后一个音符的时值是前面音符的2倍。处理方法如下: 1、如果当前音符是第7个音符,其播放时间为1秒。 2、如果当前音符不是第7个音符,其播放时间为0.5秒 。 一点说明,我们的乐谱比较简单,不同音符的时值只有两种情况,这里我们做了简化处理。如果复杂的乐谱怎么办?当然有办法,写两个列表,一个列表是音符,另一个列表是音符的时值,逐个对应进行调用即可。 至此,我们的音乐OLED彩光yeelight灯就全部结束了。最终程序如下: 完整视频地址:https://mp.weixin.qq.com/s/p1K3nIepECMDAaQ8Wfs6Dw |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed