环境:stm32f401标准库
功能:使用speex实现语音原始数据压缩
问题描述:参考了stm32f103RB的speex代码(没有跑起来)移植过去的代码,语音数据从DMA获取。
步骤:1、speex初始化,
void Speex_Init(void)
{
int HIGHPASS=0;
/* Speex encoding initializations */
speex_bits_init(&bits);
enc_state = speex_encoder_init(&speex_nb_mode);
speex_encoder_ctl(enc_state, SPEEX_SET_VBR, &vbr);
speex_encoder_ctl(enc_state, SPEEX_SET_QUALITY,&quality);//4
speex_encoder_ctl(enc_state, SPEEX_SET_COMPLEXITY, &complexity);//1
speex_encoder_ctl(enc_state, SPEEX_SET_HIGHPASS, &HIGHPASS); //关闭高通滤波
/* speex decoding intilalization */
dec_state = speex_decoder_init(&speex_nb_mode);
speex_decoder_ctl(dec_state, SPEEX_SET_ENH, &enh);
}
1、获取到语音数据后进行编码,
speex_bits_reset(&bits);
speex_encode_int(enc_state,i2srecbuf1, &bits);//i2srecbuf1是采集到的原始语音数据
nbBytes = speex_bits_write(&bits, out_bytes ,ENCODED_FRAME_SIZE);
3、再对编码后的数据进行解码再进行播放
speex_bits_read_from( &bits, bytes, nbBytes );
speex_decode_int( dec_state, &bits, (spx_int16_t*)i2sDMAPlayBuff1 );//i2sDMAPlayBuff1播放的语音数据
错误:但是播放经过解码后的语音是不正确的语音 耳机里面是噪音。再没有编码与解码步骤直接播放 语音就是正确的。然后我单步调试去看这个数据发现编码之前的语音数据与解码后的语音数据不一样。所以才导致耳机里面全是噪音
请问一下这个是我的speex初始化的问题吗 还是这个speex不能再这个mcu上运行?