Speex 音频编解码 示例

2024-02-10 19:08
文章标签 音频 示例 编解码 speex

本文主要是介绍Speex 音频编解码 示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

地址:http://wmnmtm.blog.163.com/blog/static/38245714201110801617165/

Ubuntu下编译gcc -o speexdec speexdec.c -lspeex -logg

// demo.cpp : Defines the entry point for the console application.  
//  
#include "stdafx.h"  
#include <speex/speex.h>  
#include <stdio.h>   
#include <ostream>  #include <speex/speex_preprocess.h>  
#include <speex/speex_echo.h>   
#pragma comment(lib,"libspeexdsp.lib")   
#define FRAME_SIZE 160  
int main(int argc, char **argv)  
{  char *inFile;  FILE *fin,*fout1,*fout2,*fout3;  short in[FRAME_SIZE];  short out[FRAME_SIZE];    float input[FRAME_SIZE];  float output[FRAME_SIZE];     char cbits[200];  int nbBytes;  void *stateEncode;  void *stateDecode;  SpeexBits bitsEncode;  SpeexBits bitsDecode;     int i, tmp;  //新建一个新的编码状态在窄宽(narrowband)模式下  stateEncode = speex_encoder_init(&speex_nb_mode);  stateDecode = speex_decoder_init(&speex_nb_mode);  //设置质量为8(15kbps)  tmp=0;  speex_encoder_ctl(stateEncode, SPEEX_SET_VBR, &tmp);  float q=4;  speex_encoder_ctl(stateEncode, SPEEX_SET_VBR_QUALITY, &q);  speex_encoder_ctl(stateEncode, SPEEX_SET_QUALITY, &tmp);  inFile = argv[1];  fin = fopen("c:/demo.pcm", "rb");  fout1 = fopen("c:/demo_speex.raw", "wb");  fout2 = fopen("c:/demo1.pcm", "wb");  fout3 = fopen("c:/demo_slience.pcm", "wb");  //初始化结构使他们保存数据  speex_bits_init(&bitsEncode);  speex_bits_init(&bitsDecode);  int ret;  int j=0;  SpeexPreprocessState * m_st;  SpeexEchoState *echo_state;   m_st=speex_preprocess_state_init(160, 8000);  
//  echo_state = speex_echo_state_init(160, 8000);   int denoise = 1;  int noiseSuppress = -25;  speex_preprocess_ctl(m_st, SPEEX_PREPROCESS_SET_DENOISE, &denoise); //降噪  speex_preprocess_ctl(m_st, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &noiseSuppress); //设置噪声的dB  int agc = 1;  q=24000;  //actually default is 8000(0,32768),here make it louder for voice is not loudy enough by default. 8000  speex_preprocess_ctl(m_st, SPEEX_PREPROCESS_SET_AGC, &agc);//增益  speex_preprocess_ctl(m_st, SPEEX_PREPROCESS_SET_AGC_LEVEL,&q);  int vad = 1;  int vadProbStart = 80;  int vadProbContinue = 65;  speex_preprocess_ctl(m_st, SPEEX_PREPROCESS_SET_VAD, &vad); //静音检测  speex_preprocess_ctl(m_st, SPEEX_PREPROCESS_SET_PROB_START , &vadProbStart); //Set probability required for the VAD to go from silence to voice   speex_preprocess_ctl(m_st, SPEEX_PREPROCESS_SET_PROB_CONTINUE, &vadProbContinue); //Set probability required for the VAD to stay in the voice state (integer percent)   while (1)  {  memset(out,0,FRAME_SIZE*sizeof(short));  //读入一帧16bits的声音  j++;  int r=fread(in, sizeof(short), FRAME_SIZE, fin);  if (r<FRAME_SIZE)  break;  //把16bits的值转化为float,以便speex库可以在上面工作  spx_int16_t * ptr=(spx_int16_t *)in;  if (speex_preprocess_run(m_st, ptr))//预处理 打开了静音检测和降噪  {  printf("speech,");  fwrite(in, sizeof(short), FRAME_SIZE, fout3);  }  else  {  printf("slience,");  fwrite(out, sizeof(short), FRAME_SIZE, fout3);  }  for (i=0;i<FRAME_SIZE;i++)  input[i]=in[i];  //清空这个结构体里所有的字节,以便我们可以编码一个新的帧  speex_bits_reset(&bitsEncode);  //对帧进行编码  ret=speex_encode(stateEncode, input, &bitsEncode);  //把bits拷贝到一个利用写出的char型数组  nbBytes = speex_bits_write(&bitsEncode, cbits, 200);  fwrite(cbits, sizeof(char), nbBytes, fout1);  printf("d,",nbBytes);  //清空这个结构体里所有的字节,以便我们可以编码一个新的帧  speex_bits_reset(&bitsDecode);  //将编码数据如读入bits  speex_bits_read_from(&bitsDecode, cbits, nbBytes);    //对帧进行解码  ret = speex_decode(stateDecode, &bitsDecode,output);  for (i=0;i<FRAME_SIZE;i++)  out[i]=output[i];  fwrite(out, sizeof(short), FRAME_SIZE, fout2);  }  //释放编码器状态量  speex_encoder_destroy(stateEncode);  //释放bit_packing结构  speex_bits_destroy(&bitsEncode);  speex_decoder_destroy(stateDecode);  //释放bit_packing结构  speex_bits_destroy(&bitsDecode);  fclose(fin);  fclose(fout1);  fclose(fout2);  fclose(fout3);  return 0;  }  


这篇关于Speex 音频编解码 示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/697863

相关文章

zeroclipboard 粘贴板的应用示例, 兼容 Chrome、IE等多浏览器

zeroclipboard单个复制按钮和多个复制按钮的实现方法 最近网站改版想让复制代码功能在多个浏览器上都可以实现,最近看网上不少说我们的代码复制功能不好用的,我们最近将会增加代码高亮等功能,希望大家多多支持我们 zeroclipboard是一个跨浏览器的库类 它利用 Flash 进行复制,所以只要浏览器装有 Flash 就可以运行,而且比 IE 的

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

Spring Roo 实站( 一 )部署安装 第一个示例程序

转自:http://blog.csdn.net/jun55xiu/article/details/9380213 一:安装 注:可以参与官网spring-roo: static.springsource.org/spring-roo/reference/html/intro.html#intro-exploring-sampleROO_OPTS http://stati

Java http请求示例

使用HttpURLConnection public static String httpGet(String host) {HttpURLConnection connection = null;try {URL url = new URL(host);connection = (HttpURLConnection) url.openConnection();connection.setReq

2.3多任务编程示例1

1.CUBEMAX配置  2.CODE void StartTask1(void const * argument){/* USER CODE BEGIN StartTask1 */TickType_t pxPreviousWakeTime=xTaskGetTickCount();/* Infinite loop */for(;;){LED1_Turn();// vTaskDelay

mongodb基本命令和Java操作API示例

1.Mongo3.2 java API示例:http://www.cnblogs.com/zhangchaoyang/articles/5146508.html 2.MongoDB基本命:http://www.cnblogs.com/xusir/archive/2012/12/24/2830957.html 3.java MongoDB查询(一)简单查询: http://www.cnblogs

【CH395的简单示例代码】

提供一个基于CH395的简单示例代码,这里将展示如何初始化CH395,并发送一个简单的HTTP请求。请注意,实际使用时还需要根据具体的硬件平台和开发环境调整代码。 假设我们使用的是一个具有SPI接口的微控制器,并且已经将CH395连接到该控制器上。下面是一个使用C语言编写的伪代码示例,展示了如何初始化CH395并通过其发送HTTP请求: #include <stdio.h>#include

CPU亲和性设置 代码示例 sched_setaffinity sched_getaffinity

视频教程在这: cpu亲和性设置,NCCL,sched_setaffinity sched_getaffinity,CPU_ZERO、SET、ISSET、linux_哔哩哔哩_bilibili 一、CPU亲和性简介 CPU亲和性(CPU Affinity)设置是操作系统中一个重要的性能优化手段,它允许程序或进程被绑定到特定的CPU核心上运行。这样做的好处包括减少缓存未命中、降低线程迁移(co

Laravel安全应用模块示例教程

前言 Laravel 是一个流行的 PHP 框架,它提供了一套丰富的功能来帮助开发者构建安全、可维护的应用程序。下面,我将详细解释 Laravel 中关于认证、CSRF 保护、授权、哈希、加密、密码重置等安全模块的实现逻辑、应用场景以及相应的示例代码。 详情见官方中文文档 一. 认证(Authentication) Laravel的认证系统是一个强大且灵活的用户身份验证解决方案,它基于PHP

生日贺卡录放音芯片,多段音频录音ic生产厂商,NVF04M-32minute

可以录音播放的生日贺卡与传统的纸质贺卡相比,它有着创意以及个性的特点,仅需少量的电子元器件,即可实现录音功能,搭配上文字,让声音存储在生日贺卡里,让贺卡也变得有温度,祝福我想亲口对TA说。 生日贺卡录放音芯片方案——NVF04M 采用外挂SPI存储器的方式,达到录音的功能。它的主要特点是声音清晰,录音时间长。目前可以提供的录音时间为32分钟。NV04FM的一个显著特点是存储时间灵活,客