Files
Client/GameTools/SoundLib/SoundManager.h
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

114 lines
2.8 KiB
C++

#ifndef _SoundManager_H_
#define _SoundManager_H_
#include "STL.h"
#include "SoundGlobal.h"
/////////////////////////////////////////////////////////////////////////////////////////
// 전방 참조
#define DSSCL_NORMAL 0x00000001
#define DSSCL_PRIORITY 0x00000002
#define DSSCL_EXCLUSIVE 0x00000003
#define DSSCL_WRITEPRIMARY 0x00000004
class ISoundObject;
class CSoundBuffer;
class CDirectSound;
class CDirectMusic;
class IStreamHandler;
struct CompareResource;
typedef struct HWND__* HWND;
typedef unsigned long DWORD;
/////////////////////////////////////////////////////////////////////////////////////////
// 기본적으로 메모리 사용 한계는 5MB로 잡혀있음.
class CSoundManager
{
public:
typedef void (*REPORTFUNC)( const char * );
public:
enum eState
{
STATE_USING,
STATE_UNUSE,
STATE_DELETED
};
struct Resource
{
int used; //몇 번이나 사용 됐는가?
DWORD time; //사용이 시작 시간 또는 사용이 끝난 시각 또는 폐기된 시각
ISoundObject * pSndBuf;
eState state;
};
public:
typedef map<string, Resource*> RESOURCES; //Using, Unuse 리스트들에서 Resource를 참조해야 하므로 여기에 Resource의 포인터로 저장함.
typedef set<Resource*> RESLIST;
protected:
CDirectSound & m_DSound;
CDirectMusic & m_DMusic;
bool m_bDSoundEnable;
bool m_bDMusicEnable;
CompareResource * m_pComparer;
RESOURCES * m_pResources;
RESLIST * m_pUsingList;
RESLIST * m_pUnuseList;
RESLIST * m_pDeletedList;
IStreamHandler* m_pStreamUpdater;
REPORTFUNC ReportFunc; //디버그용 리포트 함수
protected:
CSoundManager();
void Caching();
RESLIST * GetListOfState( eState );
eState GetStateOfList( RESLIST * );
void MoveResourceTo( Resource &, RESLIST * );
void CreateSoundBuffer( Resource &, const char *, bool, bool, int, DWORD );
Resource & AddResource( const char * szFilename, bool b3DSound, bool bStream, int, DWORD );
void UseResource( Resource & res );
void UnuseResource( Resource & res );
public:
//--------------인터페이스---------------//
static CSoundManager & GetInstance();
~CSoundManager();
void Create( HWND, DWORD = DSSCL_PRIORITY );
void Destroy();
void SetMemoryLimit( DWORD limit ) {}
void SetReportFunc( REPORTFUNC func ) { ReportFunc = func; } //디버그용
CDirectSound & GetDirectSound();
CDirectMusic & GetDirectMusic() { return m_DMusic; }
DWORD GetMemoryUse() {}
ISoundObject & GetBuffer( const char * szFilename,
bool b3DSound = false,
bool bStream = false,
int nBuf = 10,
DWORD dwAddFlag = 0 );
bool ReleaseBuffer( ISoundObject & ) { return false; }
void Update(); //StreamBuffer를 하나라도 쓸 경우에만..
//----------------------------------------//
};
/////////////////////////////////////////////////////////////////////////////////////////
#endif