手把手带你实现 鸿蒙应用 - 键盘音乐
手把手带你实现 鸿蒙应用-键盘音乐
先看结果
关键技术
基本布局技巧
AVPlayer
面向对象
全部采用 V2 版本 状态管理技术
新建一个项目
创建项目
新建项目
目录结构 - 可以后期用到再去新建
设置全局沉浸式
设置和不设置全局沉浸式的区别是这样的
在
src/main/ets/entryability/EntryAbility.ets
文件内进行编辑loadContent
中进行设置
此时效果是这样的 , 文字也会直接在状态栏上显示
此时,考虑到不同设备的状态栏高度可能不同,所以我们需要
动态获取状态栏高度,存到全局状态中
AppStorageV2
页面读取全局状态中的状态栏高度,单独给页面进行设置
AppStatu
是自定义类,用来存储数据 状态栏高度数据的src/main/ets/types/index.ets
搭建背景
搭建琴谱
琴谱背景区域
使用背景图片+模糊搭建琴谱区域,高度由内容撑开
定义琴谱数据类型
琴谱只需要两个字段
琴谱对应歌曲的标题
title
琴谱 对应的英文字母
content
src/main/ets/types/index.ets
定义字母的正确和不正确的状态类型
如图所示,绿色为正确
黄色为未输入或者不正确
处理要渲染的数据
为了方便页面的效果处理,我们需要将手上的数据,简单处理下,方便页面渲染
手上的数据
src/main/ets/mock/index.ets
处理后的数据结构
为什么要这样处理,因为让它方便渲染
如何处理呢 在页面打开的时候在
aboutToAppear
中处理即可lyricList
得到结果
搭建键盘
准备音频资源
键盘一个 26 个字母,对应边有 26 个声音。一一相对应
其中,我们的静态资源存放在 rawFile 中,鸿蒙应用在打包时不会对里面的文件做任何的编译处理,然后在使用的时候需要搭配 AVPlayer 使用。如
定义字母和音频映射数据
src/main/ets/mock/index.ets
页面关联数据
构建键盘布局结构
使用键盘布局结构
按下键盘,播放音乐功能
关键流程
封装 AVPlayer 管理类,每一个按键对应一个单独声音,因为上一个声音没有播放完毕,我们是可以同时播放第二个、第三个声音的,所以可以通过实例化多个 AVPlayer 来使其一一对应
点击键盘 获取键盘对应的音乐路径
将音乐路径传递给 AVPlayer,使其播放声音
了解 AVPlayer
使用 AVPlayer 可以实现端到端播放原始媒体资源,本开发指导将以完整地播放一首音乐作为示例,向开发者讲解 AVPlayer 音频播放相关功能。
播放的全流程包含:创建 AVPlayer,设置播放资源,设置播放参数(音量/倍速/焦点模式),播放控制(播放/暂停/跳转/停止),重置,销毁资源。
在进行应用开发的过程中,开发者可以通过 AVPlayer 的 state 属性主动获取当前状态或使用 on('stateChange')方法监听状态变化。如果应用在音频播放器处于错误状态时执行操作,系统可能会抛出异常或生成其他未定义的行为。
使用流程基本围绕这一张图即可
AVPlayer 基本使用流程
创建 AVPlayer 实例 此时,avPlayer 进入空闲状态 idle
监听状态的改变 我们对播放器的每一个操作,都会影响到它状态发生改变
设置播放音乐的 URL
开始播放
我们已经在
prepared
状态中,设置了自动播放了avPlayer.play()
核心思路讲解
我们思考一下弹钢琴的逻辑,我们是不是可以同时按下多个按键,同时播放声音的? 所以我们需要 new 多个 AVPlayer 播放器实例
如果你重复按下两个相同的琴键,终止上一个琴键的播放,马上开启新的一个琴键的播放
最后,当这个琴键播放完毕时,我们要销毁掉这个实例,释放内存
AVPlayerManager
src/main/ets/utils/AvPlayerManager.ets
实现了对 AVPlayer 功能的基本封装
对琴谱数据进行扁平化处理
方便判断按下的键盘是否正确和播放正确的按键音乐
给键盘添加点击事件
实现点击播放音乐
按下键盘,判断按键是否正确
类似练习打字效果,按对按键了,就设置绿色,如:
因为我们的琴谱是个二维数组
因此,我们也是定义一个数组 [行的坐标,列的坐标],分别是二维数组相对应
接着,也是在点击事件中,根据按下的按键和对应的琴谱是否相等,如果是,设置绿色
小结
本篇教程可能用词不够简洁,如按键、键盘、音乐、乐谱、琴谱有些名词其实是代表同一个意思。
页面结构功能没有拆分成组件独立管理
功能稍弱,如切换琴谱,按键反馈、登录、分享、排行功能都缺失,只实现了核心的功能
版权声明: 本文为 InfoQ 作者【万少】的原创文章。
原文链接:【http://xie.infoq.cn/article/4293d1d4bf73814aed9b3437a】。文章转载请联系作者。
评论