音频前处理:回声消除、噪声抑制等(音视频SDK高级功能六)
音频前处理技术一般用于去除语音中的干扰。本篇文章介绍即构科技音视频SDK高级功能第六篇,ZegoLiveRoom SDK 为开发者提供了音频前处理的功能,还是以iOS环境为例。关于如何使用SDK,请参照《SDK集成指引》。SDK 已经针对采集的音频数据进行了回声消除、噪声抑制等的处理,因此通常情况下,开发者无需再重复处理。如果开发者想对 SDK 采集的原始数据进行自定义处理,实现特殊功能(例如变.
音频前处理技术一般用于去除语音中的干扰。本篇文章介绍即构科技音视频SDK高级功能第六篇,ZegoLiveRoom SDK 为开发者提供了音频前处理的功能,还是以iOS环境为例。
关于如何使用SDK,请参照《SDK集成指引》。SDK 已经针对采集的音频数据进行了回声消除、噪声抑制等的处理,因此通常情况下,开发者无需再重复处理。如果开发者想对 SDK 采集的原始数据进行自定义处理,实现特殊功能(例如变声等),可参考本文档。
音频前处理的使用流程如下:
-
App 设置预处理参数
-
App 定义并实现音频前处理函数
-
App 设置音频前处理函数
步骤
1、设置预处理参数
预处理参数为 AVE::ExtPrepSet 结构体类型,结构体中的变量的含义如下:
struct ExtPrepSet
{
bool bEncode; // 是否对前处理后的数据进行编码。如果为 true,则将前处理后的数据编码为 aac,此时 nSamples 变量有效,需要设置为编码一帧所需要的采样数;如果为 false,则不对前处理后数据进行编码,直接输出 PCM 数据,此时 nSamples 变量无效。
int nSampleRate; // 采样率,App 中音频前处理模块期望的输入数据采样率。如果为 0,则默认为 SDK 内部采样率
int nChannel; // 声道,App 中音频前处理模块期望的输入数据声道数。如果为 0,则默认为 SDK 内部声道数
int nSamples; // 采样数,bEncode = false 时,如果 nSamples = 0,则使用 SDK 内部采样数,SDK 将 10ms音频数据传递给外部前处理模块;如果 nSamples != 0(则 nSamples 的有效取值在 [160, 2048] 间),SDK 会传递设定采样数长度的音频数据给外部预处理模块,一些音频处理算法可能并不需要 10 ms 长度的音频数据。bEncode = true 时,AAC 编码一帧可设的采样数为(480/512/1024/1960/2048)
};
示例代码片段如下:
AVE::ExtPrepSet set;
set.bEncode = false; // 不需要编码前处理后的数据,输出 PCM 数据
set.nChannel = 0;
set.nSamples = 0;
set.nSampleRate = 0;
2、实现音频前处理函数
音频前处理函数由开发者自定义,要求输入参数分别为 const AVE::AudioFrame& inFrame 和 AVE::AudioFrame& outFrame。其中 inFrame 为采集的音频数据,outFrame 为处理后返回给 SDK 的数据。
示例代码片段如下:
ZegoAVKitManager.m
void prep2_func(const AVE::AudioFrame& inFrame, AVE::AudioFrame& outFrame)
{
outFrame.frameType = inFrame.frameType;
outFrame.samples = inFrame.samples;
outFrame.bytesPerSample = inFrame.bytesPerSample;
outFrame.channels = inFrame.channels;
outFrame.sampleRate = inFrame.sampleRate;
outFrame.timeStamp = inFrame.timeStamp;
outFrame.configLen = inFrame.configLen;
outFrame.bufLen = inFrame.bufLen;
memcpy(outFrame.buffer, inFrame.buffer, inFrame.bufLen);
}
请注意,上述示例代码,只是将采集的音频数据进行简单的复制。实际使用中,开发者需要按照各自的需求特点,对采集的音频数据做处理。
3、设置音频前处理函数
调用此 API 设置音频前处理函数,SDK 会在音频编码前调用。
ZegoLiveRoomApi-AudioIO.h
/**
设置音频前处理函数
@param prepSet 预处理的采样率等参数设置
@param callback 采样数据回调
@note 调用者调用此 API 设置音频前处理函数。SDK 会在音频编码前调用,inFrame 为采集的音频数据,outFrame 为处理后返回给 SDK 的数据
*/
+ (void)setAudioPrep2:(AVE::ExtPrepSet)prepSet dataCallback:(void(*)(const AVE::AudioFrame& inFrame, AVE::AudioFrame& outFrame))callback;
示例代码片段如下:
ZegoAVKitManager.m
[ZegoLiveRoomApi setAudioPrep2:set dataCallback:prep2_func];
更多推荐
所有评论(0)