鸿蒙手机(真机)播放音乐-第一集

官网示例:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/media-audio-playback-0000000000031734

这个项目会实现一个非常非常简单和粗糙的音乐播放器(只能听个响),之后会发第二集或者第三集进行优化

1.新建工程

自己去看https://blog.csdn.net/qq_33259323/article/details/112405157

2.准备音乐文件

测试的音乐文件:https://download.csdn.net/download/qq_33259323/14906054

在resources/rawfile文件夹下新music文件夹,然后把上面的测试文件复制到里面去

3.编写PA调用FA

PA调用FA 如果看不明白的可以看https://blog.csdn.net/qq_33259323/article/details/112466112

网页

<div class="container"><div><text class="title">{{ $t('strings.hello') }}{{title}}</text></div><div><text class="title" onclick="load">开始播放</text><text class="title" onclick="start">播放音乐</text><text class="title" onclick="stop">暂停音乐</text></div>
</div>
export default {data: {title: ""},onInit() {this.title = "我是大喵";},load(){playAbility.play(ACTION_SOUND_LOAD);},start(){playAbility.play(ACTION_SOUND_START);},stop(){playAbility.play(ACTION_SOUND_STOP);}
}

PA伪代码,PA的代码非常简单,就是传入不同地Code。页面点击事件通过传入不同的Code来实现不同的功能

    // codeconst ACTION_SOUND_LOAD = 2001;const ACTION_SOUND_START = 2002;const ACTION_SOUND_STOP = 2003;export const playAbility={play: async function(code){var action = {};action.bundleName = 'com.example.phone';action.abilityName = 'com.example.phone.ability.PlayAbility';action.messageCode = code;action.data = {};action.abilityType = ABILITY_TYPE_EXTERNAL;action.syncOption = ACTION_SYNC;var result = await FeatureAbility.callAbility(action);var ret = JSON.parse(result);if (ret.code == 0) {console.info(JSON.stringify(ret.abilityResult));} else {console.error(JSON.stringify(ret.code));}}
}

FA伪代码

    @Overrideprotected void onStart(Intent intent) {super.onStart(intent);try {playSoundUtil = new PlaySoundUtil();} catch (IOException e) {e.printStackTrace();}}class PlayRemote extends RemoteObject implements IRemoteBroker {public PlayRemote() {super("PlayRemote");}@Overridepublic boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) throws RemoteException {case ACTION_SOUND_LOAD:{System.out.println("ACTION_SOUND_LOAD");playSoundUtil.loadSound("321.wav");break;}case ACTION_SOUND_STOP: {System.out.println("ACTION_SOUND_STOP");playSoundUtil.getAudioRenderer().pause();break;}case ACTION_SOUND_START: {System.out.println("ACTION_SOUND_START");playSoundUtil.getAudioRenderer().start();break;}default: {reply.writeString("service not defined");return false;}}return true;}@Overridepublic IRemoteObject asObject() {return this;}}

4.播放音乐工具类

PlaySoundUtil.java
package com.example.phone.utils;import ohos.media.audio.*;
import java.io.*;public class PlaySoundUtil{private AudioStreamInfo audioStreamInfo = null;private AudioRendererInfo audioRendererInfo = null;private AudioRenderer.PlayMode playMode = AudioRenderer.PlayMode.MODE_STREAM;private AudioRenderer audioRenderer = null;private AudioManager audioManager = null;private AudioInterrupt audioInterrupt = null;private InputStream soundInputStream = null;private String fileName = null;public PlaySoundUtil() throws IOException {System.out.println("音乐播放器初始化");audioStreamInfo = new AudioStreamInfo.Builder().sampleRate(44100) // 44.1kHz.audioStreamFlag(AudioStreamInfo.AudioStreamFlag.AUDIO_STREAM_FLAG_MAY_DUCK) // 混音.encodingFormat(AudioStreamInfo.EncodingFormat.ENCODING_PCM_16BIT) // 16-bit PCM.channelMask(AudioStreamInfo.ChannelMask.CHANNEL_OUT_STEREO) // 双声道输出.streamUsage(AudioStreamInfo.StreamUsage.STREAM_USAGE_MEDIA) // 媒体类音频.build();audioRendererInfo = new AudioRendererInfo.Builder().audioStreamInfo(audioStreamInfo).audioStreamOutputFlag(AudioRendererInfo.AudioStreamOutputFlag.AUDIO_STREAM_OUTPUT_FLAG_DIRECT_PCM) // pcm格式的输出流.bufferSizeInBytes(1024).isOffload(false) // false表示分段传输buffer并播放,true表示整个音频流一次性传输到HAL层播放.build();audioRenderer = new AudioRenderer(audioRendererInfo,playMode);}public void loadSound(String fileName){this.fileName = fileName;String filePath = String.format("assets/entry/resources/rawfile/music/%s", fileName);soundInputStream = this.getClass().getClassLoader().getResourceAsStream(filePath);int bufSize = audioRenderer.getBufferFrameSize();System.out.println("bufSize"+bufSize);byte[] buffer = new byte[1024] ;int len;try {audioRenderer.start();while((len=soundInputStream.read(buffer,0,buffer.length)) != -1){audioRenderer.write(buffer,0,buffer.length) ;}soundInputStream.close();} catch (Exception e) {e.printStackTrace();}}public AudioRenderer getAudioRenderer(){return this.audioRenderer;}
}

5.运行

点击开始播放是可以播放的但是暂停无法暂停是为什么呢,请看第二集

https://blog.csdn.net/qq_33259323/article/details/112945787

鸿蒙手机播放音乐-第一集相关推荐

  1. 鸿蒙手机(真机)播放音乐-第二集

    鸿蒙手机(真机)播放音乐-第二集 为什么音乐无法暂停呢? 看了鸿蒙文档就知道了:https://developer.harmonyos.com/cn/docs/documentation/doc-gu ...

  2. php手机播放音乐代码,在手机浏览器上播放音乐的代码

    今天心血来潮想给自己的一个网页做上背景音乐,并在手机浏览器上支持播放,翻了很多地方,尝试了无数个代码,终于让我找到一个解决办法,相信对很多php程序开发会有帮助的. 代码如下: 您的浏览器不支持音频播 ...

  3. 树莓派2model B 通过蓝牙实现A2DP协议连接手机播放音乐

    使用树莓派,开启他的A2DP功能,实现用手机蓝牙控制树莓派播放歌曲.主要操作过程参考http://wangye.org/blog/archives/921/以及英文博客http://www.instr ...

  4. 全网首发,大众奥迪领驭帕萨特DIY数码碟盒增加USB和蓝牙播放音乐功能使用原车接口无损改装

    文章目录 全网首发!大众奥迪DIY数码碟盒增加USB和蓝牙播放音乐功能 前言 1.设计指标 2.方案设计 2.1.外壳选择 2.2.蓝牙方案 2.3.MCU方案 3.原理图设计 4.PCB设计 5.程 ...

  5. 详解51单片机播放音乐、电子琴、快进

    这是在学习完51之后做的一个实验,现在再来看有些寄存器都不记得了.不过我还是想要把它记录下来--因为我热爱音乐. 1.效果 先来看看实验的仿真图吧: 从按键就可以看到,这个实验可以实现播放音乐,暂停音 ...

  6. 计算机休眠不播放音乐,电脑没有声音了播放音乐进度条还不会动是怎么回事求...

    电脑没有声音了播放音乐进度条还不会动是怎么回事求以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 电脑没有声音了播放音乐进 ...

  7. android 判断 音乐是否播放,Android如何判断当前手机是否正在播放音乐并获取有关正在播放的音乐的信息...

    我想实现以下情况,以确定音乐是否正在Android手机上播放,如果是,则通过特定手势进行播放, 或单击一个按钮分享我当前正在听的音乐. 第一步是确定当前是否正在播放音乐. 一开始,我认为这有点复杂. ...

  8. 迷你播放器--第一阶段(1)--检索媒体音乐并添加到List播放列表

    迷你播放器--第一阶段(1) 检索音乐并添加到List播放列表--媒体库的检索以及list列表使用 本文章为CSDN作者原创,转载请保留出处:http://blog.csdn.net/lrs0304/ ...

  9. Android如何判断当前手机是否正在播放音乐,并获取到正在播放的音乐的信息

    我想实现如下的场景,判断当前Android手机上是否正在播放音乐,如果是,通过某个特定的手势, 或者点击某个按键,将当前我正在听的音乐共享出去. 第一步,就是判断当前是否有音乐正在播放. 最开始我想得 ...

最新文章

  1. Jessica's Reading Problem
  2. Linux下php添加新扩展
  3. STM32F103ZET6 蜂鸣器、按键
  4. Stateless 3.0——.NET Core上的状态机库
  5. 慕课乐学python单元测试答案_中国大学慕课第三章单元测试答案_乐学软件工程免费答案...
  6. POJ3259-负权回路判定
  7. 在Word中如何实现后退?
  8. 年仅50岁、千亿身价!贝壳创始人兼董事长左晖因病去世
  9. xp系统windows 组件向导无iis安装选项解决办法
  10. HOW TO: Troubleshoot development errors in MOSS 2007
  11. 深度学习——最优化的学习笔记
  12. 详解:MySQL数据库的权限管理和运维实操
  13. HTML - 'MARQUEE'
  14. 富怡服装cad制图软件Super V8官方免费版 | 富怡服装cad制图软件下载 | 提供高清版富怡cad教程视频全集免费下载
  15. eclipse导入wsdl文件_eclipse解析wsdl文件 怎么获取wsdl信息
  16. 《JavaSE系列教程》
  17. 一些图像置乱算法matlab
  18. 【Spring+Mybatis】 Invalid bound statement (not found): com.xxxx.mapper.UserMapper.selectUser
  19. c++ 中关于引用(1)
  20. 《禅与摩托车维修艺术》书摘

热门文章

  1. SLAM算法中的数据关联问题
  2. Memcached概述
  3. linux 下安装fbprophet
  4. java 多线程学习
  5. Linux彻底删除mysql
  6. mariadb数据库文件的组成
  7. Python Web框架Django学习(二)
  8. 虚拟化桌面初始化配置处理
  9. Curvilinear structure detections
  10. 三层BP神经网络的python实现