将錄取的資料儲存為wav輸出,需要注意wav的資料組成格式,基本需要下面三個操作過程.
a>産生标準的wav頭部資訊資料;
b>獲得錄取的聲音資料;
a>資料後面連接配接b>資料,合并上面兩個資料,得到一個總資料.
c>像操作檔案讀寫一樣将上面兩個資料一次性寫入.wav檔案即可.
下面給出上面步驟實作函數:
int write_wav_head(WAVEFORMATEX *wf, char *in_buffer, int in_len, char **out_buffer, int *out_len)
{
char *buffer;
int *int_tmp,pos=0;
*out_len = WAVE_HEADER_SIZE + in_len;
buffer = (char*)malloc(*out_len);
if(buffer == NULL)
return -1;
memcpy(buffer,"RIFF",4);
pos = 4;
int_tmp = (int*)(buffer+pos);
*int_tmp = WAVE_HEADER_SIZE + in_len - 8;/**//*波形塊的大小(檔案大小減8)*/
pos += 4;
memcpy(buffer+pos,"WAVEfmt ",8);
pos += 8;
*int_tmp = 16;
/**//*格式資訊*/
memcpy(buffer+pos,wf,16);
pos += 16;
memcpy(buffer+pos,"data",4);
*int_tmp = in_len;
memcpy(buffer+pos,in_buffer,in_len);
*out_buffer = buffer;
//輸出wav檔案
//CFile f("rec.wav", CFile::modeCreate | CFile::modeWrite );
//f.Write(buffer,*int_tmp);
//f.Close();
return 0;
}
//**outbuffer為指向輸出的資料資訊位址