Salve,

volevo sapere se in C++ esistesse una specie di funzione per spezzettare una sequenza di bytes, mi spiego meglio. Sto studiando l'encoder LAME ed ho scoperto che per ragioni intenre accetta solo 2304 Samples (Stereo: 2x1152).

Infatti la funzione:

beInitStream(&beConfig, &dwSamples, &dwMP3Buffer, &hbeStream);
mi ritorna sempre:

dwSamples = 2304;

Ora, ho settato la waveform API per accturare 5880 Bytes in 30 buffers (176400 bytes, ovvero 1 secondo di audio PCM, 441Khz, 16bit, stereo) ... (44100 *2 *2)

Per motivi che non vi sto ora a spiegare non posso settare il buffer per catturare 2304 Bytes o multipli...mi verrebbe un'audio pieno di schioppi e rumore.

Arriviamo alla CALLBACK_EVENT dove il sistema mi notifica che il buffer di 5880 bytes è "filled" quindi posso usarlo per convertirlo in MP3 tramite la beEncodeChuck() della DLL di Lame-enc.

codice:
while(1)
{
	// CALLBACK EVENT
	WaitForSingleObject(hevent, INFINITE);

	if(buff[k].dwFlags & WHDR_DONE)
	{
		//buff[k].lpData is 5880 Bytes long...

		while(...)
		{
			//encode();
		}
		waveInAddBuffer(hwi, &buff[k], sizeof(WAVEHDR));
	}

	if(k == num_buffers -1)
		k=0;
	else
		k++;
}
Tuttavia la beEncodeChuck() si aspetta che le passi 2304 Samples al massimo...ne consegue che la potrò chiamare 3 volte con questi valori:

2304 bytes, 2304 bytes e 1272 bytes = 5880 bytes!
La mia domanda è: se ho un buffer con size 5880 bytes, come faccio a leggerlo a pezzi?

grazie