各位大虾:如何才能生成一个正确的8000HZ,16位,单声道的WAVE文件?大大送分.
各位大虾:我用下面的程序想生成一个8000HZ,16位,单声道的空的WAVE文件(58个字节),为什么不成功?请指教,还有那些参数要设置.
void CPcm::Createfile()
{
PCMWAVEFORMAT pcmWaveFormat;
MMCKINFO riffCK;
MMCKINFO childCK;
UINT cSample[4];
long wFlag=MMIO_CREATE|MMIO_WRITE|MMIO_EXCLUSIVE|MMIO_ALLOCBUF;
HMMIO hmmio=mmioOpen("temp.wav",NULL,wFlag);
riffCK.fccType =mmioStringToFOURCC("WAVE",MMIO_TOUPPER);
riffCK.cksize =0;
MMRESULT C= mmioCreateChunk (hmmio,&riffCK,MMIO_CREATERIFF);
LONG lFmtSize=(LONG)sizeof(pcmWaveFormat);
childCK.ckid =mmioStringToFOURCC ("fmt ",NULL);
childCK.cksize =lFmtSize;
MMRESULT N= mmioCreateChunk (hmmio,&childCK,NULL);
pcmWaveFormat.wf.wFormatTag = 1;
pcmWaveFormat.wf.nChannels=1;
pcmWaveFormat.wf.nSamplesPerSec=8000;
pcmWaveFormat.wf.nAvgBytesPerSec=8000;
pcmWaveFormat.wf.nBlockAlign=2;
pcmWaveFormat.wBitsPerSample=16;
LONGS=mmioWrite(hmmio,(LPTSTR)&pcmWaveFormat,
(LONG)sizeof(pcmWaveFormat));
MMRESULT D= mmioAscend(hmmio,&childCK,NULL);
childCK.ckid =mmioStringToFOURCC ("fact",NULL);
childCK.cksize =4;
MMRESULT M= mmioCreateChunk (hmmio,&childCK,NULL);
LONG K= mmioWrite(hmmio,(LPTSTR)&cSample,4);
MMRESULT B= mmioAscend(hmmio,&childCK,NULL);
childCK.ckid =mmioStringToFOURCC ("data",NULL);
childCK.cksize =0;
MMRESULT L= mmioCreateChunk (hmmio,&childCK,NULL);
LONG P= mmioWrite(hmmio,NULL,0);
MMRESULT O= mmioAscend(hmmio,&childCK,0);
MMRESULT PS= mmioAscend(hmmio,&riffCK,0);
MMRESULT R= mmioFlush(hmmio,MMIO_EMPTYBUF);
mmioClose(hmmio,0);
}
用Createfile()生成的WAVE文件的格式为:
52 49 46 46 30 00 00 00 57 41 56 45 66 6D 74 20
10 00 00 00 01 00 01 00 40 1F 00 00 40 1F 00 00
02 00 10 00 66 61 63 74 04 00 00 00 CC CC CC CC
64 61 74 61 00 00 00 00
正常的8000HZ,16位 单声道 的WAVE文件的格式为:
52 49 46 46 32 00 00 00 57 41 56 45 66 6D 74 20
12 00 00 00 01 00 01 00 40 1F 00 00 80 3E 00 00
02 00 10 00 00 00 66 61 63 74 04 00 00 00 00 00
00 00 64 61 74 61 00 00 00 00
请问如何才能生成这种8000HZ,16位 单声道的空的WAVE文件