Initial
This commit is contained in:
118
sample/Device.hpp
Normal file
118
sample/Device.hpp
Normal file
@@ -0,0 +1,118 @@
|
||||
#ifndef _SAMPLE_DEVICE_HPP_
|
||||
#define _SAMPLE_DEVICE_HPP_
|
||||
#ifndef _COMMON_WINDOWS_HPP_
|
||||
#include <common/windows.hpp>
|
||||
#endif
|
||||
#ifndef _COMMON_WINDOW_HPP_
|
||||
#include <common/window.hpp>
|
||||
#endif
|
||||
#ifndef _SAMPLE_WAVEOUTDEVICE_HPP_
|
||||
#include <sample/waveout.hpp>
|
||||
#endif
|
||||
#ifndef _SAMPLE_WAVEINDEVICE_HPP_
|
||||
#include <sample/wavein.hpp>
|
||||
#endif
|
||||
#ifndef _SAMPLE_WAVEHEADER_HPP_
|
||||
#include <sample/wavehdr.hpp>
|
||||
#endif
|
||||
#ifndef _SAMPLE_WAVEFORM_HPP_
|
||||
#include <sample/wave.hpp>
|
||||
#endif
|
||||
#ifndef _SAMPLE_WAVEFORMATPCM_HPP_
|
||||
#include <sample/pcmform.hpp>
|
||||
#endif
|
||||
|
||||
class WaveDevice
|
||||
{
|
||||
public:
|
||||
enum DeviceType{InputDevice,OutputDevice,InvalidDevice};
|
||||
enum PlayMode{Wait,NoWait};
|
||||
WaveDevice(UINT waveDeviceID,DeviceType waveDeviceType,Window &windowHandler);
|
||||
WaveDevice(const WaveDevice &someWaveDevice);
|
||||
~WaveDevice();
|
||||
WORD play(WaveForm &waveForm,PlayMode playMode=NoWait);
|
||||
WORD operator==(const WaveDevice &someWaveDevice)const;
|
||||
WaveDevice &operator=(const WaveDevice &someWaveDevice);
|
||||
void waveDeviceID(UINT deviceID);
|
||||
UINT waveDeviceID(void)const;
|
||||
void waveDeviceType(DeviceType waveDeviceType);
|
||||
DeviceType waveDeviceType(void)const;
|
||||
private:
|
||||
enum ErrorCode{InvalidFormat};
|
||||
void yieldTask(void)const;
|
||||
void getDeviceCapabilities(void);
|
||||
void insertHandlers(void);
|
||||
void removeHandlers(void);
|
||||
void mmSystemErrorMessage(MMRESULT mmResult)const;
|
||||
void genericErrorMessage(ErrorCode errorCode)const;
|
||||
WORD closeDevice(void);
|
||||
WORD openDevice(WaveFormatPCM &waveFormatPCM);
|
||||
CallbackData::ReturnType mmOpenHandler(CallbackData &someCallbackData);
|
||||
CallbackData::ReturnType mmCloseHandler(CallbackData &someCallbackData);
|
||||
CallbackData::ReturnType mmDoneHandler(CallbackData &someCallbackData);
|
||||
Callback<WaveDevice> mMMOpenHandler;
|
||||
Callback<WaveDevice> mMMCloseHandler;
|
||||
Callback<WaveDevice> mMMDoneHandler;
|
||||
UINT mWaveDeviceID;
|
||||
DeviceType mDeviceType;
|
||||
WaveInCaps mWaveInCaps;
|
||||
WaveOutCaps mWaveOutCaps;
|
||||
HWAVEOUT mhWaveOut;
|
||||
GlobalData<WaveHeader> mGlobalWaveHeader;
|
||||
Window &mWindowHandler;
|
||||
};
|
||||
|
||||
inline
|
||||
void WaveDevice::waveDeviceID(UINT deviceID)
|
||||
{
|
||||
mWaveDeviceID=deviceID;
|
||||
getDeviceCapabilities();
|
||||
}
|
||||
|
||||
inline
|
||||
UINT WaveDevice::waveDeviceID(void)const
|
||||
{
|
||||
return mWaveDeviceID;
|
||||
}
|
||||
|
||||
inline
|
||||
void WaveDevice::waveDeviceType(DeviceType waveDeviceType)
|
||||
{
|
||||
mDeviceType=waveDeviceType;
|
||||
getDeviceCapabilities();
|
||||
}
|
||||
|
||||
inline
|
||||
WaveDevice::DeviceType WaveDevice::waveDeviceType(void)const
|
||||
{
|
||||
return mDeviceType;
|
||||
}
|
||||
|
||||
inline
|
||||
void WaveDevice::getDeviceCapabilities(void)
|
||||
{
|
||||
if(mDeviceType==InputDevice)::waveInGetDevCaps(mWaveDeviceID,&((WAVEINCAPS&)mWaveInCaps),sizeof(mWaveInCaps));
|
||||
else if(mDeviceType==OutputDevice)::waveOutGetDevCaps(mWaveDeviceID,&((WAVEOUTCAPS&)mWaveOutCaps),sizeof(mWaveOutCaps));
|
||||
}
|
||||
|
||||
inline
|
||||
WORD WaveDevice::operator==(const WaveDevice &someWaveDevice)const
|
||||
{
|
||||
return (mDeviceType==someWaveDevice.mDeviceType&&mWaveDeviceID==someWaveDevice.mWaveDeviceID);
|
||||
}
|
||||
|
||||
inline
|
||||
void WaveDevice::mmSystemErrorMessage(MMRESULT mmResult)const
|
||||
{
|
||||
String errorString;
|
||||
::waveOutGetErrorText(mmResult,(LPSTR)errorString,String::MaxString);
|
||||
::MessageBox(::GetFocus(),(LPSTR)errorString,(LPSTR)"WaveDevice",MB_OK);
|
||||
}
|
||||
|
||||
inline
|
||||
void WaveDevice::genericErrorMessage(ErrorCode errorCode)const
|
||||
{
|
||||
if(errorCode==InvalidFormat)::MessageBox(::GetFocus(),(LPSTR)"Invalid Format.",(LPSTR)"WaveDevice",MB_OK);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user