【花雕动手做】行空板 K10 系列实验之音频录放后台播放与播放音符音调1155661

【花雕动手做】行空板 K10 系列实验之音频录放后台播放与播放音符音调1155661 行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板100%采用国产芯片知识产权自主可控符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源教学过程中无需额外连接其他设备便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。主要特点集成摄像头内置算法可进行离线图像检测集成麦克风内置算法可进行离线语音识别集成扬声器内置算法可进行离线语音合成2.8寸彩色屏幕数据展示更清晰集成度高利于教学接口丰富兼容软件多扩展性好主打音频录放模块相关说明辅助屏幕显示相关积木LED控制模块【花雕动手做】行空板 K10 系列实验之音频录放后台播放与播放音符音调1155661实验开源代码// 引入行空板K10官方核心驱动库集成屏幕、按键、RGB彩灯、音频播放全套硬件驱动#includeunihiker_k10.h// 动态标记变量volatile修饰防止编译器优化保证中断/回调修改后主循环能实时读取最新值volatilefloatmind_n_okk;// 按键按下回调函数前置声明setup中绑定按键事件需要提前告知编译器函数存在voidonButtonAPressed();voidonButtonBPressed();// 实例化行空板全局硬件主对象所有屏幕、灯光、按键、音频操作都通过该对象调用UNIHIKER_K10 k10;// 屏幕显示方向参数3用于旋转屏幕画面可选0/1/2/3四个方向uint8_tscreen_dir3;// 实例化音频播放对象支持内置旋律播放、自定义单音播放Music music;// 上电/复位仅执行一次的硬件初始化入口voidsetup(){// 初始化行空板底层所有硬件通信总线k10.begin();// 根据设定方向初始化显示屏驱动k10.initScreen(screen_dir);// 创建屏幕绘图缓冲区绘图操作先写入缓存统一刷新避免屏幕闪烁k10.creatCanvas();// 给A按键绑定按下触发回调函数按下A自动执行onButtonAPressedk10.buttonA-setPressedCallback(onButtonAPressed);// 给B按键绑定按下触发回调函数按下B自动执行onButtonBPressedk10.buttonB-setPressedCallback(onButtonBPressed);// 设置屏幕整体背景颜色为纯黑色 0x000000k10.setScreenBackground(0x000000);// 在画布第3行绘制红色标题文字k10.canvas-canvasText( 行空板K10系列实验,3,0xFF0000);// 在画布第5行绘制白色说明文字k10.canvas-canvasText(后台播放音乐与播放音符音调,5,0xFFFFFF);// 在画布第7行绘制浅绿色乐谱提示文字k10.canvas-canvasText( 一闪一闪亮晶晶1155661,7,0x99FF99);// 将画布缓存的全部文字画面刷新到实体屏幕文字才会显示k10.canvas-updateCanvas();// 初始化状态标记变量0代表无播放任务mind_n_okk0;}// 主循环函数setup初始化完成后无限循环执行voidloop(){// 判断标记为1触发A键对应的生日歌播放任务if((mind_n_okk1)){delay(500);// 阻塞延时0.5秒music.playMusic(BIRTHDAY);// 播放库内置生日快乐旋律mind_n_okk0;// 播放完成重置标记避免重复播放}// 判断标记为2触发B键对应的自定义音符一闪一闪亮晶晶片段if((mind_n_okk2)){delay(500);// 阻塞延时0.5秒// playTone(音调频率, 持续时长ms) 逐段播放音符music.playTone(131,8000);music.playTone(131,8000);music.playTone(196,8000);music.playTone(196,8000);music.playTone(220,8000);music.playTone(220,8000);music.playTone(196,8000);mind_n_okk0;// 音符播放完毕重置状态标记}// 循环末尾默认关闭全部RGB灯-1代表控制所有板载彩灯0x000000黑色熄灭k10.rgb-write(-1,0x000000);}// A按键按下事件回调函数按键触发时自动运行不阻塞loop循环voidonButtonAPressed(){mind_n_okk1;// 将状态标记置1主循环识别后播放生日歌k10.rgb-write(-1,0x00FF00);// 按下A全部RGB绿灯常亮}// B按键按下事件回调函数按键触发时自动运行不阻塞loop循环voidonButtonBPressed(){mind_n_okk2;// 将状态标记置2主循环识别后播放自定义音符k10.rgb-write(-1,0x0000FF);// 按下B全部RGB蓝灯常亮}代码解读一、头部库引入、全局变量、函数声明#includeunihiker_k10.h导入行空板 K10 官方集成库内置屏幕、按键、RGB 彩灯、扬声器音频全套驱动无需手动配置硬件引脚。volatilefloatmind_n_okk;变量作用状态标记用来区分用户按下 A 键还是 B 键volatile关键字该变量会在按键回调函数中修改告诉编译器不要优化缓存保证主循环能实时读到最新数值防止按键失效、状态不刷新。voidonButtonAPressed();voidonButtonBPressed();函数前置声明。后面要给按键绑定这两个按下触发函数编译器需要提前识别函数名否则会报未定义错误。UNIHIKER_K10 k10;行空板硬件总实例屏幕、灯光、按键、喇叭全部通过k10调用。uint8_tscreen_dir3;屏幕旋转参数0/1/2/3 对应四种显示方向3 为当前设置的屏幕朝向。Music music;音频播放对象两种播放能力内置完整旋律、自定义单音符播放。二、setup () 初始化函数上电只执行 1 次k10.begin()初始化主板底层硬件总线k10.initScreen(screen_dir)按指定方向初始化显示屏k10.creatCanvas()创建屏幕画布缓存绘图先存缓存统一刷新消除屏幕闪烁setPressedCallback()绑定按键回调按下 A/B 会自动执行对应函数属于中断式响应不会被delay卡住setScreenBackground(0x000000)屏幕底色设纯黑canvasText(文字,行数,颜色)在画布指定行打印彩色文字展示实验标题与功能说明updateCanvas()把缓存里的文字刷新到实体屏幕mind_n_okk 0开机初始化状态标记0 无播放任务。三、loop () 无限主循环程序初始化完成后该函数不停循环运行负责执行音频播放逻辑。判断 mind_n_okk 1A 键按下标记延时 500ms调用内置旋律播放生日快乐歌标记清零避免重复循环播放。判断 mind_n_okk 2B 键按下标记延时 500msplayTone(频率,持续毫秒) 逐个播放音符实现《一闪一闪亮晶晶》片段标记清零。末尾 k10.rgb-write(-1, 0x000000)-1代表所有板载 RGB 灯0x000000 为黑色每次循环末尾熄灭彩灯效果按键点亮彩灯循环走到末尾自动关灯。四、按键回调事件函数触发式不阻塞程序A 键回调 onButtonAPressed ()mind_n_okk 1修改状态标记通知主循环播放生日歌RGB 全部绿灯亮起作为按键按下视觉提示。B 键回调 onButtonBPressed ()mind_n_okk 2修改状态标记通知主循环播放自定义音符RGB 全部蓝灯亮起作为按键按下视觉提示。五、整体运行逻辑与设计优点完整运行流程开机黑屏显示文字无灯光、无声音按下 A绿灯亮 → 等待 0.5s 播放生日快乐歌 → 播放结束灯光自动熄灭按下 B蓝灯亮 → 等待 0.5s 播放一段单音旋律 → 播放结束灯光自动熄灭。代码设计优势回调分离思想按键回调只改标记播放、延时等耗时操作全部放在主循环不在回调里写长延时不会造成主板卡顿、按键失灵状态机控制依靠单一变量区分两种功能逻辑清晰方便后续拓展更多按键功能硬件可视化反馈按键对应不同颜色灯光用户直观区分按下了哪个按键。Mind图形编程实验场景图与视频记录