00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __STREAMTRACKDS_H__
00012 #define __STREAMTRACKDS_H__
00013
00014 #include <windows.h>
00015 #include "Sound/SoundDll.h"
00016 #include "Common/Types.h"
00017 #include "Common/Table.h"
00018 #include "Common/Time.h"
00019
00020 #define KDSBVOLUME_MIN -5000
00021 typedef u32 KSTREAMTRACK;
00022 #define KSTREAMTRACK_NO ((KSTREAMTRACK)-1)
00023 #define KSTREAMTRACK_FADE_TIME 1000 // 1 seconde
00024
00025 class KSound;
00026 class KWave;
00027 class KStreamTrackBank;
00028 struct IDirectSoundBuffer8;
00029 struct IDirectSoundNotify8;
00030
00031
00032 typedef enum _KSTRACKFADE
00033 {
00034 KSTF_NONE,
00035 KSTF_IN,
00036 KSTF_OUT
00037 } KSTRACKFADE;
00038
00039
00040 class SOUND_API KStreamTrack
00041 {
00042 protected:
00043 IDirectSoundBuffer8* m_pDSBuffer;
00044 IDirectSoundNotify8* m_pDSNotify;
00045 KStr m_sFileName;
00046 KWave* m_pWaveFile;
00047 HANDLE m_hStopEvent1;
00048 HANDLE m_hStopEvent2;
00049 KSTRACKFADE m_Fade;
00050 KTIME m_StartFade;
00051 KTIME m_EndFade;
00052
00053 public:
00054 KStreamTrack();
00055 ~KStreamTrack();
00056
00057 bool LoadTrack( KStreamTrackBank* pStreamTrackBank, KStr& sFileName );
00058 bool UnloadTrack();
00059 KStr& GetsFileName() { return m_sFileName; }
00060 bool Play( bool bFadeIn = false, KTIME FadeTime = KSTREAMTRACK_FADE_TIME );
00061 bool Stop( bool bFadeOut = false, KTIME FadeTime = KSTREAMTRACK_FADE_TIME );
00062 bool Lock( void** pData, u32* Size, u32 StartOffset = 0, u32 SizeToLock = 0 );
00063 bool Unlock( void* pData, u32 Size );
00064 bool CopyNextBlock( u32 BufferId );
00065 bool Manage();
00066 HANDLE GethStopEvent1() { return m_hStopEvent1; }
00067 HANDLE GethStopEvent2() { return m_hStopEvent2; }
00068
00069 void SetPlayPos( u32 Position );
00070
00071 bool IsPlaying();
00072 };
00073
00074
00075 class SOUND_API KStreamTrackBank
00076 {
00077 protected:
00078 KSound* m_pSound;
00079 KTable<KStreamTrack*> m_pTrack;
00080 u32 m_nTracks;
00081
00082 public:
00083 KStreamTrackBank( KSound* pSound );
00084 ~KStreamTrackBank();
00085
00086 KSTREAMTRACK LoadTrack( KStr& sFileName );
00087 bool UnloadTrack( KSTREAMTRACK& Track );
00088 KStreamTrack* GetTrack( KSTREAMTRACK TrackId );
00089
00090 KSound* GetSound() { return m_pSound; }
00091 u32 GetnTracks() { return m_nTracks; }
00092 };
00093
00094 #endif __STREAMTRACKDS_H__