HarmonyOS 音频开发指导:使用 OpenSL ES 开发音频播放功能

这篇具有很好参考价值的文章主要介绍了HarmonyOS 音频开发指导:使用 OpenSL ES 开发音频播放功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenSL ES 全称为 Open Sound Library for Embedded Systems,是一个嵌入式、跨平台、免费的音频处理库。为嵌入式移动多媒体设备上的应用开发者提供标准化、高性能、低延迟的 API。HarmonyOS 的 Native API 基于Khronos Group开发的OpenSL ES 1.0.1 API 规范实现,开发者可以通过<OpenSLES.h>和<OpenSLES_OpenHarmony.h>在 HarmonyOS 上使用相关 API。

HarmonyOS 上的 OpenSL ES

OpenSL ES 中提供了以下的接口,HarmonyOS 当前仅实现了部分OpenSL ES接口,可以实现音频播放的基础功能。

调用未实现接口后会返回 SL_RESULT_FEATURE_UNSUPPORTED,当前没有相关扩展可以使用。

以下列表列举了 HarmonyOS 上已实现的 OpenSL ES 的接口,具体说明请参考OpenSL ES规范:

● HarmonyOS 上支持的 Engine 接口:

SLresult (*CreateAudioPlayer) (SLEngineItf self, SLObjectItf * pPlayer, SLDataSource *pAudioSrc, SLDataSink *pAudioSnk, SLuint32 numInterfaces, const SLInterfaceID * pInterfaceIds, const SLboolean * pInterfaceRequired)

○ SLresult (*CreateAudioRecorder) (SLEngineItf self, SLObjectItf * pRecorder, SLDataSource *pAudioSrc, SLDataSink *pAudioSnk, SLuint32 numInterfaces, const SLInterfaceID * pInterfaceIds, const SLboolean * pInterfaceRequired)

○ SLresult (*CreateOutputMix) (SLEngineItf self, SLObjectItf * pMix, SLuint32 numInterfaces, const SLInterfaceID * pInterfaceIds, const SLboolean * pInterfaceRequired)

● HarmonyOS 上支持的 Object 接口:SLresult (*Realize) (SLObjectItf self, SLboolean async)

○ SLresult (*GetState) (SLObjectItf self, SLuint32 * pState)

○ SLresult (*GetInterface) (SLObjectItf self, const SLInterfaceID iid, void * pInterface)

○ void (*Destroy) (SLObjectItf self)

● HarmonyOS 上支持的 Playback 接口:SLresult (*SetPlayState) (SLPlayItf self, SLuint32 state)

○ SLresult (*GetPlayState) (SLPlayItf self, SLuint32 *pState)

● HarmonyOS 上支持的 Volume 控制接口:SLresult (*SetVolumeLevel) (SLVolumeItf self, SLmillibel level)

○ SLresult (*GetVolumeLevel) (SLVolumeItf self, SLmillibel *pLevel)

○ SLresult (*GetMaxVolumeLevel) (SLVolumeItf self, SLmillibel *pMaxLevel)

HarmonyOS 上支持的 BufferQueue 接口:以下接口需引入<OpenSLES_OpenHarmony.h>使用。

sl_iid_oh_bufferqueue’未定义的引用,1024程序员节,HarmonyOS

sl_iid_oh_bufferqueue’未定义的引用,1024程序员节,HarmonyOS

sl_iid_oh_bufferqueue’未定义的引用,1024程序员节,HarmonyOS

完整示例

参考以下示例代码,播放一个音频文件。

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,                           // 通道数    SL_SAMPLINGRATE_48,          // 采样率    SL_PCMSAMPLEFORMAT_FIXED_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 回调。

static void BufferQueueCallback (SLOHBufferQueueItf bufferQueueItf, void *pContext, SLuint32 size){    SLuint8 *buffer = nullptr;    SLuint32 pSize;    (*bufferQueueItf)->GetBuffer(bufferQueueItf, &buffer, &pSize);    // 将待播放音频数据写入buffer    (*bufferQueueItf)->Enqueue(bufferQueueItf, buffer, size);}void *pContext; // 可传入自定义的上下文信息,会在Callback内收到(*bufferQueueItf)->RegisterCallback(bufferQueueItf, BufferQueueCallback, pContext);

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

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

8.  结束音频播放。文章来源地址https://www.toymoban.com/news/detail-774000.html

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

到了这里,关于HarmonyOS 音频开发指导:使用 OpenSL ES 开发音频播放功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HarmonyOS鸿蒙开发指南:基于ArkTS开发 音频渲染开发指导

    目录 场景介绍 音频中断 状态检查 异步操作 开发步骤

    2024年01月16日
    浏览(58)
  • HarmonyOS鸿蒙开发指南:基于ArkTS开发 音频录制开发指导

    目录 场景介绍 开发步骤 全流程场景 正常录制场景 音频录制的主要工作是捕获音频信号

    2024年01月19日
    浏览(69)
  • OpenHarmony/HarmonyOS播放音频

    大家好,今天我们来看OpenHarmony 使用AVPlayer可以实现端到端播放原始媒体资源,本开发指导将以完整地播放一首音乐作为示例,向开发者讲解AVPlayer音频播放相关功能。 创建AVPlayer, 设置播放资源, 设置播放参数(音量/倍速/焦点模式), 播放控制(播放/暂停/跳转/停止),

    2024年02月07日
    浏览(36)
  • HarmonyOS:NativeWindow 开发指导

    NativeWindow 是 HarmonyOS 本地平台化窗口 ,表示图形队列的生产者端。开发者可以通过 NativeWindow 接口进行申请和提交 Buffer,配置 Buffer 属性信息。 针对 NativeWindow,常见的开发场景如下: ● 通过 NativeWindow 提供的 Native API 接口申请图形 Buffer,并将生产图形内容写入图形 Buffe

    2024年02月04日
    浏览(38)
  • 鸿蒙HarmonyOS兼容JS的类Web开发-开发指导

    list开发指导 list是用来显示列表的组件,包含一系列相同宽度的列表项,适合连续、多行地呈现同类数据。具体用法请参考list API。 创建list组件 在pages/index目录下的hml文件中创建一个list组件。 说明 是的子组件,实现列表分组功能,不能再嵌套,可以嵌套。 是的子组件,展

    2024年02月02日
    浏览(48)
  • 音频采集开发指导

    目录 场景介绍 状态检查 开发步骤 AudioCapturer提供了用于获取原始音频文件的方法。开发者可以通过本指导了解应用如何通过AudioCapturer采集音频。 状态检查

    2024年01月23日
    浏览(28)
  • 开发指导—利用组件&插值器动画实现 HarmonyOS 动效

    在组件上创建和运行动画的快捷方式。具体用法请参考通用方法。 通过调用 animate 方法获得 animation 对象,animation 对象支持动画属性、动画方法和动画事件。 说明 ● 使用 animate 方法时必须传入 Keyframes 和 Options 参数。 ● 多次调用 animate 方法时,采用 replace 策略,即最后一

    2024年02月09日
    浏览(35)
  • 开发指导—利用CSS动画实现HarmonyOS动效(一)

    注:本文内容分享转载自 HarmonyOS Developer 官网文档 CSS 是描述 HML 页面结构的样式语言。所有组件均存在系统默认样式,也可在页面 CSS 样式文件中对组件、页面自定义不同的样式。请参考通用样式了解兼容 JS 的类 Web 开发范式支持的组件样式。 ● 逻辑像素 px(文档中以le

    2024年02月10日
    浏览(30)
  • HarmonyOS鸿蒙基于Java开发: Java UI 动画开发指导

    目录 帧动画 数值动画 属性动画 动画集合 多个动画同时开始 多个动画按顺序逐个执行 多个动画顺序执行和同时执行并存 动画是组件的基础特性之一,精心设计的动画使UI变化更直观,有助于改进应用程序的外观并改善用户体验。

    2024年02月21日
    浏览(47)
  • HarmonyOS:Neural Network Runtime 对接 AI 推理框架开发指导

    Neural Network Runtime 作为 AI 推理引擎和加速芯片的桥梁,为 AI 推理引擎提供精简的 Native 接口,满足推理引擎通过加速芯片执行端到端推理的需求。 本文以图 1 展示的 Add 单算子模型为例,介绍 Neural Network Runtime 的开发流程。Add 算子包含两个输入、一个参数和一个输出,其

    2024年02月03日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包