Files
Work/sample/hold/WAVEIN.HPP
2024-08-07 09:16:27 -04:00

77 lines
2.1 KiB
C++

#ifndef _SAMPLE_WAVEINDEVICE_HPP_
#define _SAMPLE_WAVEINDEVICE_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_GLOBALDATA_HPP_
#include <common/gdata.hpp>
#endif
#ifndef _SAMPLE_WAVEINCAPS_HPP_
#include <sample/incaps.hpp>
#endif
#ifndef _SAMPLE_WAVEHEADER_HPP_
#include <sample/wavehdr.hpp>
#endif
#ifndef _SAMPLE_WAVEFORM_HPP_
#include <sample/wave.hpp>
#endif
#ifndef _SAMPLE_DEVICEHANDLER_HPP_
#include <sample/devhndlr.hpp>
#endif
#ifndef _SAMPLE_WAVEFORMATPCM_HPP_
#include <sample/pcmform.hpp>
#endif
class WaveInDevice : public DeviceHandler
{
public:
WaveInDevice(UINT waveDeviceID,Window &windowHandler);
WaveInDevice(const WaveInDevice &someWaveInDevice);
virtual ~WaveInDevice();
WaveInDevice &operator=(const WaveInDevice &someWaveInDevice);
WORD record(WaveForm &waveForm);
protected:
virtual void openHandler(CallbackData &someCallbackData);
virtual void closeHandler(CallbackData &someCallbackData);
virtual void doneHandler(CallbackData &someCallbackData);
virtual void message(const String &strErrorMessage)const;
private:
WORD openDevice(WaveFormatPCM &waveFormatPCM);
WORD closeDevice(void);
UINT mWaveDeviceID;
GlobalData<WaveHeader> mGlobalWaveHeader;
WaveInCaps mWaveInCaps;
HWAVEIN mhWaveIn;
Window &mWindowHandler;
};
inline
WaveInDevice::WaveInDevice(UINT waveDeviceID,Window &windowHandler)
: mWaveDeviceID(waveDeviceID), mhWaveIn(0), mGlobalWaveHeader(1,GMEM_MOVEABLE|GMEM_ZEROINIT),
mWindowHandler(windowHandler), DeviceHandler(windowHandler)
{
::waveInGetDevCaps(mWaveDeviceID,&((WAVEINCAPS&)mWaveInCaps),sizeof(mWaveInCaps));
}
inline
WaveInDevice::WaveInDevice(const WaveInDevice &someWaveInDevice)
: mWaveDeviceID(someWaveInDevice.mWaveDeviceID), mGlobalWaveHeader(1,GMEM_MOVEABLE|GMEM_ZEROINIT),
mhWaveIn(0), mWindowHandler(someWaveInDevice.mWindowHandler), DeviceHandler(someWaveInDevice.mWindowHandler)
{
*this=someWaveInDevice;
}
inline
WaveInDevice &WaveInDevice::operator=(const WaveInDevice &someWaveInDevice)
{
mWaveInCaps=someWaveInDevice.mWaveInCaps;
return *this;
}
inline
WaveInDevice::~WaveInDevice()
{
closeDevice();
}
#endif