speex 文档 3

本文介绍了一个使用 Speex 库进行声音文件编码和解码的示例程序。该程序通过 API 命令操作,在 Unix 系统上实现声音文件的编码和解码过程,并详细展示了其 C 语言源代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Speex manul中文版三

附源代码的翻译:

B Sample code

B 例程源代码

这个章节演示了一段用speex编码,解码对话(speech)的源代码.

可以如下用api命令来编码并解码一个文件:

译者注:这里说的api命令是指unix的用”|”进行管道写入读出.windows下这样并不能实现.

% sampleenc in_file.sw | sampledec out_file.sw

这里这两段代码都没有引用其它的头文件,并以16 比特率(bits)进行编码

natural endianness).

B.1 sampleenc.c

Sameleenc 用一个未加工的16比特率(bits)文章,给它编码并产生一个speex (steam)给标准输出.注意已压缩的和speexenc/speexdec不和谐!

#include <speex.h>

#include <stdio.h>

/*帧的大小在这个例程中是一个固定的值,但它并不是必须这样*/

 

#define FRAME_SIZE 160

int main(int argc, char **argv)

{

char *inFile;

FILE *fin;

short in[FRAME_SIZE];

float input[FRAME_SIZE];

char cbits[200];

int nbBytes;

/*保存编码的状态*/

void *state;

/*保存字节因此他们可以被speex常规读写*/

 

SpeexBits bits;

int i, tmp;

//新建一个新的编码状态在窄宽(narrowband)模式下

state = speex_encoder_init(&speex_nb_mode);

//设置质量为8(15kbps)

tmp=8;

speex_encoder_ctl(state, SPEEX_SET_QUALITY, &tmp);

inFile = argv[1];

fin = fopen(inFile, "r");

//初始化结构使他们保存数据

speex_bits_init(&bits);

while (1)

{

//读入一帧16bits的声音

fread(in, sizeof(short), FRAME_SIZE, fin);

if (feof(fin))

break;

//16bits的值转化为float,以便speex库可以在上面工作

for (i=0;i<FRAME_SIZE;i++)

input[i]=in[i];

//清空这个结构体里所有的字节,以便我们可以编码一个新的帧

speex_bits_reset(&bits);

//对帧进行编码

speex_encode(state, input, &bits);

//bits拷贝到一个利用写出的char型数组

nbBytes = speex_bits_write(&bits, cbits, 200);

//首先写出帧的大小,这是sampledec文件需要的一个值,但是你的应用程序中可能不一样

fwrite(&nbBytes, sizeof(int), 1, stdout);

//写出压缩后的数组

fwrite(cbits, 1, nbBytes, stdout);

}

//释放编码器状态量

speex_encoder_destroy(state);

//释放bit_packing结构

speex_bits_destroy(&bits);

fclose(fin);

return 0;

}

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值