TA的每日心情 | 开心 2018-6-12 14:05 |
---|
签到天数: 76 天 连续签到: 1 天 [LV.6]常住居民II
|
speex是一个语言压缩的库,压缩率还是比较高,而且占用资源很少,很适gd32这样子的MCU。具体的可以参考官网。
ST官网上面有一个移植好的方案,我根据这个方案做些修改,将它移到GD32F450上,由于我外部晶振还没焊接,所以只能先用内部晶振,这样子压缩的速率就慢了好多。
大概的一个示例- #ifdef HAVE_CONFIG_H
- #include "config.h"
- #endif
- #include <speex/speex.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <speex/speex_callbacks.h>
- #ifdef FIXED_DEBUG
- extern long long spx_mips;
- #endif
- #define FRAME_SIZE 160
- #include <math.h>
- int main(int argc, char **argv)
- {
- void * enc;
- void * dec;
- SpeexBits bits;
- int nbBytes;
- spx_int16_t input[FRAME_SIZE];
- int quality = 0, complexity=1, vbr=0, enh=1;/* SPEEX PARAMETERS, MUST REMAINED UNCHANGED */
- unsigned char output[200];
- speex_bits_init(&bits);
- enc = speex_encoder_init(&speex_nb_mode);
- dec = speex_decoder_init(&speex_nb_mode);
- speex_encoder_ctl(enc, SPEEX_SET_VBR, &vbr);
- speex_encoder_ctl(enc, SPEEX_SET_QUALITY,&quality);
- speex_encoder_ctl(enc, SPEEX_SET_COMPLEXITY, &complexity);
- speex_encoder_ctl(enc,SPEEX_GET_BITRATE,&complexity);
- speex_encoder_ctl(enc,SPEEX_GET_SAMPLING_RATE,&complexity);
- while (1) {
- speex_bits_reset(&bits);
- speex_encode_int(enc, input, &bits);
- nbBytes = speex_bits_write(&bits, output, sizeof(output));
- //speex_bits_read_from(&bits, output, nbBytes);
- //speex_decode_int(dec,&bits,input);
- }
- speex_bits_destroy(&bits);
- speex_encoder_destroy(enc);
- return 0;
- }
复制代码 |
|