#ifndef NAC_DTMF_H #define NAC_DTMF_H class DTMFQueue { private: BYTE **m_aTones; // array of tone signals bool m_bInitialized; WAVEFORMATEX m_WaveFormat; CRITICAL_SECTION m_cs; HANDLE m_hEvent; void ReleaseToneBank(); void AddSignal(BYTE *pTone, int nFrequency, double dAmp, int nLength); void CreateDTMFTone(BYTE *pTone, int nToneLength, int toneID); HRESULT GenerateTones(WAVEFORMATEX *pWaveFormat); struct DTMF_TX_ELEMENT { int nToneID; int nBytesToCopy; int nOffsetStart; }; #define DTMF_QUEUE_SIZE 100 DTMF_TX_ELEMENT m_aTxQueue[DTMF_QUEUE_SIZE]; int m_nQueueHead; int m_nQueueLength; public: DTMFQueue(); ~DTMFQueue(); HRESULT Initialize(WAVEFORMATEX *pWaveFormat); HRESULT ReadFromQueue(BYTE *pBuffer, UINT uSize); HRESULT ClearQueue(); HRESULT AddDigitToQueue(int nDigit); HANDLE GetEvent() {return m_hEvent;} }; // default length of the DTMF feedback beep (in ms) #define DTMF_FEEDBACK_BEEP_MS 64 #endif