音频模块适配

游戏开发 创建于:05-30 06:46

1 概述

介绍如何使用HarmonyOS NEXT自带的OHAudio音频模块开发音频播放和录音功能

2 依赖

在CMake脚本中链接动态库

添加头文件

3 音频播放

音频播放开发流程

一个简单的OHAudio播放流程如下:

  1. 创建Renderer(设置streamBuilder参数等)
  2. 设置RendererCallback
  3. 状态控制
  4. 资源释放

cke_10446.png

第一步:创建Renderer

第二步:设置RendererCallback

设置的回调方法通过OH_AudioStreamBuilder_SetRendererCallback接口绑定到StreamBuilder。

第三步:状态控制

第四步:释放Renderer等对象

音频播放状态控制

音频播放状态控制如下图:

cke_13868.png

开发过程中常见问题

低时延模式支持

开启低时延模式后,支持的音频采样率为48Khz或是96Khz.若播放音频的采样率不满足要求,可能出现杂音。

OH_AudioRenderer_OnWriteData回调函数中bufferLen如何调整

可通过OH_AudioStreamBuilder_SetFrameSizeInCallback()设置,其中frameSize和bufferLen换算规则如下:

OHAudio播放暂停延迟问题如何分析

播放暂停延迟问题一般为OH_AudioRenderer_OnWriteData回调函数中设置的bufferLen过大导致,一般可以在日志中见到如下内容:

这种情况的解决方法需要将bufferLen调小。或是优化OH_AudioRenderer_OnWriteData中逻辑。减少一次回调所需时间。正常情况一次回调时间需控制在3000us之内。

OHAudio播放打断及恢复

在通话、短信通知或是闹铃等高优先级音频响起时,OHAudio会被打断,随后等待这些音频结束后,恢复OHAudio音频播放。需要实现上述效果需要通过OH_AudioRenderer_OnInterruptEvent实现。实现方式如下:

使用播放过程中如何修改使用场景

场景:语言通话功能,切换听筒(AUDIOSTREAM_USAGE_VOICE_COMMUNICATION)和扬声器(AUDIOSTREAM_USAGE_VIDEO_COMMUNICATION)OH_AudioStreamBuilder_SetRendererInfo接口用于设置音频使用场景,但是在Renderer创建完成之后,已创建的Renderer的使用场景便不可以修改(目前无可调整接口),需要重新生成一个不同场景的Renderer替换之前的Renderer。

音频文件播放完毕之后能否自动改变Renderer状态为stop

不能,Renderer只能一个播放通道,并没有播放资源完成的概念。需要手动控制,如Renderer长时间不stop可能存在功耗问题。

4 音频录制

音频录制开发流程

音频录制开发流程和音频播放开发流程基本上一致:

  1. 创建Capturer(设置streamBuilder参数等)
  2. 设置CapturerCallback
  3. 状态控制
  4. 资源释放

cke_17634.png

第一步:创建Capturer

第二步:设置CapturerCallback

第三步:状态控制

第四步:资源释放

开发过程中常见问题

创建Capturer不成功

音频录制功能需要依赖手机的麦克风,如需使用麦克风需要提前申请权限ohos.permission.MICROPHONE。未申请麦克风权限的情况下OH_AudioStreamBuilder_GenerateCapturer接口不会报错和闪退,但是OH_AudioStreamBuilder_GenerateCapturer接口返回值不是AUDIOSTREAM_SUCCESS。需要通过该返回值来判断Capturer是否创建成功,避免Capturer创建不成功导致调用野指针(Capturer)的方法出现的不可预测问题。

连接耳机时,不想使用耳机麦克风进行收音如何调整

OH_AudioStreamBuilder_SetCapturerInfo接口设置为AUDIOSTREAM_SOURCE_TYPE_VOICE_COMMUNICATION时,使用的时耳机麦克风收音,其他配置均使用机器本身的麦克风收音。

5 参考文档


原文链接:华为开发者文章


更多问题可关注:

鸿蒙游戏官方网站:已有游戏移植-鸿蒙游戏-华为开发者联盟

公开课:华为开发者学堂

 

原文地址:https://my.oschina.net/u/9174168/blog/18450404

免责声明:本文来源于互联网,版权归合法拥有者所有,如有侵权请公众号联系管理员

* 本站提供的一些文章、资料是供学习研究之用,如用于商业用途,请购买正版。

游戏技术分享