鸿蒙5.0&next开发【使用AudioSession管理应用音频焦点(C/C++)】音视频

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

使用AudioSession管理应用音频焦点(C/C++)

对于涉及多个音频流并发播放的场景,系统已预设了默认的[音频焦点策略],该策略将对所有音频流(包括播放和录制)实施统一的焦点管理。

应用可利用音频会话管理(AudioSessionManager)提供的接口,通过AudioSession主动管理应用内音频流的焦点,自定义本应用音频流的焦点策略,调整本应用音频流释放音频焦点的时机,从而贴合应用特定的使用需求。

本文档主要介绍AudioSession相关C API的使用方法和注意事项,更多音频焦点及音频会话的信息

使用入门

应用要使用OHAudio提供的音频会话管理(AudioSessionManager)能力,需要添加对应的头文件。

在 CMake 脚本中链接动态库

target_link_libraries(sample PUBLIC libohaudio.so)
cmake

添加头文件

应用通过引入[native_audio_session_manager.h]头文件,使用音频播放相关API。

#include <ohaudio/native_audio_session_manager.h>
cpp

获取音频会话管理器

创建[OH_AudioSessionManager]实例。在使用音频会话管理功能前,需要先通过[OH_AudioManager_GetAudioSessionManager]创建音频会话管理实例。

OH_AudioSessionManager *audioSessionManager;
OH_AudioManager_GetAudioSessionManager(&audioSessionManager);
cpp

激活音频会话

应用可以通过[OH_AudioSessionManager_ActivateAudioSession]接口激活当前应用的音频会话。

应用在[激活音频会话]时,需指定[音频会话策略(OH_AudioSession_Strategy)],其中包含[音频并发模式(OH_AudioSession_ConcurrencyMode)]参数,用于声明不同的音频并发策略。

OH_AudioSession_Strategy strategy = {CONCURRENCY_MIX_WITH_OTHERS};

OH_AudioSessionManager_ActivateAudioSession(audioSessionManager, &strategy);
cpp

查询音频会话是否已激活

应用可以通过[OH_AudioSessionManager_IsAudioSessionActivated]接口检查当前应用的音频会话是否已激活。

bool isActivated = OH_AudioSessionManager_IsAudioSessionActivated(audioSessionManager);
cpp

停用音频会话

应用可以通过[OH_AudioSessionManager_DeactivateAudioSession]接口停用当前应用的音频会话。

OH_AudioSessionManager_DeactivateAudioSession(audioSessionManager);
cpp

监听音频会话停用事件

在使用AudioSession功能的过程中,推荐应用监听[音频会话停用事件(OH_AudioSession_DeactivatedEvent)]。

当AudioSession被停用(非主动停用)时,应用会收到[音频会话停用事件(OH_AudioSession_DeactivatedEvent)],其中包含[音频会话停用原因(OH_AudioSession_DeactivatedReason)]。

在收到AudioSessionDeactivatedEvent时,应用可根据自身业务需求,做相应的处理,例如释放相应资源、重新激活AudioSession等。

定义回调函数

int32_t MyAudioSessionDeactivatedCallback(OH_AudioSession_DeactivatedEvent event)
{
  switch(event.reason) {
    case DEACTIVATED_LOWER_PRIORITY:
      // 应用焦点被抢占
      return 0;
    case DEACTIVATED_TIMEOUT:
      // 超时
      return 0;
  }
}
cpp

注册音频会话停用事件回调

应用可以通过[OH_AudioSessionManager_RegisterSessionDeactivatedCallback]接口监听音频会话停用事件。

OH_AudioSessionManager_RegisterSessionDeactivatedCallback(audioSessionManager, MyAudioSessionDeactivatedCallback);
cpp

取消注册音频会话停用事件回调

应用可以通过[OH_AudioSessionManager_UnregisterSessionDeactivatedCallback]接口取消监听音频会话停用事件。

OH_AudioSessionManager_UnregisterSessionDeactivatedCallback(audioSessionManager, MyAudioSessionDeactivatedCallback);
cpp

完整示例

参考以下示例,完成音频会话从创建到激活并监听的过程。

#include <cstdint>
#include "ohaudio/native_audio_session_manager.h"

int32_t MyAudioSessionDeactivatedCallback(OH_AudioSession_DeactivatedEvent event)
{
  switch(event.reason) {
    case DEACTIVATED_LOWER_PRIORITY:
      // 应用焦点被抢占
      return 0;
    case DEACTIVATED_TIMEOUT:
      // 超时
      return 0;
  }
}

OH_AudioSessionManager *audioSessionManager;

// 创建音频会话管理器
OH_AudioCommon_Result resultManager = OH_AudioManager_GetAudioSessionManager(&audioSessionManager);

OH_AudioSession_Strategy strategy = {CONCURRENCY_MIX_WITH_OTHERS};

// 设置音频并发模式并激活音频会话
OH_AudioCommon_Result resultActivate = OH_AudioSessionManager_ActivateAudioSession(audioSessionManager, &strategy);

// 查询音频会话是否已激活。
bool isActivated = OH_AudioSessionManager_IsAudioSessionActivated(audioSessionManager);

// 监听音频会话停用事件
OH_AudioCommon_Result resultRegister = OH_AudioSessionManager_RegisterSessionDeactivatedCallback(audioSessionManager, MyAudioSessionDeactivatedCallback);

// 音频会话激活后应用在此处正常执行音频播放、暂停、停止、释放等操作即可。 

// 取消监听音频会话停用事件
OH_AudioCommon_Result resultUnregister = OH_AudioSessionManager_UnregisterSessionDeactivatedCallback(audioSessionManager, MyAudioSessionDeactivatedCallback);

// 停用音频会话
OH_AudioCommon_Result resultDeactivate = OH_AudioSessionManager_DeactivateAudioSession(audioSessionManager);
鸿蒙NEXT开发音频播放类应用交互场景实践】媒体开发 对于音频播放类应用,除了歌曲播控的基础能力外,各种交互场景的设计也对用户体验有着重要的影响。本文以音乐播放器应用为例,从应用与用户、播放设备以及其他应用的交互三方面入手,分别对典型使用场景给出示例方案,为应用带来灵活多样、符合用户直觉的交互体验。 阅读详情

相关推荐

盘点军工行业软件研发的那些常用GJB标准

GJB5000、2786、438、141、102、8114等...

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 9099

鸿蒙5.0&next开发使用AudioSession管理应用音频焦点(ArkTS)】远端状态订阅开发

对于涉及多个音频流并发播放的场景,系统已预设了默认的[音频焦点策略],该策略将对所有音频流(包括播放和录制)实施统一的焦点管理

bbq的博客 611

利用Solidworks2020将挖掘机装配体转换为URDF模型

利用Solidworks2020将挖掘机装配体转换为URDF模型一、下载sw_urdf_exporter插件 URDF(Universal Robot Description Format)——通用机器人描述格式,它是ROS里边使用的一种机器人的描述文件,包含的内容有:连杆、关节,运动学和动力学参数、可视化模型、碰撞检测模型等。 一、下载sw_urdf_exporter插件 ROS提供了SolidWorks转URDF的插件(下载链接)—sw2urdfSetup.exe,下载后点击安装,安装完成后就能在sol

weixin_48192326的博客 6062

InfiniteTalk无限对话:稀疏帧音频驱动视频生成

-use_apg(APG加速);双重Cross-Attention是架构的精髓:音频交叉注意力保证"说得像"(口型、情绪、节奏与语音对齐),参考交叉注意力保证"长得像"(身份、手势、镜头与源视频一致),两者并行注入、互不干扰,共同实现"全身动态与音频有机同步+身份持续保持"。InfiniteTalk以"稀疏帧视频配音"重新定义了音频驱动视频生成:只保留关键帧锚定身份与镜头,把嘴部、表情、头部、身体全部交给模型随音频"即兴发挥",配合流式上下文帧注入、软参考机制与细粒度采样策略,实现了传统方案无法企及的。

巽视达的专栏 634

Ferrari AVIEXP EDI 对接指南:报文解析、发运通知与 ERP 集成

AVIEXP 是 Ferrari 使用的 ODETTE 发运通知报文,可理解为 ASN / Dispatch Advice。它的业务作用类似 Renault DESADV:供应商在发货时告诉客户“这次实际发了哪些物料、数量是多少、对应哪张交货单、使用了什么包装”。本文参考当前 Ferrari 项目使用的 AVIEXP OD3 / INTESA 规范,并结合完整测试报文与 JSON 解析结果,说明 AVIEXP 的关键字段、样例业务含义和对接注意事项。文中示例已脱敏;为避免文档过长,报文原文只保留关键骨架。

EDI电子数据交换 | 知行软件 162

视频转脚本实际怎么做?对比3个不同方案,拆解视频转脚本不同技术流程

视频转脚本不仅是语音识别,更是从音视频解析到内容结构化的系统工程。核心流程包括:视频解析、音频提取、ASR识别、时间轴对齐、文本分段与语义分析,最终由大模型完成章节划分、主题提炼与脚本生成。相比单纯转文字,真正脚本需具备时间轴、结构化段落与可编辑性。自研系统可基于FFmpeg+Whisper+LLM实现基础功能,但完整产品还需解决长视频切片、多说话人分离、任务队列与资源管理等工程挑战。本质是将非结构化视频转化为可复用的结构化

weixin_47068383的博客 256

用 Opik 记录多模态追踪:图像、视频、音频附件的完整指南

Opik 支持多模态数据追踪,可记录图像、视频、音频等附件,解决 LLM 应用中非文本输入输出的调试盲区。通过 Attachment 类,支持文件路径、原始字节及远程资源上传,大文件(≤100MB)自动作为附件处理,避免内联限制。推荐将生成报告、图表等大型内容以附件形式保存,保持 trace 轻量。代码示例涵盖本地文件、HTTP 响应与动态生成内容,实现高效、可复现的多模态应用追踪。

oscar999的专栏 468

(论文速读)CogVideoX:用 3D Causal VAE 与 Expert Transformer 生成长时、高动态视频

CogVideoX提出基于专家Transformer的文本到视频扩散模型,通过3D变分自编码器实现高效时空压缩,结合3D全注意力机制与专家自适应归一化,提升长视频(10秒、16FPS、768×1360)的时序一致性与语义对齐。引入多分辨率帧打包与高质量视频描述生成流程,显著增强生成质量。实验表明,其在自动指标与人工评测中均优于现有方法,验证了统一建模时空与跨模态融合的有效性。

LJ1147517021的博客 724

短剧如何发布到 YouTube:长视频、Shorts 与频道检查清单

短剧发布到YouTube,先决定长视频、单集和Shorts各自承担什么任务,再从同一审核母版准备画幅、字幕、音轨、标题、封面和播放列表。上传前核对频道权限、受众与公开设置、音乐和地区权利,并用最终文件做非公开检查;发布后分别观察点击、观看、续看和订阅,不用一条视频的播放量代替整套频道判断。YouTube合作伙伴计划(YPP)和具体功能规则会变化,应以发布时的官方页面为准。

lwwtl的博客 230

23×20mm搞定全链路音频|AU-48告别外围电路堆叠

做过音频产品的硬件都熟悉这种版图:主控旁边挂一片 ADC/DAC,再串一颗 LDO、几组滤波电容、几颗晶振,板子上密密麻麻一排元器件,外围电路的料比主芯片贵、调试时间比写程序长。 AU-48 把这条外围链路收进了一颗 23×20mm 的邮票孔模组。

2601_95835290的博客 257

翻译配音比原视频长,如何重新检查镜头与字幕

原视频里一句话说完正好切镜头,换成另一种语言后,配音还没结束,画面已经进入下一步。此时不要只把整条音频加速到原时长。先确认译文准确,再比较语句长度、停顿与镜头需要,决定调整配音、画面还是内容组织。剪映的字幕翻译、文本朗读和多轨剪辑可以分别辅助这些环节,但不能把它们当作一个必然自动对齐的流程。

m0_61452355的博客 62

使用 Python 将 PowerPoint 转换为视频(无需安装 Microsoft PowerPoint)

使用 Python 可以在不安装 Microsoft PowerPoint 的情况下,将 PowerPoint 演示文稿转换为 MP4 或 WMV 视频,并根据实际需要调整视频帧率、幻灯片播放时长以及需要导出的幻灯片范围。例如,培训类演示可能需要让每页幻灯片停留更长时间,而包含动画的演示文稿则可能需要使用更高的帧率,以获得更流畅的播放效果。对于包含复杂动画、切换效果或特殊字体的演示文稿,在进行批量转换之前,建议先检查少量文件的导出结果,确认最终视频的播放效果符合预期。后面的代码示例需要使用该目录。

SunnyDays1011的博客 332

C+轮融资落定,智象全新物理规律导向视频模型HiDream-O1-Video-1.0引关注

随着HiDream-O1-Video-1.0 正式发布,业内首个原生全模态世界模型闭环就此成型,图像、视频、3D 交互与具身动作在统一原生的模型中交汇、共生、循环。苹果 demo 中,HiDream-O1-Video-1.0 生成的人物抛出、接住、稳定手持,节奏自然发生。该模型采用智象自研原生全模态架构,支持文本、图片、视频等多种模态输入,可一键直出 5-20 秒 1080p 高保真视频,并在意图理解、物理规律理解、自主规划叙事、音画一体化生成等维度全面升级,达到全球领先水平。

weixin_43735236的博客 118

考研专业课知识点科普视频怎么做:用MG动画把抽象概念讲透

别想着第一个系列就做30条。建议从“5条迷你系列”练起:选一个你最有把握的考点,比如“5个必考经济学概念”或“10个高频词根”,每条控制在2—3分钟。用同一套模板,把流程完整跑通——从脚本到分镜到动画到合成。跑通之后,你自然知道哪一步最花时间,哪一步可以继续交给花生AI这类执行工具去完成。先把单条跑通,再谈批量复制,这才是最稳妥的成长路径。

2601_96238076的博客 227

【技术拆解】无限画布 AI 视频的分层渲染架构与实现逻辑

星宇智算无限画布是集 AI 剧本创作、多模态画布、3D 导演工作台与专业多轨视频剪辑于一体的全流程视听创作平台,底层搭载 Vera 1.1 模型。核心能力不是简单把画幅拉大,而是从模型层原生支持任意比例和尺寸的连续生成。交付形态有三种:SaaS 云端工作台开箱即用,星桥 API 供技术团队对接,私有化部署满足企业数据安全需求。

xingyuzhisuan的博客 160

音频处理实战|同一首歌传到不同平台音量为什么不一样?音频响度归一化的四个关键参数

同一个母版文件,你上传到A平台听着刚好,换到B平台就明显小了一截;有时候反过来,本地听着安静的版本,传上去反而被顶得发闷。回去检查源文件,峰值明明卡在-0.3dB,波形也满满当当,找不出毛病。很多人以为音量小是导出的问题,其实不是把这件事归因到导出环节是最常见的误判。绝大多数情况下,播放端拿到的文件和你导出的文件在电平上完全一致,改变发生在播放前的增益计算里。平台不会改写你的音频数据,它做的是在播

AI学习中 341

首尾帧、参考图、参考视频:想控制 AI 视频,到底该给它什么素材?

想要依据起点和终点生成视频,给首尾帧;想要锁住人物和商品,给干净的参考图;想要借动作和镜头的话,给参考视频。如果是三样都需要控制,那么就要划分清楚素材功能。AI生视频真正不好控制的地方,不是找不到素材,而是素材里面的视觉元素太过于杂乱,无法给视频模型正确的参考。好了,本文的分享就到这里,如果您觉得有收获的话,可以给个一键三连,您的鼓励是吾鳴持续输出的最大动力。

MCC_MCC_MCC的博客 211

HarmonyOS 7 音频与媒体控制实战 01:从零实现应用内录音功能

做一个语音笔记应用,最基础的功能就是录音。听起来很简单——按个按钮录,再按一下停,存成文件就行。真做的时候才发现,录音这件事细节特别多:权限怎么申请、采样率选多少、录到一半暂停了怎么处理、录音文件存哪、录到一半来电了怎么办。这篇是音频系列的第一篇,就从最基础的应用内录音开始讲。我们用 AudioCapturer 实现一个完整的录音功能,从权限申请到状态管理,把踩过的坑都记下来。

李游的博客 937

音频拼接和多轨混音有什么区别?为什么一种接着播,一种同时播?

音频拼接是将多段声音按顺序连接,多轨混音则让不同声音在同一时间播放。本文通过播客制作实例,解释两者的时长计算、适用场景,以及接缝突兀、音量不一致、声音遮挡和削波等常见问题的处理方法。

fengxinghua99的博客 175

SIGIR 2026|南京大学:Video-GAR:“通过生成 Query 来验证视频语义理解”的生成增强范式

Video-GAR 干的事:把传统 VCMR 中“视频-文本相似度匹配”的判别式范式,改造成“通过生成 Query 来验证视频语义理解”的生成增强范式。

Young_Harry的博客 143

音频排障|多段视频音量忽大忽小,怎么统一响度:先分类再校准

先把对白、音乐和环境声分开判断,选一段清晰对白作为听感基准,再处理底噪、平均响度和瞬时峰值,最后用耳机、手机外放和电脑扬声器复听。同样的音量数值,不代表同样的听感。为了让“视频声音大小不一致怎样批量统一”变成可复查的流程,可以为每段素材保留四列:素材编号、对白基准、异常类型、处理结果。如果目标是把音频整理回视频时间线并快速交付,剪映可以覆盖时间线编辑以及当前版本可用的降噪、响度统一等环节,适合先做可检查版本。记录端别、当前版本、素材格式、是否有背景音乐、是否多人同时说话,以及音量异常出现的时间点。

m0_61452355的博客 35
上一篇: 鸿蒙5.0&next开发【使用AudioSession管理应用音频焦点(ArkTS)】远端状态订阅开发
下一篇: 鸿蒙5.0&next开发【使用AudioRenderer开发音频播放功能】音视频
是秃子总会反光
博客等级 码龄2年 4129粉丝 939原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值