当前位置:网站首页>#夏日挑战赛#带你玩转HarmonyOS多端钢琴演奏
#夏日挑战赛#带你玩转HarmonyOS多端钢琴演奏
2022-07-04 18:41:00 【51CTO】
本文正在参加星光计划3.0—夏日挑战赛
前言
想弹出悦耳的曲子奈何没有钢琴,代码来实现你的演奏愿望,软通动力程序小哥手把手带你编码造钢琴,用手机弹出你想要的曲子,多个手机同时演奏都不是问题。
项目介绍
本项目主要采用HarmonyOS跨端迁移,Fractio等实现钢琴88个按键分为七个区域流转到不同设备上播放对应音频。传统实体钢琴三个音区,分为九组,如下图所示:
本项目在设备A上初始显示的是中音区小字一组区域的钢琴按键,点击流转按钮即可弹出三音区,七个音域供用户选择,在用户确认好所选音域,在满足流转特性的约束及限制的前提下,即可在设备B上展示所选音域,并且设备A,B可独立操作,互不影响。
进入项目后,展示的钢琴中音区中的小字一组这部分,如下图所示:
白色七个按键和黑色五个按键,对应中音区小字一组相对应的音频,可同时多个按键触发音频播放。
1.流转按钮
点击流转按钮,会弹出选择音域弹出框,选项总共有三个音区,分别为低音区、中音区、高音区。
选择确定,则会弹出流转设备选择框,点击对应设备名称,则在选择音域时,选择的对应音域流转到设备B,如下图所示:
设备B显示,A设备所选则对应音域,流转按钮变为已流转。
若在设备B上点击已流转按钮,则会弹出退出流转弹出框,如下图所示:
若选择取消,则弹出框消失,界面无变化,触摸及点击弹出框以外的区域,弹出框也会消失。
若选择确定,设备B退出流转。
2.音域选择按钮
点击音域选择按钮,会选项总共有三个音区,分别为低音区、中音区、高音区,低音区二级选项为大字二、一组;大字组;中音区二级选项为小字组、小字一组、小字二组;高音区二级选项为小字三组,小字四、五组,默认为中音区,小字一组,如下图所示:
选择确定,选择的对应音域,该设备的当前音域界面则会变成所选音域,比如选择小字四,五组音域,同时再次点击音域选择按钮时,默认选择项则变为小字四、五组,与当前选择结果对应,如下图所示:
3.钢琴按键按下触发效果
①.白色按钮E触发效果,如下图所示:
②.黑色按钮d1m触发效果,如下图所示:
③.多指按键触发效果,如下图所示:
逻辑实现
一:流转相关功能开发步骤:
1.创建项目中的MainAbility中实现IAbilityContinuation接口,此外,还需要在MainAbility的onStart()中,调用requestPermissionsFromUser()方法申请权限。
2.在对应的config.json中声明跨端迁移访问的权限:
ohos.permission.DISTRIBUTED_DATASYNC,在config.json中的配置如下:
3.在MainAbilitySlice中实现钢琴按键的页面,代码逻辑在MainAbilitySlice中实现,代码示例如下:
4.给流转按键绑定点击事件,点击流转按钮弹出音域选择框,确定所选音域之后,弹出设备选择框:代码示例如下:
5.根据设备列表适配即可将所有符合条件的设备展示在设备弹窗当中,供用户选择,设备列表适配代码如下:
6.根据所选设备B的Id,即可在设备上展示所选音域,并且根据条件使用Fraction替换设备A上小字一组音域,使之亦可操作钢琴按键,示例代码如下:
7.FA的跨端迁移还涉及到状态数据的传递,需要实现IAbilityContinuation接口,以便实现迁移过程中特定事件的管理能力,代码示例如下:
二:音频播放能力相关功能开发步骤
本项目实现了设备A,B同时具有音频的播放能力,音频播放则是作为一个单独的serviceAbility,使用HarmonyOS IDL实现不同设备之间的通信及数据的传递,代码示例如下:
AudioServiceAbility则在项目启动时,加载钢琴按键音频资源,并保持系统后台运行,防止被系统kill,并且根据用户所选音域,及触摸的不同按键传递给SoundPlayer进行音频播放,代码示例如下:
1.在MainAbilitySlice中OnStart()启动本地音频服务,避免音频代理接口Proxy为空,代码示例如下:
三:音域选择能力相关功能开发步骤
1.点击音域选择按钮,即可弹出音域选择弹出框,同流转按钮时,音域选择弹出框一样,用户在选择好对应音域,当前设备即可切换为所选音域,并可进行相应音频播放,在MainAbilitySlice的OnStart()方法中初始化七个音域在示例代码如下:
2.根据用户选择的结果,替换设备上的音域,代码示例如下:
参考
1.HarmonyOS流转特性(跨端迁移)可参考: https://developer.harmonyos.com/cn/docs/documentation/doc-guides/hop-cross-device-migration-guidelines-0000001146058939
2.HarmonyOS IDL接口使用规范可参考:
https://developer.harmonyos.com/cn/docs/documentation/doc-references/idl-overview-0000001050762835
3.项目地址,以供参考: https://gitee.com/swan-link/simple-piano
总结分析
1.流转前,需满足流转约束条件,各设备需要处于同一WiFi,且为同一华为账号登录;
2.流转之后,设备B上的音域选择功能等同与设备A音域选择功能,设备A与设备B音频播放互不冲突;
3.目前Nova 9手机运行本项目时,底层存在问题,暂时无法解决,其他手机无问题;
4.HarmonyOS SoundPlayer原生短音播放所存在的弊端,SoundPlayer播放短音播放时,需提前加载好所有的音频资源,即createSound(Context context, int resourceId)方法是根据应用程序上下文合音频资源ID加载音频数据生成短音资源,该方法是异步的,而本项目钢琴按键资源较多,有88个按键资源,完成所有短音资源生成需要耗时较长,项目在该处,解决办法如下:
项目中所有按键音频资源,划分为七个音域,同时把所有资源分为七个SoundPlayer进行短音资源生成,可有效减少耗时。
5.本项目触发钢琴按键音,是在整个布局页面设置触摸事件,灵活获取设备屏幕大小,对不同按键区域进行划分,使用户在操作时,可以实现对应按键的触摸效果,以及对应钢琴按键音频的播放,示例代码如下:
以上为采用HarmonyOS跨端迁移,Fractio等技术实现手机端钢琴交互流程,通过该项目,我们能够快速理解数据的“多端协同”和“跨端迁移”,便于在其他项目中快速实现无缝切换的需求。
更多原创内容请关注软通动力OpenHarmony学院
边栏推荐
- 2022 Health Exhibition, Beijing Health Expo, China Health Exhibition, great health exhibition November 13
- Is it necessary to apply for code signing certificate for software client digital signature?
- 输入的查询SQL语句,是如何执行的?
- Actual combat simulation │ JWT login authentication
- In the first month of its launch, the tourist praise rate of this campsite was as high as 99.9%! How did he do it?
- Oracle database, numbers Force 2 decimal places to display-Alibaba Cloud
- Employment prospects and current situation of Internet of things application technology
- kotlin 继承
- What financial products can you buy with a deposit of 100000 yuan?
- kotlin 基本数据类型
猜你喜欢
【历史上的今天】7 月 4 日:第一本电子书问世;磁条卡的发明者出生;掌上电脑先驱诞生
Swagger suddenly went crazy
Huawei Nova 10 series supports the application security detection function to build a strong mobile security firewall
上线首月,这家露营地游客好评率高达99.9%!他是怎么做到的?
Cbcgpprogressdlg progress bar used by BCG
Detailed explanation of Audi EDI invoice message
QT writing the Internet of things management platform 38- multiple database support
做社交媒体营销应该注意些什么?Shopline卖家的成功秘笈在这里!
Creation of JVM family objects
Euler function
随机推荐
HMM hidden Markov model and code implementation
复杂因子计算优化案例:深度不平衡、买卖压力指标、波动率计算
Data set division
Niuke Xiaobai month race 7 who is the divine Archer
Template_ Judging prime_ Square root / six prime method
2022 version of stronger jsonpath compatibility and performance test (snack3, fastjson2, jayway.jsonpath)
Employment prospects and current situation of Internet of things application technology
1006 sign in and sign out (25 points) (PAT class a)
ACM组合计数入门
上线首月,这家露营地游客好评率高达99.9%!他是怎么做到的?
Creation of JVM family objects
BCG 使用之CBCGPProgressDlg进度条使用
What does the neural network Internet of things mean? Popular explanation
Find the nth power of 2
如何让你的小游戏适配不同尺寸的手机屏幕
MySQL中的日期时间类型与格式化方式
QT writing the Internet of things management platform 38- multiple database support
更强的 JsonPath 兼容性及性能测试之2022版(Snack3,Fastjson2,jayway.jsonpath)
多表操作-外连接查询
In operation (i.e. included in) usage of SSRs filter