******************************************
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;
typedef __int64 int64_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned __int64 uint64_t;
******************************************
short : C语言中,short是定义一种整型变量家族的一种。例如short i;表示定义一个短整型的变量i。
__int64:64位整型的定义方式有long long和__int64两种(VC还支持_int64)
// iLbc_test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <string.h>
#include <Windows.h>
#include <ilbc.h>
#define BLOCKL_MAX 240
#define ILBCNOOFWORDS_MAX 25
int _tmain(int argc, _TCHAR* argv[])
{
FILE *ifileid,*efileid,*ofileid, *cfileid; //定义四个文件
int16_t data[BLOCKL_MAX]; //signed short data[240]
int16_t encoded_data[ILBCNOOFWORDS_MAX], decoded_data[BLOCKL_MAX]; //signed short data[25], //signed short data[240]
int len;
short pli, mode;
int blockcount = 0;
int packetlosscount = 0;
int frameLen;
int16_t speechType;
iLBC_encinst_t *Enc_Inst;//编码结构体指针
iLBC_decinst_t *Dec_Inst;//解码结构体指针
//输入文件,PCM格式
char* cpInput ="audio_src.pcm";
if ( (ifileid=fopen(cpInput ,"rb")) == NULL)
{
printf("Cannot open input file %s\n", cpInput);
}
//编码输出
char* cpOutput ="audio_src_en.ilbc";
if ( (efileid=fopen(cpOutput,"wb")) == NULL)
{
printf("Cannot open encoded file file %s\n",cpOutput);
}
//解码输出
char* cpDeout ="audio_src-de.pcm";
if ( (ofileid=fopen(cpDeout,"wb")) == NULL)
{
printf("Cannot open decoded file %s\n",cpDeout);
}
// /* Create structs */
WebRtcIlbcfix_EncoderCreate(&Enc_Inst); //构造结构体
WebRtcIlbcfix_DecoderCreate(&Dec_Inst);
/* Initialization */
mode = 20; //(20ms或者30ms)
WebRtcIlbcfix_EncoderInit(Enc_Inst, mode); //初始化
WebRtcIlbcfix_DecoderInit(Dec_Inst, mode);
frameLen = mode*8;
/* loop over input blocks */ //循环编解码处理
//数据格式流向:File->signed short数组中,->signed short数组
// ifileid-> data encoded_data
while (((int16_t)fread(data,sizeof(int16_t),frameLen,ifileid))==frameLen) //fread(signed short*,int,int,File *);
{
blockcount++; //int
/* encoding */
fprintf(stderr, "--- Encoding block %i --- ",blockcount);
len=WebRtcIlbcfix_Encode(Enc_Inst, data, (int16_t)frameLen, encoded_data);
fprintf(stderr, "\r");
/* write byte file */
if (fwrite(encoded_data, sizeof(int16_t),
((len+1)/sizeof(int16_t)), efileid) !=
(size_t)(((len+1)/sizeof(int16_t)))) {
return -1;
}
/* get channel data if provided */
if (argc==6) {
if (fread(&pli, sizeof(int16_t), 1, cfileid)) {
if ((pli!=0)&&(pli!=1)) {
fprintf(stderr, "Error in channel file\n");
return 0;
}
if (pli==0) {
/* Packet loss -> remove info from frame */
memset(encoded_data, 0,sizeof(int16_t)*ILBCNOOFWORDS_MAX);
packetlosscount++;
}
} else {
fprintf(stderr, "Error. Channel file too short\n");
return 0;
}
} else {
pli=1;
}
/* decoding */
//数据格式流向:File->signed short数组中,->signed short数组->signed short数组
// ifileid-> data encoded_data ->decoded_data
fprintf(stderr, "--- Decoding block %i --- ",blockcount);
if (pli==1)
{
len=WebRtcIlbcfix_Decode(Dec_Inst, encoded_data,
(int16_t)len, decoded_data,&speechType);
} else {
len=WebRtcIlbcfix_DecodePlc(Dec_Inst, decoded_data, 1);
}
fprintf(stderr, "\r");
/* write output file */
if (fwrite(decoded_data, sizeof(int16_t), len,
ofileid) != (size_t)len) {
return -1;
}
}
/* close files */
fclose(ifileid);
fclose(efileid);
fclose(ofileid);
if (argc==6) {
fclose(cfileid);
}
/* Free structs */
WebRtcIlbcfix_EncoderFree(Enc_Inst);
WebRtcIlbcfix_DecoderFree(Dec_Inst);
printf("\nDone with simulation\n\n");
getchar();
return 0;
}