/////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////
////																					 ////
////																					 ////
////								   - HAudio.cpp -   								 ////
////																					 ////
////																					 ////
////				Implémentation des fonctions SCOL de la librairie sonore			 ////
////									 Version  1.0									 ////
////																					 ////
////								  Hilaire Verschuere								 ////
////																					 ////
////																					 ////
/////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////


#include "../Basic/ZooScene.h"

extern mmachine	mm ;
extern int SoundPlay ;
extern int EASYPLAY_EVT ;
extern HWND hwnd ;


//-----------------------------------------------------------------------------
// Name: HSound::HSound()
// Constructor
//-----------------------------------------------------------------------------
HAudio::HAudio( bool addToList )
	   :HSound( addToList )
{
	AudioType	 = true ;
}






//-----------------------------------------------------------------------------
// Name: HAudio::~HAudio()
// Desc: Destructs the class
//-----------------------------------------------------------------------------
HAudio::~HAudio()
{
	Stop() ;
	SAFE_DELETE( pHSndNotify ) ;
	Close() ;
}




//-----------------------------------------------------------------------------
// Name: HAudio::HAudio()
// Desc: Setting data to use it manually
//-----------------------------------------------------------------------------
HRESULT HAudio::SetData( int channel, int bitPerSample, int freq, int size )
{
    if( (channel!=1 && channel!=2) || (bitPerSample!=8 && bitPerSample!=16) || freq<5000 || freq>48000 ) 
	{
		MMechostr( 1, "Error in setting sound parameters\n" ) ; 
		return S_FALSE ;
	}	

	// setup format
	m_pwfx = (WAVEFORMATEX*)new CHAR[ sizeof(WAVEFORMATEX) ];
	memset(m_pwfx, 0, sizeof(PCMWAVEFORMAT)) ;
	m_pwfx->wFormatTag		= WAVE_FORMAT_PCM ;
	m_pwfx->nChannels		= channel ;
	m_pwfx->wBitsPerSample	= bitPerSample ;
	m_pwfx->nSamplesPerSec	= freq ;
	m_pwfx->nBlockAlign		= (bitPerSample/8) * channel ;
	m_pwfx->nAvgBytesPerSec	= m_pwfx->nSamplesPerSec * m_pwfx->nBlockAlign ;
	m_pwfx->cbSize			= 0 ;

	m_dwNotifySize = m_pwfx->nBlockAlign * size  ;

	return S_OK ;
}

 



//-----------------------------------------------------------------------------
// Name: HAudio::Read()
// Desc: Read and copy data
//-----------------------------------------------------------------------------
DWORD HAudio::Read( char* pBuffer, unsigned long sizeToRead )
{
	if ( IsSoundPlaying() ) PostMessage( hwnd, EASYPLAY_EVT, (int)pBuffer, sizeToRead ) ;
	else _FillMemory( pBuffer, sizeToRead, (m_pwfx->wBitsPerSample == 8 ? 128 : 0) ) ;

	return sizeToRead ;
}







//-----------------------------------------------------------------------------
// Name: HAudio::Close()
// Desc: Retuns the duration of audio data 
//-----------------------------------------------------------------------------
HRESULT HAudio::Close()
{
	m_dwSize = 0 ;

	return S_OK ;
}



