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

原创 2013年12月02日 14:56:30
WAV中包含G711文件头问题
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     1



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 ID
if (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音频文件头解析

1、wav概述 WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的...
  • u013286409
  • u013286409
  • 2015年08月11日 08:44
  • 6150

.wav文件头分析

这篇文章是网络上流行的比较广泛的针对WAVE头分析的文章, 整体写的简单明了非常好,但是 18H 2 int 采样率(每秒样本数),表示每个通道的播放速...
  • xieyanyi1
  • xieyanyi1
  • 2015年09月04日 11:11
  • 1405

alsa学习--2.wav格式分析

alsa学习--2.wav格式分析
  • wangcong02345
  • wangcong02345
  • 2016年09月01日 14:10
  • 329

Wav头文件格式讲解

虽然自己是搞视频图像的,不过偶尔看看音频方面的资料也是可以调节一下的。   下面就来分析一下wav波形文件的格式。   我们先随便找一个wav文件,查看其属性,就能得到下面的结果。 ...
  • cx1468059916
  • cx1468059916
  • 2014年05月22日 16:15
  • 2200

Qt 之 解析wav文件的头信息(详细分析、对比不同wav文件的数据)

简述在 Qt 之 WAV文件解析 中我们对wav文件的文件头中的数据进行了分析,在 Qt之实现录音播放及raw(pcm)转wav格式 中我们实现了录音/播放功能,并将.raw格式的音频文件转为wav格...
  • GoForwardToStep
  • GoForwardToStep
  • 2016年10月11日 21:29
  • 1661

Java 获取和判断文件头信息

import java.io.FileInputStream; import java.io.IOException; import java.util.HashMap; /** * 获取和判断文...
  • earbao
  • earbao
  • 2014年03月14日 12:14
  • 9958

C++和C读取WAV文件头的疑惑

很多时候我们要对音频进行处理,首先你要考虑的是读取音频信息。下面是百度百科得到wav文件头信息...
  • zxy2011qp
  • zxy2011qp
  • 2014年07月19日 12:43
  • 2219

WAV文件头信息

wave文件的格式:   00H 4 char "RIFF"标志  04H 4 long int 文件长度  08H 4 char "WAVE"标志  0CH 4 char "fmt"标志  10H ...
  • father223
  • father223
  • 2016年03月15日 13:19
  • 610

android录音程序之wav文件头

网上搜索到的录音代码里都有一段处理wav文件头的代码: /** * 这里提供一个头信息。插入这些信息就可以得到可以播放的文件。 * 为我为啥插入这44个字节,这个还真没深入研究,不过你随...
  • KimmKing
  • KimmKing
  • 2013年03月30日 22:04
  • 5757

wav 文件头解析

#include #include #include #include #include #include //wave文件头 typedef struct WaveHeader ...
  • CodeHeng
  • CodeHeng
  • 2016年05月18日 13:44
  • 206
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 WAV中包含G711文件头有关问题
举报原因:
原因补充:

(最多只允许输入30个字)