# 处理原始音频数据

# 简介

原始音频数据,又称音频裸数据,是指音视频传输过程中获取到的纯音频数据。常见的原始音频数据格式为 PCM(脉冲编码调制)。这些音频采样数据(PCM等)经过音频编码压缩成为音频码流,从而降低音频的数据量,便于存储和传输。

菊风提供修改原始音频数据的功能。当有自行处理音视数据的需求时,您可以对捕捉到的语音数据进行处理;也可以对接收到的语音数据进行处理。

# 前提条件

在修改原始音频数据前,确保已经初始化了 JCMediaDevice 模块。

# 集成步骤

  1. 创建 JCAudioFrameCallbackImpl 类,继承JCAudioFrameCallback (opens new window) 接口。重写 onAudioInputFrame, onAudioOutputFrame 函数。
  2. 在开始通话前调用 setAudioFrameCallback (opens new window) 。传入 JCAudioFrameCallbackImpl 实例对象。
  3. 发起通话或者加入频道。
  4. 在收到 onLeave (opens new window)onStop (opens new window)onCallItemRemove (opens new window) 后调用 setAudioFrameCallback (opens new window) ,传入 null 来释放语音观测器对象。
// 创建 JCAudioFrameCallbackImpl 类,继承JCAudioFrameCallback
// 实现 onAudioInputFrame, onAudioOutputFrame 接口
public interface JCAudioFrameCallback {

    /**
     * 获得采集的音频
     *
     * @param inputId      音频输入设备
     * @param sampleRateHz 输入源的采样频率
     * @param channels     输入源的频道数量
     * @param data         该帧的采样数据
     * @param playDelayMS  播放延时
     * @param recDelayMS   采集延时
     * @param clockDrift   时钟漂移
     */
    void onAudioInputFrame(String inputId, int sampleRateHz, int channels, ByteBuffer data, int playDelayMS, int recDelayMS, int clockDrift);

    /**
     * 获得播放的音频
     *
     * @param outputId     音频输出设备
     * @param sampleRateHz 输出源的采集频率
     * @param channels     输出源的采样通道数
     * @param data         该帧的采样数据
     */
    void onAudioOutputFrame(String outputId, int sampleRateHz, int channels, ByteBuffer data);
}

JCAudioFrameCallbackImpl mAudioFrameCallbackImpl;
// 设置音频数据监听
mediaDevice.setAudioFrameCallback(mAudioFrameCallbackImpl);
// 取消音频数据监听
mediaDevice.setAudioFrameCallback(null);
最后更新时间: 2023/2/9 15:27:30