首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

WAV中包含G711文件头有关问题

2012-05-16 
WAV中包含G711文件头问题wav里面如果是pcm16的话文件会比较大,查阅文档说可以包含G711等格式,但是我实验了

WAV中包含G711文件头问题
wav里面如果是pcm16的话文件会比较大,查阅文档说可以包含G711等格式,但是我实验了不行,小弟对这个了解仅限于度娘,不知道哪里出错,附上code,希望各位大侠指点

C/C++ code
typedef struct waveformat_tag {    WORD    wFormatTag;        /* format type */    WORD    nChannels;         /* number of channels (i.e. mono, stereo, etc.) */    DWORD   nSamplesPerSec;    /* sample rate */    DWORD   nAvgBytesPerSec;   /* for buffer estimation */    WORD    nBlockAlign;       /* block size of data */} WAVEFORMAT, *PWAVEFORMAT, NEAR *NPWAVEFORMAT, FAR *LPWAVEFORMAT;/* flags for wFormatTag field of WAVEFORMAT */#define WAVE_FORMAT_PCM     1/* specific waveform format structure for PCM data */typedef struct pcmwaveformat_tag {    WAVEFORMAT  wf;    WORD        wBitsPerSample;} PCMWAVEFORMAT, *PPCMWAVEFORMAT, NEAR *NPPCMWAVEFORMAT, FAR *LPPCMWAVEFORMAT;typedef struct {    CHAR    RIFF[4];                // 'R','I','F','F'    DWORD   Size;                   // size of wave file from here on    CHAR    WAVEfmt[8];             // 'W','A','V','E','f','m','t',' '    DWORD   FormatSize;             // size of PCMWAVEFORMAT info (16 for PCM)    PCMWAVEFORMAT pcm;              // PCM type data    CHAR    FACT[4];                // FACT for 58bit  ulaw/alaw    DWORD   FATSIZE;    CHAR    temp[4];                // FACT for 58bit  ulaw/alaw    CHAR    Data[4];                // 'd','a','t','a'    DWORD   DataSize;               // size of the 'data' chunk} REC_WAVE_FACT_HEADER, *PREC_WAVE_FACT_HEADER;//Codec IDif (nFmtFlg == 0X06 || nFmtFlg == 0x07)    {        REC_WAVE_FACT_HEADER pPPCM_WAVE_HEADER;         ZeroMemory(&pPPCM_WAVE_HEADER,sizeof(REC_WAVE_FACT_HEADER));        DWORD pos = 0;        try        {            pos = pcmFile.m_fFile.GetLength();        }        catch(...)        {            return;        }//end of try        pPPCM_WAVE_HEADER.RIFF[0]='R';        pPPCM_WAVE_HEADER.RIFF[1]='I';        pPPCM_WAVE_HEADER.RIFF[2]='F';        pPPCM_WAVE_HEADER.RIFF[3]='F';                //pPPCM_WAVE_HEADER.Size=nSize+40;        pPPCM_WAVE_HEADER.Size=  pos + 50;        pPPCM_WAVE_HEADER.WAVEfmt[0]='W';        pPPCM_WAVE_HEADER.WAVEfmt[1]='A';        pPPCM_WAVE_HEADER.WAVEfmt[2]='V';        pPPCM_WAVE_HEADER.WAVEfmt[3]='E';        pPPCM_WAVE_HEADER.WAVEfmt[4]='f';        pPPCM_WAVE_HEADER.WAVEfmt[5]='m';        pPPCM_WAVE_HEADER.WAVEfmt[6]='t';        pPPCM_WAVE_HEADER.WAVEfmt[7]=' ';                pPPCM_WAVE_HEADER.FormatSize=0x12;                        //pPPCM_WAVE_HEADER.pcm.wf.wFormatTag=WAVE_FORMAT_PCM;        pPPCM_WAVE_HEADER.pcm.wf.wFormatTag=nFmtFlg;        pPPCM_WAVE_HEADER.pcm.wf.nChannels=1;        pPPCM_WAVE_HEADER.pcm.wf.nSamplesPerSec=8000;        pPPCM_WAVE_HEADER.pcm.wf.nAvgBytesPerSec=nBit*1000;        pPPCM_WAVE_HEADER.pcm.wf.nBlockAlign=nBit/8;        pPPCM_WAVE_HEADER.pcm.wBitsPerSample=nBit;        pPPCM_WAVE_HEADER.FACT[0] = 'f';        pPPCM_WAVE_HEADER.FACT[1] = 'a';        pPPCM_WAVE_HEADER.FACT[2] = 'c';        pPPCM_WAVE_HEADER.FACT[3] = 't';        pPPCM_WAVE_HEADER.FATSIZE = 0x04000000;        pPPCM_WAVE_HEADER.temp[0] = 0x00;        pPPCM_WAVE_HEADER.temp[1] = 0x53;        pPPCM_WAVE_HEADER.temp[2] = 0x07;        pPPCM_WAVE_HEADER.temp[3] = 0x00;                pPPCM_WAVE_HEADER.Data[0]='d';        pPPCM_WAVE_HEADER.Data[1]='a';        pPPCM_WAVE_HEADER.Data[2]='t';        pPPCM_WAVE_HEADER.Data[3]='a';//        pPPCM_WAVE_HEADER.DataSize=pos-sizeof(REC_WAVE_FACT_HEADER);        pPPCM_WAVE_HEADER.DataSize=pos;                try        {            pcmFile.m_fFile.SeekToBegin();            pcmFile.m_fFile.Write(&pPPCM_WAVE_HEADER,sizeof(REC_WAVE_FACT_HEADER));            //         fseek(pcmFile,0,SEEK_SET);             //         fwrite(&pPPCM_WAVE_HEADER,  sizeof(REC_WAVE_HEADER), 1, pcmFile );        }        catch (...)        {            return;        }//end of try} 


------解决方案--------------------


仅帮结帖。

热点排行