畅直播
  • iOS
  • Android : Java
  • macOS
  • Windows
  • Web
  • Flutter
  • 产品简介
    • 概述
    • 发布日志
    • 基本概念
    • 产品优势
    • 应用场景
    • 限制说明
    • 升级指南
  • 计费说明
  • 下载
  • 快速开始
  • 直播推流
  • 直播拉流
  • 通信能力
  • 房间能力
  • 音频能力
  • 视频能力
  • 直播能力
  • 其他能力
  • 最佳实践
  • 客户端 API
  • 服务端 API
  • 常用错误码
  • 常见问题
  • 文档中心
  • 畅直播
  • 音频能力
  • 自定义音频处理

自定义音频处理

更新时间:2024-02-27 16:59

功能简介

自定义音频处理一般用于去除语音中的干扰,由于 SDK 已经对采集的音频原始数据进行了回声消除、噪声抑制等处理,通常情况下,开发者无需再重复处理。

如果开发者想在采集音频数据后或拉取远端音频数据渲染前,通过自定义处理实现特殊功能时(例如变声、美声等),可以参考本文档。

自定义音频处理的数据,是原始音频进行 3A(AEC 回声消除、AGC 自动增益控制、ANS 降噪)处理之后的音频数据:

  • 如果开发者需要对原始数据进行处理,请先调用 enableAECenableAGCenableANS 接口关闭音频 3A 处理。如果开启了变声、混响、立体声等音效处理(默认是关闭的),也需要先关闭后,才能获取到原始音频数据。
  • 如果开发者需要同时获取原始数据和 3A 处理之后的音频数据进行处理,请参考 自定义音频采集与渲染

前提条件

在自定义音频处理之前,请确保:

使用步骤

1 创建 SDK 引擎

调用 createEngine 接口创建 SDK 引擎实例,详情可参考 快速开始 - 实现流程 的 “创建引擎”。

ZegoEngineProfile profile = new ZegoEngineProfile();
profile.appID = appID;
profile.appSign = appSign;
profile.scenario = ZegoScenario.DEFAULT;
profile.application = getApplication();
ZegoExpressEngine.createEngine(profile, null);

2 设置音频自定义处理对象并实现回调方法

调用 setCustomAudioProcessHandler 接口设置音频自定义处理对象,并实现回调方法:自定义音频处理本地采集 PCM 音频帧回调 onProcessCapturedAudioData 和自定义音频处理远端拉流 PCM 音频帧回调 onProcessRemoteAudioData。在回调方法中直接处理获取的 data,即可实现对推拉流音频数据的处理。

ZegoExpressEngine.getEngine().setCustomAudioProcessHandler(new IZegoCustomAudioProcessHandler() {
    @Override
    public void onProcessCapturedAudioData(ByteBuffer data, int dataLength, ZegoAudioFrameParam param, double timestamp) {

    }

    @Override
    public void onProcessRemoteAudioData(ByteBuffer data, int dataLength, ZegoAudioFrameParam param, String streamID, double timestamp) {

    }
});

3 自定义音频处理

ZegoCustomAudioProcessConfig zegoCustomAudioProcessConfig = new ZegoCustomAudioProcessConfig();
zegoCustomAudioProcessConfig.channel = ZegoAudioChannel.MONO;
zegoCustomAudioProcessConfig.sampleRate = ZegoAudioSampleRate.ZEGO_AUDIO_SAMPLE_RATE_16K;
zegoCustomAudioProcessConfig.samples = 0;
ZegoExpressEngine.getEngine().enableCustomAudioCaptureProcessing(true, zegoCustomAudioProcessConfig);
ZegoExpressEngine.getEngine().enableCustomAudioRemoteProcessing(true, zegoCustomAudioProcessConfig);
本篇目录