windows-nt/Source/XPSP1/NT/net/tapi/skywalker/tapi3/waves.h
2020-09-26 16:20:57 +08:00

82 lines
1.7 KiB
C++

//
// waves.h
//
#ifndef _WAVES_H_
#define _WAVES_H_
#include <mmsystem.h>
#define NUM_TONES 21
#define NUM_WAVES 22
//////////////////////////////////////////////////////////////////////////////
//
// class CWavePlayer
//
// Implements tone player for a single phone device.
//
class CWavePlayer
{
public:
DECLARE_TRACELOG_CLASS(CWavePlayer)
CWavePlayer();
~CWavePlayer();
HRESULT Initialize(void);
HRESULT OpenMixerDevice(long lWaveId);
void CloseMixerDevice(void);
HRESULT OpenWaveDeviceForTone(long lWaveId);
HRESULT OpenWaveDeviceForRing(long lWaveId);
void CloseWaveDeviceForTone(void);
void CloseWaveDeviceForRing(void);
BOOL IsInitialized(void) { return m_fInitialized; }
BOOL IsInUse(void) { return ((m_hWaveOutTone != NULL) || (m_hWaveOutRing != NULL) || (m_hMixer != NULL)); }
HRESULT StartTone(long lTone);
HRESULT StartRing();
HRESULT StopTone(long lTone);
HRESULT StopRing(void);
BOOL PlayingTone(long lTone);
HRESULT SetVolume( DWORD dwVolume );
HRESULT GetVolume( DWORD * pdwVolume );
private:
HRESULT ChangeTone();
// TRUE if Initialize has succeeded.
BOOL m_fInitialized;
// Handle to the wave out device. NULL when the device is not open.
HWAVEOUT m_hWaveOutTone;
HWAVEOUT m_hWaveOutRing;
HMIXER m_hMixer;
MIXERCONTROL m_mxctrl;
// Wave headers
WAVEHDR m_WaveHeaderTone;
WAVEHDR m_WaveHeaderRing;
// Buffers for the tones
LPBYTE m_lpWaveform[ NUM_WAVES ];
DWORD m_dwWaveformSize[ NUM_WAVES ];
BOOL m_fPlaying[ NUM_TONES ];
LONG m_lCurrentTone;
};
#endif // _WAVES_H_