专栏首页C++核心准则原文翻译自学鸿蒙应用开发(45)- 播放短音频

自学鸿蒙应用开发(45)- 播放短音频

秒表动作的同时播放音频,会更加带感。以下是效果视频:

准备音频文件

秒表动作音频可以自己录制,也可以从网上寻找。得到文件之后使用音频编辑软件进行编辑,得到一个滴答滴音频文件之后将这个文件放置到项目的midia文件夹中:

播放音频文件

鸿蒙应用开发可以使用SoundPlayer播放音频文件:

private void startSound(float speed, OnPlayListener listener) {
    //实例化音频播放器对象
    soundPlayer = new SoundPlayer(AudioManager.AudioVolumeType.STREAM_MUSIC.getValue());
    // 指定音频资源加载并创建短音
    soundId = soundPlayer.createSound(getContext(), ResourceTable.Media_1tick);
    soundPlayer.setOnCreateCompleteListener((soundPlayer1, i, i1) -> {
        // 短音播放,设置音量、循环次数和播放速度
        taskId = soundPlayer.play(soundId);
        soundPlayer.setVolume(taskId, 1.0f);
        soundPlayer.setLoop(taskId, -1); // “-1”表示一直循环播放
        soundPlayer.setPlaySpeedRate(taskId, speed);
        if(listener != null){
            listener.onPlay();
        }
    });
}

音频播放后,我们得到一个音频播放器对象soundPlayer、播放音频任务识别子taskId,音频文件识别子soundId。

停止播放

停止播放时需要用到开始播放时得到的各种信息:

private void stopSound(){
    //停止播放
    soundPlayer.stop(taskId);
    taskId = 0;
    // 释放短音资源
    soundPlayer.deleteSound(soundId);
    soundId = 0;
    // 释放播放器
    soundPlayer = null;
}

代码中清除了所有有关播放的信息,实际开发时可以根据实际情况考虑不销毁播放器,或者不释放音频资源。

参考代码

完整代码可以从以下链接下载:

https://github.com/xueweiguo/Harmony/tree/master/StopWatch

参考资料

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/media-audio-sound-playback-0000000000041097

作者著作介绍

《实战Python设计模式》是作者去年3月份出版的技术书籍,该书利用Python 的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。

对设计模式感兴趣而且希望随学随用的读者通过本书可以快速跨越从理解到运用的门槛;希望学习Python GUI 编程的读者可以将本书中的示例作为设计和开发的参考;使用Python 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。

本文分享自微信公众号 - 面向对象思考(OOThinkingDalian),作者:面向对象思考

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自学鸿蒙应用开发(12)- Checkbox

    下面代码中的第20行获取RadioContainer组件后,在第24行根据Checkbox的状态更新TimePicker的形式,然后在第42行~45行为Chec...

    面向对象思考
  • 自学鸿蒙应用开发(13)- ProgressBar

    下面代码中的第18行获取ProgressBar组件后,在第19行根据TimePicker的状态更新Progress的形式,然后在第26行TimerPicker的...

    面向对象思考
  • 自学鸿蒙应用开发(14)- RoundProgressBar

    如下代码中35行~44行所示,在布局中增加RoundProgressBar组件。

    面向对象思考
  • 自学鸿蒙应用开发(15)- ScrollView

    如下代码中第2行~第10行和第137行所示,可以很简单地在布局中增加ScrollView组件。

    面向对象思考
  • 自学鸿蒙应用开发(16)- ListContainer

    在layout目录下的xml文件中创建ListContainer布局,将其命名为page_listcontainer.xml。

    面向对象思考
  • 任正非:鸿蒙系统已经上网,即将应用到全系产品

    据新浪报道,华为创始人任正非在 2020 冬季达沃斯论坛上表示,鸿蒙系统已经上网,未来会应用到华为旗下手机、平板、电视等系列产品。

    SDNLAB
  • 自学鸿蒙应用开发(44)- 秒表应用开发(2)

    在本应用的布局中,我们使用了指针式秒表组件、两个操作按钮和一个表示计时结果的Text组件:

    面向对象思考
  • 自学鸿蒙应用开发(43)- 秒表应用开发(1)

    从本篇文章开始,边学边练开发一个秒表应用,本文是本系列的第一篇:绘制表盘。先看演示视频:

    面向对象思考
  • stm32mp157开发板LINE 接口测试方法

    注意:LINE 接口只支持音频播放输出,需要专门支持 LINE 接口的设备才可以进行连接播放音频。

    韦东山
  • 自学鸿蒙应用开发(26)- 自定义CommonDialog

    上一篇文章中说过,直接使用鸿蒙系统中的CommonDialog大致是下面的效果:

    面向对象思考
  • 自学鸿蒙应用开发(27)- 自定义ListDialog

    这个效果过于简陋,无法用于实际的产品开发。本文介绍如何定制自己的ListDialog。还是先看演示视频:

    面向对象思考
  • 自学鸿蒙应用开发(9)- TimePicker组件

    如下面代码中21行~49行所示,在获取TimePicker组件后,一方面在button的动作响应中计算所选时刻和当前时刻的秒数差之后用小窗口表示出来;另一方面在...

    面向对象思考
  • 自学鸿蒙应用开发(10)- Switch组件

    如下面代码中20行和42行~49行所示,在获取Switch组件后,在Switch响应处理中根据Switch的当前状态为TimePicker设定是否像是为24小时...

    面向对象思考
  • 自学鸿蒙应用开发(11)- RadioButton和RadioContainer

    本文介绍在鸿蒙应用中RadioButton和RadioContainer组件的基本用法。

    面向对象思考
  • 自学鸿蒙应用开发(17)- TabList和Tab

    在layout目录下创建TabList布局,将其命名为ability_tablist.xml。

    面向对象思考
  • 自学鸿蒙应用开发(5)- button组件

    代码中按钮id被指定为hello_button,这个信息会在下面的响应代码中用到。

    面向对象思考
  • 自学鸿蒙应用开发(6)- TextField组件

    如下面代码中20行和22行所示,在按钮组件的响应代码中获取TextField组件后,获取输入的文字信息并弹窗显示。

    面向对象思考
  • 自学鸿蒙应用开发(7)- Picker组件

    如下面代码中30行和36行所示,在获取PIcker组件后,设定表示信息并在动作响应代码将最新表示信息设定到TextField组件上。

    面向对象思考
  • 自学鸿蒙应用开发(8)- DatePicker组件

    如下面代码中21行和50行所示,在获取DatePicker组件后,一方面在button的动作响应中计算所选日期和当前日期的差值之后用小窗口表示出来;另一方面在用...

    面向对象思考

扫码关注云+社区

领取腾讯云代金券