1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| CWaveFile::CWaveFile()
{
//Init tout à Zéro
m_lpfile = NULL;
m_hwo = NULL;
m_dwDurationTime = 0;
m_hEventDone = NULL;
ZeroMemory( &m_wfex, sizeof(WAVEFORMATEX) );
ZeroMemory( &m_whdr, sizeof(WAVEHDR) );
}
CWaveFile::~CWaveFile()
{
//arreter la diffusion en cours
Stop();
//fermer le device
Close();
//Libération mémoire et handle allouée
if( m_lpfile)
delete [] m_lpfile;
if( m_hEventDone )
CloseHandle( m_hEventDone );
}
MMRESULT CWaveFile::Open(LPCSTR szFileName, UINT uDeviceID /*=WAVE_MAPPER*/)
{
// Open and read the wave file
FILE* f = fopen(szFileName, "rb");
if(!f) // Error, file not found.
return MMSYSERR_ERROR;
// Determine the file size
fseek(f, 0, SEEK_END);
long fileLen = ftell(f);
// Rewind the pointer to the begginning so we can read it
fseek(f, 0, SEEK_SET);
// Request enough memory to store the entire file
m_lpfile = new char [fileLen];
// 'Copy' the file to memory
fread(m_lpfile, sizeof(char), fileLen, f);
// Close the file, we won't need it anymore
fclose(f);
// Fill WAVEFORMATEX with the data from the file
m_wfex.wFormatTag = *((WORD* )(m_lpfile + OFFSET_FORMATTAG ));
m_wfex.nChannels = *((WORD* )(m_lpfile + OFFSET_CHANNELS ));
m_wfex.nSamplesPerSec = *((DWORD*)(m_lpfile + OFFSET_SAMPLESPERSEC ));
m_wfex.nAvgBytesPerSec = *((DWORD*)(m_lpfile + OFFSET_AVGBYTESPERSEC));
m_wfex.nBlockAlign = *((WORD* )(m_lpfile + OFFSET_BLOCKALIGN ));
m_wfex.wBitsPerSample = *((WORD* )(m_lpfile + OFFSET_BITSPERSAMPLE ));
m_wfex.cbSize = 0;
// Fill the WAVEHDR structure
m_whdr.lpData = m_lpfile+HEADER_SIZE;
m_whdr.dwBufferLength = fileLen-HEADER_SIZE;
//Durée prévu (en millisecondes)
m_dwDurationTime = (float)m_whdr.dwBufferLength / m_wfex.nSamplesPerSec / (m_wfex.wBitsPerSample/8) * 1000;
// Open and configure the device
return waveOutOpen(&m_hwo, uDeviceID, &m_wfex, (DWORD)WaveOutProc, (DWORD)this, CALLBACK_FUNCTION);
} |
Partager