C++数据类型的熟悉

******************************************

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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值