00001 #ifndef AUDIOOUTPUTDX
00002 #define AUDIOOUTPUTDX
00003
00004
00005
00006
00007
00008 #include <windows.h>
00009 #include <dsound.h>
00010
00011
00012 #include <qstring.h>
00013
00014
00015 #include "audiooutputbase.h"
00016
00017 class AudioOutputDX : public AudioOutputBase
00018 {
00019 public:
00020 AudioOutputDX(QString laudio_main_device,
00021 QString laudio_passthru_device,
00022 int laudio_bits,
00023 int laudio_channels, int laudio_samplerate,
00024 AudioOutputSource lsource,
00025 bool lset_initial_vol, bool laudio_passthru);
00026 virtual ~AudioOutputDX();
00027
00029 bool OpenDevice(void) { return false; }
00030 void CloseDevice(void) {}
00031 void WriteAudio(unsigned char*, int) {}
00032 virtual int getSpaceOnSoundcard(void) { return 0; }
00033 virtual int getBufferedOnSoundcard(void) { return 0; }
00034 #warning Several methods in AudioOutputDX need to be implemented...
00036
00037 virtual void Reset(void);
00038 virtual void Reconfigure(int audio_bits,
00039 int audio_channels,
00040 int audio_samplerate,
00041 bool audio_passthru);
00042 virtual void SetBlocking(bool blocking);
00043
00044 virtual bool AddSamples(char *buffer, int samples, long long timecode);
00045 virtual bool AddSamples(char *buffers[], int samples, long long timecode);
00046 virtual void SetEffDsp(int dsprate);
00047 virtual void SetTimecode(long long timecode);
00048
00049 virtual bool GetPause(void);
00050 virtual void Pause(bool paused);
00051
00052 virtual void Drain(void);
00053
00054 virtual int GetAudiotime(void);
00055
00056
00057 virtual int GetVolumeChannel(int channel);
00058 virtual void SetVolumeChannel(int channel, int volume);
00059
00060 private:
00061 HINSTANCE dsound_dll;
00062 LPDIRECTSOUND dsobject;
00063 LPDIRECTSOUNDBUFFER dsbuffer;
00064
00065
00066 LPDIRECTSOUNDNOTIFY dsnotify;
00067 DSBPOSITIONNOTIFY notif[4];
00068
00069 DWORD write_cursor;
00070 DWORD buffer_size;
00071 bool blocking;
00072
00073 bool awaiting_data;
00074
00075 int effdsp;
00076 int audio_bytes_per_sample;
00077 int audio_bits;
00078 int audio_channels;
00079 int audbuf_timecode;
00080
00081 bool can_hw_pause;
00082 bool paused;
00083
00084 int InitDirectSound();
00085 int CreateDSBuffer(int audio_bits, int audio_channels, int audio_samplerate, bool b_probe);
00086 void DestroyDSBuffer();
00087 int FillBuffer(int frames, char *buffer);
00088 };
00089
00090 #endif // AUDIOOUTPUTDX