嵌入式 WAV中包含G711文件头有关问题
来源:互联网 发布:重大网络教育学院 编辑:程序博客网 时间:2024/06/04 23:22
WAV中包含G711文件头问题
wav里面如果是pcm16的话文件会比较大,查阅文档说可以包含G711等格式,但是我实验了不行,小弟对这个了解仅限于度娘,不知道哪里出错,附上code,希望各位大侠指点
wav里面如果是pcm16的话文件会比较大,查阅文档说可以包含G711等格式,但是我实验了不行,小弟对这个了解仅限于度娘,不知道哪里出错,附上code,希望各位大侠指点
- C/C++ code
typedef struct waveformat_tag { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; } WAVEFORMAT, *PWAVEFORMAT, NEAR *NPWAVEFORMAT, FAR *LPWAVEFORMAT;#define WAVE_FORMAT_PCM 1typedef 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}
- 嵌入式 WAV中包含G711文件头有关问题
- 有关extern 头文件中包含变量
- 有关同时包含与头文件的问题
- C++中头文件包含问题
- C++中头文件包含问题
- C++中头文件互相包含问题
- C++中头文件包含问题
- 头文件包含问题
- 头文件包含问题
- 头文件包含问题
- 头文件互相包含问题
- 头文件重复包含问题
- 头文件包含冲突问题
- C++ 头文件包含问题
- 头文件包含顺序问题
- c++ 头文件包含问题
- 头文件相互包含问题
- 头文件互相包含问题
- linux的文本书写及命令
- 嵌入式 MII和RMII接口详介
- 嵌入式 实现逐行读取txt
- 嵌入式 A-LawPCM转换为wav格式
- 嵌入式 WAV格式常见的几种压缩形式(compression code)
- 嵌入式 WAV中包含G711文件头有关问题
- 嵌入式 ADPCM压缩算法
- 嵌入式 PCM WAVE格式详解及用C语言实现wave文件的读取
- 嵌入式 wave文件(*.wav)格式、PCM数据格式收藏
- 嵌入式 linux下svn命令行使用
- 嵌入式 音频相关词汇解释
- 嵌入式 整型ip与点式ip互相转换
- DirectorySearcher.Filter属性 扩充 申明
- 嵌入式 获取本地ip地址