allora con questo codice credo di rendere bene l'idea su quello che voglio fare.
codice:
#define WIN32_LEAN_AND_MEAN
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
const LPSTR strFileIn = TEXT("C:\\Users\\giangaetano\\Desktop\\testcase.wav");
const LPSTR strFileOut = TEXT("C:\\Users\\giangaetano\\Desktop\\marameo.wav");
int main()
{
DWORD dwBuffer = 100000;
DWORD dwChunk = 2304;
LPSTR header = new char[44];
PBYTE pWAVBuffer = new BYTE[dwBuffer];
PBYTE pWAVChunk = new BYTE[dwChunk];
FILE* pFileIn = NULL;
DWORD dwRead = 0;
// Slurp file: pWAVBuffer contains all the data
pFileIn = fopen( strFileIn, "rb" );
if (pFileIn == NULL)
{
printf("cannot open file!\n");
return -1;
}
dwRead = fread(header, 1, 44, pFileIn);
dwRead = fread(pWAVBuffer, sizeof(BYTE), dwBuffer, pFileIn);
fclose(pFileIn);
printf("%d\n", dwRead);
// Loop thru data:
DWORD dwLoopExit = (DWORD)ceil((double)dwBuffer/dwChunk);
DWORD dwChunkSeek = 0;
DWORD dwLoop = 0;
FILE* pFileOut;
pFileOut = fopen( strFileOut, "wb" );
fwrite(header, 1, 44, pFileOut);
while (dwLoop < dwLoopExit)
{
memcpy(pWAVChunk, pWAVBuffer + dwChunkSeek, dwChunk);
dwChunkSeek += dwChunk;
++dwLoop;
fwrite(pWAVChunk, sizeof(BYTE), dwChunk, pFileOut);
printf("%d\n", dwChunkSeek);
}
fclose(pFileOut);
delete[] header;
delete[] pWAVBuffer;
delete[] pWAVChunk;
system("pause");
return 0;
}
Il codice serve solo a scopo didattico. Leggo in memoria l'intero contenuto di un file e lo riscrivo a chunks di 2304 bytes in un'altro file...il File di origine pesa 100040 Bytes (ma i primi 44 bytes sono di header, non mi servono)
Calcolando che lo voglio salvare in un unico file man mano a pezzetti di 2304 bytes l'uno, dovrò fare ceil((double)100000/2304) = 44 cicli while, di qui 43 sono chunks pieni mentre l'ultimo e nullpadded in parte...come posso evitare il nulpadded e salvare solo i testanti 928 bytes??