Code:
class Sound
{
public:
Sound(char* FileName);
PBYTE GetMusicData(){ return SoundData;}
private:
HANDLE MusicFile;
char Buffer [5];//we add one for the null terminator
char DataBuffer[4];
unsigned long FmtRead;
unsigned long RiffRead;
unsigned long WaveRead;
unsigned long LengthOfSound;
unsigned long LengthBuffer;
unsigned long LengthOfSoundWave;
unsigned long LengthBufferWave;
unsigned long GetPastHugeChunks;
unsigned long GetPastHugeChunksBuffer;
unsigned long LengthOfChunk;
unsigned long LengthOfChunkBuffer;
char* TEMP;
PBYTE SoundData;
PWAVEHDR WaveHeader;
WAVEFORMATEX waveformat ;
HWAVEOUT WaveOut;
};
Sound::Sound(char* FileName)
{
//Load our Wave File
Buffer[4]='\0';
MusicFile=CreateFile(FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
ReadFile(MusicFile,Buffer,4,&RiffRead,NULL);
ReadFile(MusicFile,&LengthOfSound,4,&LengthBuffer,NULL);
ReadFile(MusicFile,Buffer,4,&WaveRead,NULL);
ReadFile(MusicFile,Buffer,4,&FmtRead,NULL);
ReadFile(MusicFile,&LengthOfChunk,4,&LengthOfChunkBuffer,NULL);
TEMP=new char[LengthOfChunk];
ReadFile(MusicFile,TEMP,LengthOfChunk,&RiffRead,NULL);
ReadFile(MusicFile,Buffer,4,&WaveRead,NULL);
ReadFile(MusicFile,&LengthOfSoundWave,4,&LengthBufferWave,NULL);
//allocate enough memory to copy of sound data
SoundData=new BYTE[LengthOfSoundWave];
ReadFile(MusicFile,SoundData,LengthOfSoundWave,&LengthBuffer,NULL);
WaveHeader=new WAVEHDR [sizeof (WAVEHDR)];
waveformat.wFormatTag = WAVE_FORMAT_PCM ;
waveformat.nChannels = 1 ;
waveformat.nSamplesPerSec = 11025;
waveformat.nAvgBytesPerSec = 11025;
waveformat.nBlockAlign = 1 ;
waveformat.wBitsPerSample = 8 ;
waveformat.cbSize = 0 ;
WaveHeader->lpData=SoundData;
WaveHeader->dwBufferLength=LengthOfSoundWave;
waveOutOpen (WaveOut, WAVE_MAPPER, &waveformat, NULL, 0, CALLBACK_WINDOW)
waveOutWrite (WaveHeader, pWaveHdr2, sizeof (WAVEHDR)) ;