Shine是一款开源的定点MP3压缩软件,特别适合没有FPU的MT7688来进行PCM数据的压缩。编制了一段小程序来试验一下 Shine库的应用,发现压缩的速度还是非常快的!

说明:

1. 先用arecord录制一段RAW(PCM)语音,采样率为8k, S16_LE模式, 也可以是其他格式的,程序中sh_config.wave.samplerate做相应修改。

2. 注意sh_config.wave.samplerate 和 sh_config.mpeg.bitr 一定要匹配。

------------------------------------------------------- shine_test.c ---------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h> 
#include <string.h>
#include "layer3.h"

/*================================================================================
                              ---- ( MAIN ) ----
================================================================================*/
int main(int argc,char* argv[])
{
FILE *fin,*fout;
int16_t pcm_buff[2*SHINE_MAX_SAMPLES];
int16_t *ppbuff=pcm_buff;
unsigned char* data_out=NULL;
int count=0;
int chanl_samples_per_pass; // samples per channel to feed the encoder each time.
int samples_per_pass; //  =chanl_samples_per_pass*nchanl
shine_t sh_shine;
shine_config_t sh_config;
int nchanl=1; //MONO
int nread=0;
int nwrite=0;

char str_fin[]="/tmp/8k.raw";
char str_fout[]="/tmp/8k.mp3";

//--------初始化config.mpeg结构 ------
shine_set_config_mpeg_defaults(&(sh_config.mpeg)); //--init sh_config struct

//-------- 配置 config 结构 -------------
sh_config.wave.channels=PCM_MONO; //PCM_STEREO;//PCM_MONO;
sh_config.wave.samplerate=8000;//valid samplerates: 44100,48000,32000,22050,24000,16000,11025,12000,8000
sh_config.mpeg.copyright=1;
sh_config.mpeg.original=1;
sh_config.mpeg.mode=MONO;//STEREO;//MONO;
sh_config.mpeg.bitr=8; //64kbps for 16k //32kbps for 8k samplerate

//-------- 检查samplerate和bit rate是否匹配  -----------
if(shine_check_config(sh_config.wave.samplerate,sh_config.mpeg.bitr)<0)
printf("Unsupported samplerate/bitrate configuration.\n");

//---------  初始化shine  ---------------
sh_shine=shine_initialise(&sh_config);
if(sh_shine == NULL){
printf("Fail to init shine!\n");
exit(-1);
  }

//-------  每次需要喂给shine进行压缩的的采样数 ---------------
chanl_samples_per_pass=shine_samples_per_pass(sh_shine);//numbers of samples(per channel) to feed to the encoder for each encoding session
printf("---- shine one channle samples per pass %d\n",chanl_samples_per_pass);
printf("---- shine bitrate:%d kbps\n",sh_config.mpeg.bitr);
samples_per_pass=chanl_samples_per_pass*nchanl;
printf("samples_per_pass=%d\n",samples_per_pass);fin=fopen(str_fin,"rb");

//--------------- 打开文件读写 ------------
if(fin == NULL){
printf("fail to open input file!\n");
exit(-1);
 }
fout=fopen(str_fout,"wb");
if(fout == NULL){
printf("fail to open output file!\n");
exit(-1);
 }

printf("start encoding ...\n");
while(nread=fread(pcm_buff,sizeof(int16_t),samples_per_pass,fin))
{
if(nread < samples_per_pass){  //---小于喂给采样数时,剩余用0填充
printf("nread < samples_per_pass! nread = %d\n",nread);
memset(pcm_buff+nread,0,(samples_per_pass-nread)*sizeof(int16_t));
}
//------ unsigned char *shine_encode_buffer(shine_t s,int16_t **data, int *written);
//------ unsigned cahr *shine_encode_buffer_interleaved(shinet_t s, int16_t *data, int *written);
data_out=shine_encode_buffer(sh_shine,&ppbuff,&count);
nwrite=fwrite(data_out,sizeof(unsigned char),count,fout);// count=number of data_chunk been written, here is 1  (not bytes!)
}

//-------- 把shine中剩余的数据压缩后读出-----------
data_out=shine_flush(sh_shine,&count);
fwrite(data_out,sizeof(unsigned char),count,fout);// count=number of data_chunk been written, here is 1  (not bytes!)

//--- - close encoder  --
shine_close(sh_shine);
//----close file -----
close(fin);
close(fout);
return 1;

}

MT7688: Shine定点MP3压缩库试验相关推荐

  1. AIR32F103(八) 集成Helix MP3解码库播放MP3

    目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...

  2. Intel发布神经网络压缩库Distiller:快速利用前沿算法压缩PyTorch模型

    Intel发布神经网络压缩库Distiller:快速利用前沿算法压缩PyTorch模型 原文:https://blog.csdn.net/u011808673/article/details/8079 ...

  3. Hadoop SequnceFile.Writer 压缩模式及压缩库浅析

    2019独角兽企业重金招聘Python工程师标准>>> 先说明SequnceFile的压缩类型(Compression Type)分为三种NONE,RECORD,BLOCK,通过配置 ...

  4. C++ zip压缩库使用

    这个压缩库,主要是用来解压和压缩相关文件使用,好处就是引入比较方便,而且极其易使用,方便用户操作. 首先是引入这四个文件,相关代码如下: 首先是zip.h头文件 #ifndef _zip_H #def ...

  5. 神经网络压缩库Distiller学习

    课题需要来学习一下Intel开源的Distiller神经网络压缩库. Intel 主要根据以下特征和工具构建了 Distiller: 集成了剪枝.正则化和量化算法的框架 分析和评估压缩性能的一组工具 ...

  6. Snappy压缩库安装和使用之一

     近日需要在毕业设计中引入一个压缩库,要求压缩与解压缩速度快,但是压缩率可以不那么苛刻.查找资料发现Google的snappy库比较合适,而且该库开源,由C++写成.所以就拿来使用一下,下面权作记 ...

  7. MP3 推荐/ MP3压缩

    只选音质最好的 八款高端MP3/MP4推荐 2008-12-19 10:49:00 文/饮水机 出处:IT.com.cn(IT世界网) 很多朋友在购买MP3/MP4产品的时候,都会考虑所选产品的音质, ...

  8. Python 常用压缩库(zlib, bz2, gzip)以及压缩格式特点

    压缩库 Python 常用的三个用于数据压缩/解压缩的库是: zlib, bz2, gzip. gzip:gzip压缩算法 zlib:对gzip所用算法的一个改进,去除部分冗余的信息,来提高对缓冲区数 ...

  9. 最高可达100倍压缩!钒星北斗开放平台:渐进式图片压缩库,实现北斗三号RDSS短报文图片传输

    在北斗三号系统的服务区域扩展到全球,RDSS服务性能和容量相对北斗二号大幅提升的背景下,我们研究了基于北斗三号 RDSS链路的语音图像传输技术,可以弥补传统通信系统覆盖能力弱,以及当前阶段我国卫星通信 ...

  10. HTML 压缩库 HtmlCompressor

    HTML 压缩库 HtmlCompressor HtmlCompressor 是一个 Java 类库,用来对 HTML 内容进行压缩.HtmlCompressor 会删除 HTML 中无用的空格.空行 ...

最新文章

  1. 设计思维的要素:优化愿景(Vision)
  2. Android Studio 设置编辑器背景颜色
  3. 第三次学JAVA再学不好就吃翔(part55)--StringBuffer类的删除功能
  4. python公共变量_Python中的公共变量
  5. 鸟叔linux命令大全,[鸟哥linux视频教程整理]02_01_linux操作系统及常用命令
  6. TypeError: 'str' object is not callable (Python)
  7. 数据库基础:MySQL必备的三个工具
  8. editor修改样式 vue_vue修改富文本中的元素样式
  9. 使用JavaScript实现长方形、直角三角形、平行四边形、等腰三角形、倒三角、数字三角形...
  10. 软件测试实验二条件覆盖和条件组合覆盖
  11. 完美解决LION下HD3000的花屏,横线,死机问题
  12. Helix QAC软件下载安装使用试用
  13. SLA 、SLO SLI
  14. html5 按钮效果,7款外观迷人的HTML5/CSS3 3D按钮特效
  15. 隐身术——使用Tor匿名网络与proxychains构建SOCKS代理链IP跳板,在***测试与******时销声匿迹...
  16. ASA Failover
  17. 用python制作相册影集_影集制作APP哪个好?就用这些APP把照片做成相册!
  18. STM32外部引脚电路个人总结
  19. Unity-拓展篇-pr序列帧转透明视频
  20. 小米手机运行linux,在小米4手机安装Linux deploy,然后安装kali linux,但过程中出现如图所示問題...

热门文章

  1. 易知大学“大数据挖掘与分析(Python)”免费学习平台
  2. STM32l151 使用滴答计时器精准延时1us,1ms
  3. mysql中.myd文件_MySQL中找不到.myd文件的有关问题
  4. 【树莓派】树莓派安装中文输入法
  5. 平安科技java机试题_2017年华为优招机试题_平安果_编程题
  6. python--craps赌博游戏
  7. (2021总结篇)面向对象软件设计模式--(八)结构型模式---树形结构的处理--组合模式
  8. c语言编写生日祝福语大全,生日祝福语(精选50句)
  9. [CTF]盲文对照表
  10. [966]无需ROOT就能让你用上Xposed框架