# 处理原始音频数据
# 简介
原始音频数据,又称音频裸数据,是指音视频传输过程中获取到的纯音频数据。常见的原始音频数据格式为 PCM(脉冲编码调制)。这些音频采样数据(PCM等)经过音频编码压缩成为音频码流,从而降低音频的数据量,便于存储和传输。
菊风提供修改原始音频数据的功能。当有自行处理音视数据的需求时,您可以对捕捉到的语音数据进行处理;也可以对接收到的语音数据进行处理。
# 前提条件
在修改原始音频数据前,确保已经初始化了 JCMediaDevice 模块。
# 集成步骤
- 创建 JCAudioFrameCallbackImpl 类,遵守 JCAudioFrameCallback (opens new window) 协议。重写 onAudioInputFrame, onAudioOutputFrame 函数。
- 重写 onAudioInputFrame (opens new window) 获取音频输入数据并处理。
- 重写 onAudioOutputFrame (opens new window) 获取音频输出数据并处理。
- 在开始通话前调用 registerAudioFrameCallback (opens new window) 。传入 JCAudioFrameCallbackImpl 实例对象。
- 发起通话或者加入频道。
- 在收到 onLeave (opens new window) 或 onStop (opens new window) 或 onCallItemRemove (opens new window) 后调用 registerAudioFrameCallback (opens new window) ,传入
nil
来释放语音观测器对象。
// 创建 JCAudioFrameCallbackImpl 遵守 JCAudioFrameCallback 协议。 // 实现 onAudioInputFrame,onAudioOutputFrame 协议方法。 @interface JCAudioFrameCallbackImpl: NSObject <JCAudioFrameCallback> @end /** * 获得采集的音频 * * @param inputId 输入源的自定义字符串 * @param sampleRateHz 输入源的采样频率 * @param channels 输入源的频道数量 * @param buf 该帧的采样数据 * @param playDelayMS 播放延时 * @param recDelayMS 采集延时 * @param clockDrift 时钟漂移 */ - (void)onAudioInputFrame:(NSString *_Nonnull)inputId sampleRateHz:(int)sampleRateHz channels:(int)channels buf:(unsigned char *_Nonnull)buf playDelayMS:(int)playDelayMS recDelayMS:(int)recDelayMS clockDrift:(int)clockDrift; /** * 获得播放的声音 * * @param outputId 输出源的自定义字符串 * @param sampleRateHz 输出源的采集频率 * @param channels 输出源的采样通道数 * @param buf 该帧的采样数据 */ - (void)onAudioOutputFrame:(NSString *_Nonnull)outputId sampleRateHz:(int)sampleRateHz channels:(int)channels buf:(unsigned char *_Nonnull)buf; // 创建 JCAudioFrameCallbackImpl 实例 JCAudioFrameCallbackImpl *callback = [[JCAudioFrameCallbackImpl alloc] init]; // 设置音频数据监听 [_mediaDevice registerAudioFrameCallback:callback]; // 取消音频数据监听 [_mediaDevice registerAudioFrameCallback:nil];
Copied!