打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
iOS 音频前处理

音频前处理


1 功能简介

ZegoLiveRoom SDK 为开发者提供了音频前处理的功能。

音频前处理技术一般用于去除语音中的干扰。但 SDK 已经针对采集的音频数据进行了回声消除、噪声抑制等的处理,因此通常情况下,开发者无需再重复处理。

如果开发者想对 SDK 采集的原始数据进行自定义处理,实现特殊功能(例如变声等),可参考本文档。

2 步骤

音频前处理的使用流程如下:

  1. App 设置预处理参数
  2. App 定义并实现音频前处理函数
  3. App 设置音频前处理函数

2.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.2 实现音频前处理函数

音频前处理函数由开发者自定义,要求输入参数分别为 const AVE::AudioFrame& inFrameAVE::AudioFrame& outFrame。其中 inFrame 为采集的音频数据,outFrame 为处理后返回给 SDK 的数据。

示例代码片段如下:

ZegoAVKitManager.mvoid 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);}

请注意,上述示例代码,只是将采集的音频数据进行简单的复制。实际使用中,开发者需要按照各自的需求特点,对采集的音频数据做处理。

2.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];
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
x265探索与研究(七):encode()函数
音视频开发 - FFmpeg
C++ SDK 2.0
什么是汉明窗?加Hanmming窗的作用?
基于MATLAB的音频信号处理技术实现
​直播源码开发,功能在变化但平台标准未变
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服