WAVE文件格式

 

typedef struct   

{   

   DWORD   dwRiff;     // Type of file header.    

   DWORD   dwSize;     // Size of file header.    

   DWORD   dwWave;     // Type of wave.    

} RIFF_FILEHEADER, *PRIFF_FILEHEADER;   

 

 

// -----------------------------------------------------------------------------    

//                              ChunkHeader    

// -----------------------------------------------------------------------------    

typedef struct   

{   

   DWORD   dwCKID;        // Type Identification for current chunk header.    

   DWORD   dwSize;        // Size of current chunk header.    

} RIFF_CHUNKHEADER, *PRIFF_CHUNKHEADER;   

 

/*  Chunk Types    

*/   

#define RIFF_FILE       mmioFOURCC('R','I','F','F')    

#define RIFF_WAVE       mmioFOURCC('W','A','V','E')    

#define RIFF_FORMAT     mmioFOURCC('f','m','t',' ')    

#define RIFF_CHANNEL    mmioFOURCC('d','a','t','a')    

 

 

 

towrite=CreateFile(param->filename,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,0,NULL);

if(towrite!=INVALID_HANDLE_VALUE)

{

RIFF_FILEHEADER FileHeader;   

RIFF_CHUNKHEADER WaveHeader;   

RIFF_CHUNKHEADER DataHeader;   

DWORD dwBytesWritten;   

 

WAVEFORMATEX pWFX;

pWFX.cbSize=0;

pWFX.wFormatTag=WAVE_FORMAT_PCM;

pWFX.nChannels=1;

pWFX.nSamplesPerSec=8000;

pWFX.wBitsPerSample=16;

pWFX.nAvgBytesPerSec = pWFX.nChannels * pWFX.nSamplesPerSec * pWFX.wBitsPerSample / 8;

pWFX.nBlockAlign =pWFX.wBitsPerSample * pWFX.nChannels / 8;

 

 

 

// Fill in the file, wave and data headers    

WaveHeader.dwCKID = RIFF_FORMAT;   

WaveHeader.dwSize = sizeof(WAVEFORMATEX) + pWFX.cbSize;   

  

// the DataHeader chunk contains the audio data    

DataHeader.dwCKID = RIFF_CHANNEL;   

DataHeader.dwSize = param->len;   

  

// The FileHeader    

FileHeader.dwRiff = RIFF_FILE;   

FileHeader.dwWave = RIFF_WAVE;   

FileHeader.dwSize = sizeof(FileHeader)+ sizeof(WaveHeader)+sizeof(DataHeader)+ DataHeader.dwSize-8;

SetFilePointer(towrite,0,0,FILE_BEGIN);

 

WriteFile(towrite,&FileHeader,sizeof(RIFF_FILEHEADER),&rt,NULL);

WriteFile(towrite,&WaveHeader,sizeof(RIFF_CHUNKHEADER),&rt,NULL);

WriteFile(towrite,&pWFX,WaveHeader.dwSize,&rt,NULL);

WriteFile(towrite,&DataHeader,sizeof(RIFF_CHUNKHEADER),&rt,NULL);

 

 

if( !WriteFile(towrite,param->data,param->len,&rt,NULL))

{

log_to_file("FlushData/tWriteFile Failed");

}

CloseHandle(towrite);

}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值