4 ADPCM 编解码
ADPCM 编码将 PCM 转换为每采样占用 4-bit 的压缩格式;ADPCM 解码把这种压缩格式转换为 16-bit PCM。
4.1 使用方法
4.1.1 编码
定义回调函数
这个回调函数用来接收编码结果,其签名为:
typedef void (*adpcm_encode_output_cb_f)( uint8_t output, // 编码输出,包含两个 4-bit 数据 void *param); // 用户数据初始化编码器对象
void adpcm_enc_init( adpcm_enc_t *adpcm, // 编码器对象 adpcm_encode_output_cb_f callback, // 回调函数 void *param); // 传给回调函数的用户数据编码
void adpcm_encode( adpcm_enc_t *adpcm, // 编码器对象 const pcm_sample_t *input, // 音频数据 int input_size); // 音频采样数采样数
input_size可以是奇数。每产生两个 4-bit 编码输出(拼接为 1 个字节6), 就会调用一次callback。
4.1.2 解码
定义回调函数
这个回调函数用来接收解码结果,其签名为:
typedef void (*adpcm_decode_output_cb_f)( pcm_sample_t output, // 解码输出 void* param); // 用户数据初始化解码器
void adpcm_dec_init( adpcm_dec_t* adpcm, // 解码器对象 adpcm_decode_output_cb_f callback, // 回调函数 void* param); // 传给回调函数的用户数据解码
void adpcm_decode( adpcm_dec_t *adpcm, // 解码器对象 uint8_t data); // ADPCM 编码
设高 4-bit 对应第 \(n\) 个采样,则低 4-bit 对应第 \(n + 1\) 个采样。↩︎