Salve,
nel seguente non capisco qual'è lo scopo di usare la memset() (codice rosso)
inoltre nel codice verde vedo che viene usata la ZeroMemory per riempire di 0x00 bytes il buffer...è una buona pratica o si può anche evitare?codice:#include <windows.h> #pragma comment (lib, "winmm.lib") #include <mmsystem.h> #include <iostream> using namespace std; const int BUFFER_LEN = 32768; LPSTR file = "C:\\Users\\giangaetano\\Desktop\\mmio\\file.wav"; void main() { WAVEFORMATEX wf; wf.cbSize = 0; wf.wFormatTag = WAVE_FORMAT_PCM; wf.nChannels = 1; wf.wBitsPerSample = 16; wf.nSamplesPerSec = 8000; wf.nBlockAlign = wf.nChannels * (wf.wBitsPerSample / 8); wf.nAvgBytesPerSec = wf.nSamplesPerSec * wf.nBlockAlign; WAVEHDR buffer; ZeroMemory(&buffer, sizeof(buffer)); buffer.dwBufferLength = BUFFER_LEN; buffer.lpData = (LPSTR) malloc(BUFFER_LEN); ] // creating a file using mmio HMMIO hfile; hfile = mmioOpen(file, NULL, MMIO_CREATE | MMIO_READWRITE ); MMCKINFO mmckinfo; MMCKINFO mmckinfoSubchunk; MMCKINFO mmckinfoData; memset(&mmckinfo, 0, sizeof(mmckinfo)); memset(&mmckinfoSubchunk, 0, sizeof(mmckinfoSubchunk)); memset(&mmckinfoData, 0, sizeof(mmckinfoData)); //step 1 create riff chunk mmckinfo.fccType = mmioFOURCC('W','A','V','E'); mmioCreateChunk(hfile, &mmckinfo, MMIO_CREATERIFF); //step 2 create fmt chunk //creating fmt chunk also includes writing formatex to this chunk mmckinfoSubchunk.ckid = mmioFOURCC('f','m','t',' '); mmckinfoSubchunk.cksize = sizeof(WAVEFORMATEX); mmioCreateChunk(hfile, &mmckinfoSubchunk, 0); mmioWrite(hfile, (char*)&wf, sizeof(wf)); mmioAscend(hfile, &mmckinfoSubchunk, 0); //step 3 creating data chunk //creating this chunk includes writing actual voice data mmckinfoData.ckid=mmioFOURCC('d','a','t','a'); mmckinfoData.cksize = wf.nAvgBytesPerSec; mmioCreateChunk(hfile, &mmckinfoData, 0); mmioWrite(hfile, (char*)&buffer.lpData, BUFFER_LEN); mmioAscend(hfile, &mmckinfoData, 0); mmioAscend(hfile, &mmckinfo, 0); mmioClose( MMIO_READ, MMIO_FHOPEN); system("pause"); }
Cmq se non usa la memset con un buffer di 32768 bytes mi viene creato un file da 32KB mentre se uso la memset mi viene creato un file da 46KB...come mai?
grazie



Rispondi quotando