天天看點

将錄取的資料儲存為wav輸出

将錄取的資料儲存為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為指向輸出的資料資訊位址