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:
mi ritorna sempre:beInitStream(&beConfig, &dwSamples, &dwMP3Buffer, &hbeStream);
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.
Tuttavia la beEncodeChuck() si aspetta che le passi 2304 Samples al massimo...ne consegue che la potrò chiamare 3 volte con questi valori: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++; }
La mia domanda è: se ho un buffer con size 5880 bytes, come faccio a leggerlo a pezzi?2304 bytes, 2304 bytes e 1272 bytes = 5880 bytes!
grazie



Rispondi quotando