UOS Hello 游戏语音音效处理指南
UOS Hello 游戏语音音效处理指南
前提条件
在应用 音效处理 的相关功能前,请确保已在你的项目中实现基本的实时音视频功能。详见 接入示例 。
设置音频编码属性
技术原理
SDK 默认使用 AUDIO_PROFILE_DEFAULT 编码属性和 AUDIO_SCENARIO_DEFAULT 应用场景。如果默认设置无法满足你的需求,调用如下 API 设置音频编码属性和应用场景。
| API | 描述 |
|---|---|
| Initialize(RtcEngineContext context) | 在创建 IRtcEngine 实例时,设置音频应用场景(AUDIO SCENARIO)。默认值为 AUDIO_SCENARIO_DEFAULT。 |
| SetAudioProfile(profile) | 在加入频道前后均可设置音频编码属性(AUDIO PROFILE)。 |
| SetAudioScenario(scenario) | 在加入频道前后均可设置应用场景(AUDIO SCENARIO)。 |
示例代码
本节介绍如何为游戏常见应用设置音频编码属性和应用场景。你可以将如下示例代码添加至你的项目中。
以 AUDIO_SCENARIO_CHATROOM 和 AUDIO_PROFILE_DEFAULT 配置为例。在初始化 IRtcEngine 实例时,设置音频应用场景,单独设置音频编码属性
// 在初始化 IRtcEngine 实例时,设置音频应用场景
RtcEngineContext context = new RtcEngineContext();
context.audioScenario = AUDIO_SCENARIO_TYPE.AUDIO_SCENARIO_CHATROOM;
var handler = new UserEventHandler(this);
RtcEngine = await HelloSDK.InitRtcEngine(context, handler);
// 设置音频编码属性
RtcEngine.SetAudioProfile(AUDIO_PROFILE_TYPE.AUDIO_PROFILE_DEFAULT);单独设置音频应用场景和设置音频编码属性
// 初始化 IRtcEngine 实例
RtcEngineContext context = new RtcEngineContext();
var handler = new UserEventHandler(this);
RtcEngine = await HelloSDK.InitRtcEngine(context, handler);
// 设置音频编码属性和音频应用场景
RtcEngine.SetAudioProfile(AUDIO_PROFILE_TYPE.AUDIO_PROFILE_DEFAULT);
RtcEngine.SetAudioScenario(AUDIO_SCENARIO_TYPE.AUDIO_SCENARIO_CHATROOM);游戏场景最佳实践
游戏场景的 Audio Profile 和 Audio Scenario 选择比较特殊,需要开发者你针对当前用户的设备场景选择不同的配置。以下是针对游戏场景音频编码属性的最佳实践,推荐您按照以下规则设置:
| 场景 | Audio Profile | Audio Scenario |
|---|---|---|
| 外放 | AUDIO_PROFILE_DEFAULT | AUDIO_SCENARIO_CHATROOM |
| 有线耳机 | AUDIO_PROFILE_DEFAULT | AUDIO_SCENARIO_GAME_STREAMING |
| 蓝牙耳机 | AUDIO_PROFILE_DEFAULT | AUDIO_SCENARIO_GAME_STREAMING |
通话音量和媒体音量
概念
游戏场景经常会出现开/关麦音量变化很大或很小的问题,这就是因为开/关麦导致媒体音量和通话音量切换,而出现的音量跳变问题,在解决该问题之前,我们需要先了解媒体音量和通话音量的概念。
手机音量有两种模式,媒体音量和通话音量,媒体音量音质较好在游戏场景通常用于播放BGM,通话音量音质较差在游戏场景通常用于用户实时语音。这两种音量类型的差异如下:
| 维度 | 通话音量 | 媒体音量 |
|---|---|---|
| 音质 | 较低 | 较高,对音频有较好的表现力 |
| 音量 | 无法被调整为 0 | 可以被调整为 0 |
| 扬声器外放场景下回声消除和降噪算法 | 使用设备的系统回声消除算法,可在外放+录制的场景中完全消除用户设备(包括其他App)产生的声音。 | 使用声网 RTC SDK 的回声消除算法,对音乐和歌声有较好的表现力,可以消除声网SDK播放的本地音乐或远端用户声音。但无法在外放+录制的场景中消除第三方音乐播放器或其他App产生的声音。 |
Android手机按下音量键便会出现媒体音量和通话音量分开调节的界面,如下图:
系统音量是指在设备上调整的音量,通过声网 RTC SDK 使用的音量类型来控制。例如,SDK 使用通话音量,则当你调整系统音量时,实际上是在调整通话音量。SDK 使用的音量类型受音频路由、用户角色和音频应用场景影响,具体如下:
Android
在 AUDIO_SCENARIO_DEFAULT 音频应用场景下:
| 用户角色 | 有线耳机 | 扬声器 | 听筒 | 蓝牙耳机 |
|---|---|---|---|---|
| 多主播 | 媒体音量 | 通话音量 | 通话音量 | 通话音量 |
| 单主播 | 媒体音量 | 媒体音量 | 通话音量 | 通话音量 |
| 观众 | 媒体音量 | 媒体音量 | 通话音量 | 媒体音量 |
在 AUDIO_SCENARIO_GAME_STREAMING 音频应用场景下:
| 用户角色 | 有线耳机 | 扬声器 | 听筒 | 蓝牙耳机 |
|---|---|---|---|---|
| 多主播 | 媒体音量 | 媒体音量 | 通话音量 | 通话音量 |
| 单主播 | 媒体音量 | 媒体音量 | 通话音量 | 通话音量 |
| 观众 | 媒体音量 | 媒体音量 | 通话音量 | 媒体音量 |
在 AUDIO_SCENARIO_CHATROOM 音频应用场景下:
| 用户角色 | 有线耳机 | 扬声器 | 听筒 | 蓝牙耳机 |
|---|---|---|---|---|
| 多主播 | 媒体音量 | 通话音量 | 通话音量 | 通话音量 |
| 单主播 | 媒体音量 | 媒体通话音量音量 | 通话音量 | 通话音量 |
| 观众 | 媒体音量 | 通话音量 | 通话音量 | 通话音量 |
注:游戏场景推荐使用 AUDIO_SCENARIO_DEFAULT、AUDIO_SCENARIO_GAME_STREAMING、AUDIO_SCENARIO_CHATROOM 这三种模式,不推荐使用其他模式
IOS
在 AUDIO_SCENARIO_DEFAULT 音频应用场景下:
| 用户角色 | 有线耳机 | 扬声器或听筒 | 蓝牙耳机 |
|---|---|---|---|
| 多主播 | 媒体音量 | 通话音量 | 通话音量 |
| 单主播 | 媒体音量 | 媒体音量 | 通话音量 |
| 观众 | 媒体音量 | 媒体音量 | 媒体音量 |
在 AUDIO_SCENARIO_GAME_STREAMING 音频应用场景下:
| 用户角色 | 有线耳机 | 扬声器或听筒 | 蓝牙耳机 |
|---|---|---|---|
| 多主播 | 媒体音量 | 通话音量 | 通话音量 |
| 单主播 | 媒体音量 | 通话音量 | 通话音量 |
| 观众 | 媒体音量 | 通话音量 | 通话音量 |
在 AUDIO_SCENARIO_CHATROOM 音频应用场景下:
| 用户角色 | 有线耳机 | 扬声器或听筒 | 蓝牙耳机 |
|---|---|---|---|
| 多主播 | 媒体音量 | 媒体音量 | 媒体音量 |
| 单主播 | 媒体音量 | 媒体音量 | 媒体音量 |
| 观众 | 媒体音量 | 媒体音量 | 媒体音量 |
注:游戏场景推荐使用 AUDIO_SCENARIO_DEFAULT、AUDIO_SCENARIO_GAME_STREAMING、AUDIO_SCENARIO_CHATROOM 这三种模式,不推荐使用其他模式
蓝牙耳机a2dp和HFP协议的选择
我们首先了解一下蓝牙耳机的两种协议:
| 协议 | 播放表现 | 采集表现 |
|---|---|---|
| A2DP协议 | 耳机声音支持双声道立体声,相较于单声道,声场更开阔、细节还原更丰富,音质更优 | 耳机不具备声音采集功能,若需进行语音输入,需依赖手机、电脑等设备自带的麦克风 |
| HFP协议 | 耳机声音仅为单声道,声道数量限制导致音质表现较差,细节和立体感不足 | 耳机支持声音采集,可直接通过耳机自带的麦克风完成语音输入(如通话、录音等场景) |
游戏平台在处理蓝牙耳机语音互动的时候,推荐采用以下两种方案供您选择:
| 方案 | 音效处理方法 | 优劣势分析 |
|---|---|---|
| 方案1:纯HFP模式 | - 用户开麦:角色变为主播,使用HFP模式 - 用户关麦:角色变为观众,使用HFP模式 | 优势:实现逻辑简单直接,仅需一套模式即可覆盖开麦、关麦所有场景,开发和维护成本低 劣势:受HFP协议单声道特性限制,音频音质表现较差,人声、背景音细节还原不足 |
| 方案2:纯A2DP模式 | - 用户开麦:角色变为主播,使用A2DP模式,通过手机自带麦克风采集声音 - 用户关麦:角色变为观众,使用A2DP模式 | 优势:全程采用A2DP协议,支持双声道立体声,人声清晰度、BGM音质效果均更优,音频体验更佳 劣势:开麦时依赖手机自带麦克风收音,受用户手机握姿、麦克风与嘴部距离变化影响大,易导致收音音量不稳定、杂音增多等问题 |
对于不同游戏,我们推荐方案如下:
- 目前 UOS Hello 的蓝牙协议默认是 HFP,如需要单独使用不同协议请 联系 UOS Hello 技术支持人员。
- 手游:通常我们推荐方案2:纯a2dp模式,因为手游游玩的时候离人的嘴巴距离较近,采用手机麦克风收音是完全没问题的
- 端游、页游:推荐您根据当前你的游戏类型选择模式,一般端游佩戴有线耳机为主
空间音频
使用场景
空间音频在3D游戏中应用越来越多,例如FPS和吃鸡游戏中加入空间音频,可以实现枪声、脚步声的听声辨位,让3D游戏更加沉浸感。
Hello目前提供的空间音频方案如下:
| 方案 | 方案描述 | 优劣势 | 适用场景 |
|---|---|---|---|
| 基础版空间音频-Hello凤鸣AI引擎 | 1. 纯端侧算法计算场景内音源坐标 2. 不依靠外部引擎,纯Hello自主算法API调用 3. 支持人声、BGM的空间音频效果 | 优势:简单易用,无需三方工具 劣势:不适用于超大型3D场景和音源非常多的场景 | 中小型3D空间,音源较少的场景,例如太空杀、元宇宙 |
基础版空间音频
使用声网sdk,即可实现 实时音频流 的基础空间音频
空间音频实现请参照: 声网文档