Salve,
nel seguente non capisco qual'è lo scopo di usare la memset() (codice rosso)
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");
}
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?
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