📄 riff.c
字号:
/*
///////////////////////////////////////////////////////////////////////////////
// //
// Copyright (C) 2006-2008 Beijing, pengzhen (pengzhenxp@yahoo.com.cn) //
// //
///////////////////////////////////////////////////////////////////////////////
*/
#include "RIFF.h"
#define RIFF_SIZE( filelen ) ( (filelen) - 8 )
#define RIFF_FORMAT_CHUNK_SIZE ( sizeof( ST_RIFF_FORMAT_CHUNK ) -8 )
#define RIFF_DATA_CHUNK_OFF ( sizeof(ST_RIFF_HDR)+ \
sizeof(ST_RIFF_WAV_ID)+ \
sizeof(ST_RIFF_FORMAT_CHUNK) )
#define RIFF_DATA_CHUNK_SIZE(a, filelen ) { (a) = (filelen) - \
RIFF_DATA_CHUNK_OFF - \
sizeof(ST_RIFF_DATA_CHUNK) ; }
//#define RIFF_COPY_ID( a , b ) { memcpy( (a), (b), sizeof(b) ) ; }
#define RIFF_WRITE_FILE(a) { fwrite( &(a), 1, sizeof(a), fp ) ; \
m_iWaveFileHeadSize += sizeof(a) ; }
/* write wave file header */
void write_riff_head( FILE *fp , unsigned long dFileSize )
{
ST_RIFF_HDR lpRiff_Header ={ "RIFF" , 0 };
ST_RIFF_WAV_ID lpRIFF_WAVE_ID ={ "WAVE" };
ST_RIFF_FORMAT_CHUNK lpFormatChunk ={ "fmt " , 0 } ;
ST_RIFF_DATA_CHUNK lpDataChunk ={ "data" , 0 };
if( dFileSize == 0 )
{
m_iWaveFileSize = m_iWaveFileHeadSize =0; /* first write head */
}
if( ! fp ) return ;
// seek file
fseek(fp, 0, SEEK_SET );
// riff
//RIFF_COPY_ID( lpRiff_Header.m_id , RIFF_ID ) ;
lpRiff_Header.m_size = RIFF_SIZE( dFileSize ) ;
// write
RIFF_WRITE_FILE( lpRiff_Header ) ;
// wave
//RIFF_COPY_ID( lpRIFF_WAVE_ID.m_id , RIFF_WAVE_ID ) ;
//write
RIFF_WRITE_FILE( lpRIFF_WAVE_ID ) ;
// format chunk
//RIFF_COPY_ID( lpFormatChunk.m_id , RIFF_FORMAT_ID ) ;
lpFormatChunk.m_size = RIFF_FORMAT_CHUNK_SIZE ;
lpFormatChunk.m_wbitspersample= 16 ;
lpFormatChunk.m_wformattag = 1 ; // no compression PCM
//lpFormatChunk.m_wchannels = 2 ; // stero // mono
lpFormatChunk.m_wchannels = RIFF_CHANNELS ;
lpFormatChunk.m_dwsamplespersec =RIFF_SAMPLE_RATE ; // 44100
lpFormatChunk.m_dwavgbytespersec=lpFormatChunk.m_wchannels*
lpFormatChunk.m_dwsamplespersec*
lpFormatChunk.m_wbitspersample/8 ;
lpFormatChunk.m_wblockalign = lpFormatChunk.m_wchannels*
lpFormatChunk.m_wbitspersample/8 ;
// write
RIFF_WRITE_FILE( lpFormatChunk ) ;
// data chunk
//RIFF_COPY_ID( lpDataChunk.m_id , RIFF_DATA_ID ) ;
RIFF_DATA_CHUNK_SIZE( lpDataChunk.m_size, dFileSize ) ;
// write
RIFF_WRITE_FILE( lpDataChunk ) ;
if( dFileSize == 0 )
{
m_iWaveFileSize = m_iWaveFileHeadSize ; /* first write head */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -