本篇文档旨在指导您如何使用
AtomicXCore 框架中的 AudioEffectState 和 DeviceState 模块,为您的直播应用快速集成音效控制功能,包括麦克风音量、耳返监听,并添加多种趣味变声效果和混响效果。
核心功能
通过组合
AudioEffectState 和 DeviceState,您将能实现以下核心功能:人声音量调节:控制本地音频上行的采集音量大小,即观众听到的您的声音大小。
耳返功能:允许主播或连麦用户通过耳机实时听到自己的声音,用于监听和矫正发音。
变声效果:提供多种趣味变声选项,例如萝莉、大叔、熊孩子等。
混响效果:模拟不同环境的声场效果,例如 KTV、金属声、低沉、洪亮等。
实现步骤
步骤1:组件集成
步骤2:获取 State 实例
AudioEffectState 和 DeviceState是单例对象,您可以在项目的任何位置获取实例。import { useAudioEffectState } from '@/uni_modules/tuikit-atomic-x/state/AudioEffectState'import { useDeviceState } from "@/uni_modules/tuikit-atomic-x/state/DeviceState";// 通过 liveID 获取对应实例useAudioEffectState(liveID)useDeviceState(liveID)
步骤3:实现耳返功能
耳返功能允许用户实时监听自己的麦克风声音,可以通过调用本节介绍的接口管理耳返功能。
注意:
耳返功能通常需要连接耳机才能正常工作。
实现方式:
1. 开关耳返:您可以在
UI 上自行实现开关耳返功能。2. 设置耳返音量值:您可以自行实现左右拖动滑块来调节音量的功能,并将您
UI 上的值映射成音量值,调用setOutputVolume(volume:)。请注意,该接口接收的参数范围是 [0, 150],所以您需要将 UI 控件的值映射到 0 - 150 的范围。3. 监听状态更新 UI:您可以订阅实时的耳返状态值更新 UI。
代码示例:
import { watch } from 'vue'import { useAudioEffectState } from '@/uni_modules/tuikit-atomic-x/state/AudioEffectState'// 通过 liveID 获取对应实例const { setVoiceEarMonitorEnable, setVoiceEarMonitorVolume, setVoiceEarMonitorEnable, earMonitorVolume } = useAudioEffectState(liveID)// 1. 开启/关闭耳返const setVoiceEarMonitorEnable = () => {setVoiceEarMonitorEnable({enable: true // true 为开启, false 为关闭})}// 2. 调节耳返音量const setVoiceEarMonitorVolume = () => {setVoiceEarMonitorVolume({volume: 80})}// 3.监听耳返音量变化watch(earMonitorVolume, (newVolume) => {console.log('耳返音量:', newVolume);});
setVoiceEarMonitorEnable 接口参数
参数名 | 类型 | 描述 |
enable | Bool | 是否开启耳返。 true:开启 false:关闭 |
setVoiceEarMonitorVolume 接口参数
参数名 | 类型 | 描述 |
volume | number | 耳返音量大小。 取值范围: [0, 150] 默认值:100 |
步骤4:实现人声音量调节
当主播希望调节自己的上行采集音量大小时,调用
DeviceState的setCaptureVolume(volume: )方法传入音量值即可。实现方式:
1. 设置采集音量值:您可自行实现调节音量的功能,并将
UI 上的值映射成音量值后调用setCaptureVolume(volume: 80)。请注意,该接口接收的参数范围是 [0, 150],所以您需要将 UI 控件的值映射到 0 - 150 的范围。2. 监听状态更新 UI:您可以订阅实时的音量状态值更新 UI。
示例代码:
import { watch } from 'vue'import { useDeviceState } from "@/uni_modules/tuikit-atomic-x/state/DeviceState";// 通过 liveID 获取对应实例const { setCaptureVolume, captureVolume } = useDeviceState(liveID)// 1. 调节音量const setCaptureVolume = () => {setCaptureVolume({volume: 80})}// 2. 监听状态watch(captureVolume, (newVolume) => {console.log('采集音量:', newVolume);});
setCaptureVolume 接口参数
参数名 | 类型 | 描述 |
volume | number | 采集音量大小。 取值范围: [0, 150] 默认值:100 |
步骤5:实现变声效果
当主播希望改变自己的声音时,您可以调用
setAudioChangerType({type:})方法,传入相应的枚举值即可切换效果。示例代码:
import { useAudioEffectState } from '@/uni_modules/tuikit-atomic-x/state/AudioEffectState'// 通过 liveID 获取对应实例const { setAudioChangerType } = useAudioEffectState(liveID)// 示例:将变声效果设置为“小孩”const setAudioChangerType = () => {setAudioChangerType({type: 'CHILD'})}
setAudioChangerType 接口参数
参数名 | 类型 | 描述 |
type | string |
步骤6:实现混响效果
当主播希望给自己的声音添加混响效果时,您可以调用
setAudioReverbType({type:}) 方法,传入相应的枚举值即可切换效果。import { useAudioEffectState } from '@/uni_modules/tuikit-atomic-x/state/AudioEffectState'// 通过 liveID 获取对应实例const { setAudioReverbType } = useAudioEffectState(liveID)// 示例:设置为“KTV”混响效果const setAudioReverbType = () => {setAudioReverbType({type: 'KTV'})}
setAudioReverbType 接口参数
参数名 | 类型 | 描述 |
type | string |
API 文档
常见问题
音效和设备接口的调用时机有没有要求?
没有限制。
AudioEffectState和DeviceState 的设置是全局生效的,您可以在进入直播间之前或之后随时调用相关接口(例如设置变声、混响或耳返),设置会立即生效并被保留。“人声音量” 和“耳返音量” 有什么区别?
这是一个非常重要且易混淆的概念,区别如下:
人声音量 (CaptureVolume):通过
setCaptureVolume() 设置。它决定了观众能听到的您的声音大小。耳返音量 (EarMonitorVolume):通过
setVoiceEarMonitorVolume() 设置。它只决定了您自己在耳机里听到的监听声音大小,不会影响观众。新创建的直播间为什么直接就有音效、或者出现音量很大、很小等问题?
AudioEffectState和DeviceState是单例,这意味着音效和设备设置是全局生效的,出现这种情况很可能是因为您之前设置过音效但是没有重置,需要在合适的地方将数据重置。为什么我开启了“耳返”,但是听不到自己的声音?
请您按照以下步骤检查:
1. 是否插入耳机:耳返功能绝大多数情况下依赖耳机才能生效,请确保已连接有线或蓝牙耳机。
2. 音量是否为0:检查“耳返音量”是否被设置为 0。
3. 麦克风是否开启:确认
DeviceState 中的麦克风是开启状态(即已调用 openLocalMicrophone)。变声效果 和混响效果 可以同时生效吗?
可以。
AudioChangerType 和 AudioReverbType 是可以叠加生效的。例如,您可以同时设置 'LITTLEGIRL' 变声和 'KTV'混响。