/* Copyright 2004 XDA-Developers.com * All Rights Reserved * author: itsme@xs4all.nl * * $Header$ * */ #ifndef __ESRCAUDIOINPUT_H__ #include "nhQueue.h" #include #include typedef short sample_t; typedef std::vector SampleVector; typedef std::vector SampleBufferList; typedef std::vector WaveHdrList; typedef std::vector WaveHdrPtrList; class AudioRecorder { public: AudioRecorder(int samplesperblock, int blocks, int samplerate); virtual ~AudioRecorder(); bool StartAudioInput(); void HandleSource(DWORD msec); void StopAudioInput(); DwordVector m_timestamps; WaveHdrPtrList m_wavehdrptrs; WaveHdrList m_wavehdrs; private: HWAVEIN m_hwi; DWORD m_samplesperblock; DWORD m_samplerate; int m_nBlocks; // nr of audio blocks to keep around WaveHdrList m_whlist; SampleBufferList m_bufferlist; bool m_bRunning; NHQueue m_queue; bool CopyInputBuffer( WAVEHDR *pwh); static void CALLBACK waveInProc(HWAVEIN hwi, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2); void HandleWaveCallback(UINT uMsg, WAVEHDR* pwh); bool UnPrepareInputBuffer( WAVEHDR *pwh ); bool PrepareAndSubmitBuffer(int i); }; class AudioPlayer { public: AudioPlayer(int samplesperblock, int blocks, int samplerate); ~AudioPlayer(); bool StartAudioOutput(); void HandleSource(DWORD msec); void StopAudioOutput(); DwordVector m_timestamps; WaveHdrPtrList m_wavehdrptrs; WaveHdrList m_wavehdrs; private: HWAVEOUT m_hwo; DWORD m_samplesperblock; DWORD m_samplerate; int m_nBlocks; // nr of audio blocks to keep around WaveHdrList m_whlist; SampleBufferList m_bufferlist; bool m_bRunning; NHQueue m_queue; int m_nAudioBlocksPlayed; bool CopyOutputBuffer( WAVEHDR *pwh); static void CALLBACK waveOutProc( HWAVEOUT hwo, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2); void HandleWaveCallback(UINT uMsg, WAVEHDR* pwh); bool UnPrepareOutputBuffer( WAVEHDR *pwh ); bool PrepareAndSubmitBuffer(int buffernr); bool GetID(UINT& devid); bool Close(); bool GetVolume(DWORD& volume); bool SetVolume(DWORD volume); }; #define __ESRCAUDIOINPUT_H__ #endif