当前位置:网站首页>#夏日挑战赛#带你玩转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学院
边栏推荐
- Jetpack compose tutorial
- 一文搞懂Go语言中文件的读写与创建
- Chrome开发工具:VMxxx文件是什么鬼
- Application practice | Shuhai supply chain construction of data center based on Apache Doris
- Cann operator: using iterators to efficiently realize tensor data cutting and blocking processing
- Employment prospects and current situation of Internet of things application technology
- BCG 使用之CBCGPProgressDlgCtrl进度条使用
- SSRS筛选器的IN运算(即包含于)用法
- Pythagorean number law (any three numbers can meet the conditions of Pythagorean theorem)
- Kotlin inheritance
猜你喜欢
黑马程序员-软件测试--08阶段2-linux和数据库-23-30-进程端口相关,修改文件权限,端口号信息的获取,程序和进程相关操作,linux命令案例
C language - Introduction - Foundation - grammar - process control (VII)
BCG 使用之CBCGPProgressDlg进度条使用
HMM hidden Markov model and code implementation
黑马程序员-软件测试--09阶段2-linux和数据库-31-43修改文件权限字母发的说明,-查找链接修改文件,查找文件命令,链接文件,压缩解压方式,vi编辑器基本使用,
Actual combat simulation │ JWT login authentication
C # better operation mongodb database
Huawei Nova 10 series supports the application security detection function to build a strong mobile security firewall
ACM组合计数入门
Crystal optoelectronics: ar-hud products of Chang'an dark blue sl03 are supplied by the company
随机推荐
紫光展锐完成全球首个 5G R17 IoT NTN 卫星物联网上星实测
repeat_ P1002 [NOIP2002 popularization group] cross the river pawn_ dp
BCG 使用之CBCGPTabWnd控件(相当于MFC TabControl)
公司要上监控,Zabbix 和 Prometheus 怎么选?这么选准没错!
Anhui Zhong'an online culture and tourism channel launched a series of financial media products of "follow the small editor to visit Anhui"
kotlin 条件控制
What financial products can you buy with a deposit of 100000 yuan?
1500万员工轻松管理,云原生数据库GaussDB让HR办公更高效
【历史上的今天】7 月 4 日:第一本电子书问世;磁条卡的发明者出生;掌上电脑先驱诞生
c# . Net MVC uses Baidu ueditor rich text box to upload files (pictures, videos, etc.)
关于联邦学习和激励的相关概念(1)
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?
Development and construction of DFI ecological NFT mobile mining system
Wireshark network packet capture
做社交媒体营销应该注意些什么?Shopline卖家的成功秘笈在这里!
kotlin 循环控制
Niuke Xiaobai month race 7 e applese's super ability
Dark horse programmer - software testing - 09 stage 2-linux and database -31-43 instructions issued by modifying the file permission letter, - find the link to modify the file, find the file command,
Pythagorean number law (any three numbers can meet the conditions of Pythagorean theorem)
BCG 使用之新建向导效果