Salve,
mi domandavo se c'era un modo in C++ per impachettare il contenuto di una o più strutture in un unica stringa binaria, mi piacerebbe fare una cosa del genere dopo che ho popolato le seguenti strutture:
codice:
#include <windows.h>
#include <stdlib.h>
const unsigned int STANDARD_WAVEFORMAT_SIZE = 16;
struct WAVE_FORMAT
{
WORD wFormatTag;
WORD wChannels;
DWORD dwSamplesPerSec;
DWORD dwAvgBytesPerSec;
WORD wBlockAlign;
WORD wBitsPerSample;
};
struct RIFF_HEADER
{
TCHAR szRiffID[4]; // 'R','I','F','F'
DWORD dwRiffSize;
TCHAR szRiffFormat[4]; // 'W','A','V','E'
};
struct FMT_BLOCK
{
TCHAR szFmtID[4]; // 'f','m','t',' '
DWORD dwFmtSize;
WAVE_FORMAT wavFormat;
};
struct DATA_BLOCK
{
TCHAR szDataID[4]; // 'd','a','t','a'
DWORD dwDataSize;
};
void GetARiffChunk(RIFF_HEADER& rh);
void GetADataBlock(DATA_BLOCK& db);
void GetAWaveFormat(WAVE_FORMAT& wf);
void GetAFmtBlock(FMT_BLOCK& fb);
void main()
{
RIFF_HEADER rh;
FMT_BLOCK fb;
DATA_BLOCK db;
GetARiffChunk(rh);
GetAFmtBlock(fb);
GetADataBlock(db);
// impachetta le strutture appena popolate
system("pause");
}
void GetARiffChunk(RIFF_HEADER& rh)
{
rh.dwRiffSize = sizeof(rh);
rh.szRiffID[0] = 'R';
rh.szRiffID[1] = 'I';
rh.szRiffID[2] = 'F';
rh.szRiffID[3] = 'F';
// Lets add the wave tag id.
rh.szRiffFormat[0] = 'W';
rh.szRiffFormat[1] = 'A';
rh.szRiffFormat[2] = 'V';
rh.szRiffFormat[3] = 'E';
rh.dwRiffSize = sizeof(rh);
};
void GetADataBlock(DATA_BLOCK& db)
{
db.szDataID[0] = 'd';
db.szDataID[1] = 'a';
db.szDataID[2] = 't';
db.szDataID[3] = 'a';
db.dwDataSize = 4096;
}
void GetAWaveFormat(WAVE_FORMAT& wf)
{
wf.dwAvgBytesPerSec = 0;
wf.dwSamplesPerSec = 0;
wf.wBitsPerSample = 0;
wf.wBlockAlign = 0;
wf.wChannels = 0;
wf.wFormatTag = 1;
}
void GetAFmtBlock(FMT_BLOCK& fb)
{
WAVE_FORMAT wf;
GetAWaveFormat(wf);
fb.szFmtID[0] = 'f';
fb.szFmtID[1] = 'm';
fb.szFmtID[2] = 't';
fb.szFmtID[3] = ' ';
fb.wavFormat = wf;
fb.dwFmtSize = sizeof(fb);
}
Questo perchè vorrei creare un file .wav dove ogni chunk di raw audio data è preceduto dal formato RIFF:
http://www.codeguru.com/cpp/g-m/mult...cle.php/c8935/
grazie