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