# 处理原始音频数据

# 简介

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

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

# 前提条件

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

# 集成步骤

  1. 创建 JCAudioFrameCallbackImpl 类,遵守 JCAudioFrameCallback (opens new window) 协议。重写 onAudioInputFrame, onAudioOutputFrame 函数。
  2. 在开始通话前调用 registerAudioFrameCallback (opens new window) 。传入 JCAudioFrameCallbackImpl 实例对象。
  3. 发起通话或者加入频道。
  4. 在收到 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];
最后更新时间: 2023/2/9 15:27:30