1、OpenHarmony OpenSl ES音频播放简介

开发者可以通过本博文了解在OpenHarmony中如何使用OpenSL ES接口进行音频播放相关操作;当前仅实现了部分OpenSL ES接口,因此调用未实现接口后会返回SL_RESULT_FEATURE_UNSUPPORTED

2、 OpenHarmony OpenSl ES音频播放开发指导

以下步骤描述了在OpenHarmony如何使用OpenSL ES开发音频播放功能:

(1).添加头文件

#include <OpenSLES.h>
#include <OpenSLES_OpenHarmony.h>
#include <OpenSLES_Platform.h>

(2).使用 slCreateEngine 接口和获取 engine 实例

SLObjectItf engineObject = nullptr;
slCreateEngine(&engineObject, 0, nullptr, 0, nullptr, nullptr);
(*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE);

(3).获取接口 SL_IID_ENGINE 的 engineEngine 实例

SLEngineItf engineEngine = nullptr;
(*engineObject)->GetInterface(engineObject, SL_IID_ENGINE, &engineEngine);

(4).配置播放器信息,创建 AudioPlayer

SLDataLocator_BufferQueue slBufferQueue = {SL_DATALOCATOR_BUFFERQUEUE,0
};// 具体参数需要根据音频文件格式进行适配
SLDataFormat_PCM pcmFormat = {SL_DATAFORMAT_PCM,2,48000,16,0,0,0
};
SLDataSource slSource = {&slBufferQueue, &pcmFormat};SLObjectItf pcmPlayerObject = nullptr;
(*engineEngine)->CreateAudioPlayer(engineEngine, &pcmPlayerObject, &slSource, null, 0, nullptr, nullptr);
(*pcmPlayerObject)->Realize(pcmPlayerObject, SL_BOOLEAN_FALSE);

(5).获取接口 SL_IID_OH_BUFFERQUEUE 的 bufferQueueItf 实例

SLOHBufferQueueItf bufferQueueItf;
(*pcmPlayerObject)->GetInterface(pcmPlayerObject, SL_IID_OH_BUFFERQUEUE, &bufferQueueItf);

(6).打开音频文件,注册 BufferQueueCallback 回调

FILE *wavFile_ = nullptr;static void BufferQueueCallback (SLOHBufferQueueItf bufferQueueItf, void *pContext, SLuint32 size)
{FILE *wavFile = (FILE *)pContext;if (!feof(wavFile)) {SLuint8 *buffer = nullptr;SLuint32 pSize = 0;(*bufferQueueItf)->GetBuffer(bufferQueueItf, &buffer, pSize);//从文件读取数据fread(buffer, 1, size, wavFile);(*bufferQueueItf)->Enqueue(bufferQueueItf, buffer, size);}return;
}// wavFile_ 需要设置为用户想要播放的文件描述符
wavFile_ = fopen(path, "rb");
(*bufferQueueItf)->RegisterCallback(bufferQueueItf, BufferQueueCallback, wavFile_);

(7).获取接口 SL_PLAYSTATE_PLAYING 的 playItf 实例,开始播放

SLPlayItf playItf = nullptr;
(*pcmPlayerObject)->GetInterface(pcmPlayerObject, SL_IID_PLAY, &playItf);
(*playItf)->SetPlayState(playItf, SL_PLAYSTATE_PLAYING);

(8).结束音频播放

(*playItf)->SetPlayState(playItf, SL_PLAYSTATE_STOPPED);
(*pcmPlayerObject)->Destroy(pcmPlayerObject);
(*engineObject)->Destroy(engineObject);

OpenHarmony OpenSl ES音频播放开发相关推荐

  1. OpenHarmony OpenSl ES音频录制

    1.OpenHarmony OpenSl ES音频录制开发简介 开发者可以通过本博文了解在OpenHarmony中如何使用OpenSL ES进行录音相关操作:当前仅实现了部分OpenSL ES接口,因 ...

  2. 【Android音视频】OpenSL ES音频播放示例一

    本文将实现一个使用OpenSL ES来播放assets目录下mp3歌曲的demo(实际推荐大家使用oboe库). Android NDK之高性能音频https://developer.android. ...

  3. 播放器基础--OpenSL ES音频播放

    介绍 官网 OpenSL ES (Open Sound Library for Embedded Systems)是针对嵌入式系统的一套无授权费,跨平台, 硬件加速的音频API.它提供了一套标准化,高 ...

  4. 浅聊OpenSL ES音频开发

    浅聊OpenSL ES音频开发 导语 开发Android上的音频应用,一般是使用Android提供的AudioRecord采集音频,使用AudioTrack播放音频,使用MediaCodec来编解码, ...

  5. 音视频学习 AudioTrack、OpenSL ES 音频渲染

    前言 在讲解音频渲染之前,需要对音频的基础知识有所了解,所以该篇分为基础概念和AudioTrack 以及 OpenSL ES Demo 实例讲解,这样有助于更好的理解 Android 中音频渲染. 音 ...

  6. OpenSL ES音频库学习

    OpenSL ES音频库学习 简介 什么是OpenSL ES? openSL ES是一个专用于嵌入式系统的音频库,可以提供对音频的播放和录制等相关功能,在Android上Aduio Recoder都是 ...

  7. NDK--利用OpenSL ES实现播放FFmpeg解码后的音频流

    OpenSL ES全称为Open Sound Library for Embedded Systems.OpenSL ES是无授权费.跨平台.针对嵌入式系统 精心优化的硬件音频加速API.当然安卓也使 ...

  8. 鸿蒙音频低延迟,鸿蒙OS 音频播放开发指导

    场景介绍 音频播放的主要工作是将音频数据转码为可听见的音频模拟信号并通过输出设备进行播放,同时对播放任务进行管理. 接口说明 接口名 描述 AudioRenderer(AudioRendererInf ...

  9. Ffmpeg + OpenSL ES + Android 播放音频

    一 拿到音频的 路径 ,然后根据 jni 发送数据到C语言的方法 然后,开始解析 avcodec_register_all();avformat_network_init();pPlayer-> ...

最新文章

  1. 基于富盛SBO程序开发框架的自动序列生成器
  2. 如何让AI机器人的对话更加自然?
  3. hibernate的一种报错
  4. 边框回归的损失函数_分类损失函数,边框回归损失函数
  5. halcon模板匹配测试流程
  6. 前端学习(3236):react生命周期3
  7. 解决Eclipse 项目报错:Unbound classpath container: ‘JRE System Library [JavaSE-1.7]
  8. 170329、用 Maven 部署 war 包到远程 Tomcat 服务器
  9. linux 7 远程桌面xrdp,[转帖]CentOS7安装xrdp(windows远程桌面连接linux)
  10. ubuntu服务器网站备份,用 Ubuntu 建立 Time Machine 备份服务器
  11. (转)Hibernate关联映射——对象的三种关系
  12. 2021年电视盒子推荐指南 电视盒子选购以及常见问题
  13. SQL SERVER 2012 附加数据AdventureWorks2012失败解决方案
  14. 合肥大学c语言试题及答案,合肥工业大学C语言题库程序填空题库2.doc
  15. 程序员与软件工程师的区别
  16. CentOS 7 安装 TinyProxy 代理服务器
  17. 英国电信进军中国市场,难对三大运营商造成太大影响
  18. 【已解决】无法连接Ubuntu下的TeamViewer或Ubuntu下TeamViewer连接未就绪等问题
  19. java学习笔记:零基础java学习路线+配套资料+书籍推荐
  20. 单场淘汰制场次计算方法_淘汰赛_羽毛球新闻

热门文章

  1. 【瑞模网】3dmax渲染完就卡住不动,渲染崩溃是怎么回事?
  2. 红米note10和红米note8pro哪个好
  3. iOS 自定义图片无限轮播控件
  4. 柳比歇夫时间管理法 | 让你的时间管理更有效率
  5. 好的博客(给自己翻译用)
  6. DTPA PEG 异硫氰酸荧光素,DTPA PEG FITC,FITC-PEG-DTPA
  7. vc2010串口通信(使用mscomm控件)
  8. 一加6点击五下出来Android10,一加6T现已推送Android 10.0公测版更新
  9. 错误解决:There is no screen to be resumed matching
  10. 什么是个人热点?安卓手机怎么开启个人热点?