我定义了一些结构来保存Wave文件头
typedef struct
{
TCHAR szRiff[4];
DWORD dwRiffSize;
TCHAR szWave[4];
}RIFF;typedef struct
{
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
}WAVEFORM;typedef struct
{
TCHAR szFmt[4];
DWORD dwFmtSize;
WAVEFORM WaveForm;
}RFT;typedef struct
{
TCHAR szData[4];
DWORD dwDataSize;
}DATA;然后在写头数据的时候
用以下方法
RIFF riff={0};
riff.dwRiffSize =dwLen+sizeof(WAVEHDR)-8; //这里如果不这样安排顺序,则会把dwRiffSize的数据写到szRiff的后面,出问题
lstrcpy(riff.szRiff,_T("RIFF")); //这里有堆栈错误
lstrcpy(riff.szWave,_T("WAVE")); RFT rft={0};
lstrcpy(rft.szFmt,_T("fmt"));
rft.dwFmtSize =16;
rft.WaveForm.wFormatTag =WAVE_FORMAT_PCM;
rft.WaveForm.nChannels =1;
rft.WaveForm.nSamplesPerSec =11025;
rft.WaveForm.nAvgBytesPerSec =11025;
rft.WaveForm.nBlockAlign =1;
rft.WaveForm.wBitsPerSample =8; DATA data={0};
data.dwDataSize=dwLen;
lstrcpy(data.szData,_T("data"));
DWORD dwSize;
WriteFile(hFile,&riff,sizeof(RIFF),&dwSize,NULL);
WriteFile(hFile,&rft,sizeof(RFT),&dwSize,NULL);
WriteFile(hFile,&data,sizeof(DATA),&dwSize,NULL);
WriteFile(hFile,pBuf,dwLen,&dwSize,NULL);
然后我打开所保存的Wave文件,出错。
接着我用UltraEdit打开,比较了下和普通的Wave数据,发现都差不多,怎么会错误呢?
谁有相关的资料啊或者指点下
typedef struct
{
TCHAR szRiff[4];
DWORD dwRiffSize;
TCHAR szWave[4];
}RIFF;typedef struct
{
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
}WAVEFORM;typedef struct
{
TCHAR szFmt[4];
DWORD dwFmtSize;
WAVEFORM WaveForm;
}RFT;typedef struct
{
TCHAR szData[4];
DWORD dwDataSize;
}DATA;然后在写头数据的时候
用以下方法
RIFF riff={0};
riff.dwRiffSize =dwLen+sizeof(WAVEHDR)-8; //这里如果不这样安排顺序,则会把dwRiffSize的数据写到szRiff的后面,出问题
lstrcpy(riff.szRiff,_T("RIFF")); //这里有堆栈错误
lstrcpy(riff.szWave,_T("WAVE")); RFT rft={0};
lstrcpy(rft.szFmt,_T("fmt"));
rft.dwFmtSize =16;
rft.WaveForm.wFormatTag =WAVE_FORMAT_PCM;
rft.WaveForm.nChannels =1;
rft.WaveForm.nSamplesPerSec =11025;
rft.WaveForm.nAvgBytesPerSec =11025;
rft.WaveForm.nBlockAlign =1;
rft.WaveForm.wBitsPerSample =8; DATA data={0};
data.dwDataSize=dwLen;
lstrcpy(data.szData,_T("data"));
DWORD dwSize;
WriteFile(hFile,&riff,sizeof(RIFF),&dwSize,NULL);
WriteFile(hFile,&rft,sizeof(RFT),&dwSize,NULL);
WriteFile(hFile,&data,sizeof(DATA),&dwSize,NULL);
WriteFile(hFile,pBuf,dwLen,&dwSize,NULL);
然后我打开所保存的Wave文件,出错。
接着我用UltraEdit打开,比较了下和普通的Wave数据,发现都差不多,怎么会错误呢?
谁有相关的资料啊或者指点下
lstrcpy(riff.szWave,_T("WAVE"));
不能使用这个函数,它会在最后加一个'\0',把下面的一个字节给改写了.
你检查一下你的文件表示长度的字段是否被改成0
有什么办法解决那个堆栈吗?
2. 一个一个字符赋值