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, // 编码器对象 adpcm_enc_t , // 回调函数 adpcm_encode_output_cb_f callbackvoid *param); // 传给回调函数的用户数据
编码
void adpcm_encode( *adpcm, // 编码器对象 adpcm_enc_t 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 outputvoid* param); // 用户数据
初始化解码器
void adpcm_dec_init( * adpcm, // 解码器对象 adpcm_dec_t, // 回调函数 adpcm_decode_output_cb_f callbackvoid* param); // 传给回调函数的用户数据
解码
void adpcm_decode( *adpcm, // 解码器对象 adpcm_dec_t uint8_t data); // ADPCM 编码
设高 4-bit 对应第 \(n\) 个采样,则低 4-bit 对应第 \(n + 1\) 个采样。↩︎