T3D图形库DMusic&&DSound头文件部分
- /*2008.10.3
- T3D图形库
- ——<<windows游戏
- 编程大师技巧>>
- */
- // DirectSound && DirectMusic
- #ifndef DS_DM_LIB
- #define DS_DM_LIB
- #define DM_NUM_SEGMENTS 64 // 内存中可以被捕获到的MIDI音乐段
- // midi对象状态
- #define MIDI_NULL 0 // 没有被加载
- #define MIDI_LOADED 1 // 被加载
- #define MIDI_PLAYING 2 // 在播放
- #define MIDI_STOPPED 3 // 被加载后停止
- #define MAX_SOUNDS 256 // 声音数量
- // 数字声音状态
- #define SOUND_NULL 0 //同上
- #define SOUND_LOADED 1
- #define SOUND_PLAYING 2
- #define SOUND_STOPPED 3
- // 以下宏使其兼容 directx 7.0
- #ifndef DSBCAPS_CTRLDEFAULT
- #define DSBCAPS_CTRLDEFAULT (DSBCAPS_CTRLFREQUENCY | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME )
- #endif
- // 转换为微软分贝单位 volume为100则声音最大
- #define DSVOLUME_TO_DB(volume) ((DWORD)(-30*(100 - volume)))
- // 多子节字符转换为宽字符串
- #define MULTI_TO_WIDE( x,y ) MultiByteToWideChar( CP_ACP,MB_PRECOMPOSED, y,-1,x,_MAX_PATH);
- // 初始化结构体
- #define DD_INIT_STRUCT(ddstruct) { memset(&ddstruct,0,sizeof(ddstruct)); ddstruct.dwSize=sizeof(ddstruct); }
- // 类型 //
- // 存储单一的声音文件
- typedef struct pcm_sound_typ
- {
- LPDIRECTSOUNDBUFFER dsbuffer; // DS 的后备缓冲
- int state; // 声音状态
- int rate; // 回放速率
- int size; // 声音大小
- int id; // 声音ID
- } pcm_sound, *pcm_sound_ptr;
- // DM midi段 结构
- typedef struct DMUSIC_MIDI_TYP
- {
- IDirectMusicSegment *dm_segment; // the directmusic segment
- IDirectMusicSegmentState *dm_segstate; // the state of the segment
- int id; // the id of this segment
- int state; // state of midi song
- } DMUSIC_MIDI, *DMUSIC_MIDI_PTR;
- // 函数接口 /
- // directsound
- int DSound_Load_WAV(char *filename, int control_flags = DSBCAPS_CTRLDEFAULT);
- int DSound_Replicate_Sound(int source_id);
- int DSound_Play(int id, int flags=0, int volume=0, int rate=0, int pan=0);
- int DSound_Stop_Sound(int id);
- int DSound_Stop_All_Sounds(void);
- int DSound_Init(void);
- int DSound_Shutdown(void);
- int DSound_Delete_Sound(int id);
- int DSound_Delete_All_Sounds(void);
- int DSound_Status_Sound(int id);
- int DSound_Set_Volume(int id,int vol);
- int DSound_Set_Freq(int id,int freq);
- int DSound_Set_Pan(int id,int pan);
- // directmusic
- int DMusic_Load_MIDI(char *filename);
- int DMusic_Play(int id);
- int DMusic_Stop(int id);
- int DMusic_Shutdown(void);
- int DMusic_Delete_MIDI(int id);
- int DMusic_Delete_All_MIDI(void);
- int DMusic_Status_MIDI(int id);
- int DMusic_Init(void);
- // GLOBALS
- // EXTERNALS //
- extern HWND main_window_handle; // save the window handle
- extern HINSTANCE main_instance; // save the instance
- extern LPDIRECTSOUND lpds; // directsound interface pointer
- extern DSBUFFERDESC dsbd; // directsound description
- extern DSCAPS dscaps; // directsound caps
- extern HRESULT dsresult; // general directsound result
- extern DSBCAPS dsbcaps; // directsound buffer caps
- extern LPDIRECTSOUNDBUFFER lpdsbprimary; // the primary mixing buffer
- extern pcm_sound sound_fx[MAX_SOUNDS]; // the array of secondary sound buffers
- extern WAVEFORMATEX pcmwf; // generic waveformat structure
- // direct music globals
- extern IDirectMusicPerformance *dm_perf ; // the directmusic performance manager
- extern IDirectMusicLoader *dm_loader; // the directmusic loader
- // this hold all the directmusic midi objects
- extern DMUSIC_MIDI dm_midi[DM_NUM_SEGMENTS];
- extern int dm_active_id; // currently active midi segment
- #endif