deargui-vpl/ref/virtools/Samples/Behaviors/MidiManager/MidiManager.h

102 lines
3.4 KiB
C++

/*************************************************************************/
/* File : MidiManager.h
/*
/* Author :
/* Last Modification :
/*
/*************************************************************************/
#include "CKBaseManager.h"
#include "XList.h"
#ifdef _XBOX
#include "Xtl.h"
#else
#include "windows.h"
#endif
//_________________Struct midiMessage
struct midiMessage {
unsigned char channel;
unsigned char command;
unsigned char note;
unsigned char attack;
UINT time;
};
typedef XList<midiMessage> midiMessageList;
class MidiManager :public CKMidiManager{
////////////////////////////////////////////////////////
// Public Part ////
////////////////////////////////////////////////////////
public :
// Midi Sound Playing Functions
virtual void* Create(void* hwnd) ;
virtual void Release(void* source) ;
virtual CKERROR SetSoundFileName(void* source,CKSTRING filename) ;
virtual CKSTRING GetSoundFileName(void* source) ;
virtual CKERROR Play(void* source) ;
virtual CKERROR Restart(void* source) ;
virtual CKERROR Stop(void* source) ;
virtual CKERROR Pause(void* source,CKBOOL pause=TRUE) ;
virtual CKBOOL IsPlaying(void* source) ;
virtual CKBOOL IsPaused(void* source) ;
virtual CKERROR OpenFile(void* source) ;
virtual CKERROR CloseFile(void* source) ;
virtual CKERROR Preroll(void* source) ;
virtual CKERROR Time(void* source,CKDWORD* pTicks) ;
virtual CKDWORD MillisecsToTicks(void* source,CKDWORD msOffset) ;
virtual CKDWORD TicksToMillisecs(void* source,CKDWORD tkOffset) ;
// Initialization
virtual CKERROR OnCKInit();
virtual CKERROR OnCKEnd();
virtual CKERROR OnCKReset();
virtual CKERROR PreProcess();
virtual CKERROR PostProcess();
virtual CKERROR PostClearAll();
virtual CKERROR OnCKPlay();
virtual CKDWORD GetValidFunctionsMask() { return CKMANAGER_FUNC_OnCKInit|
CKMANAGER_FUNC_OnCKEnd|
CKMANAGER_FUNC_OnCKReset|
CKMANAGER_FUNC_PreProcess|
CKMANAGER_FUNC_PostProcess|
CKMANAGER_FUNC_PostClearAll|
CKMANAGER_FUNC_OnCKPlay; }
//{secret}
MidiManager(CKContext *ctx);
//{secret}
~MidiManager();
//----- Midi Methodes
void ActivateNote( int note, int channel, CKBOOL state=TRUE);
CKBOOL IsNoteActive( int note, int channel );
CKERROR OpenMidiIn(int); //Try to open the midi device passed as paramter
CKERROR CloseMidiIn();
inline void AddMidiBBref(){ ++midiDeviceBBrefcount; }
inline void RemoveMidiBBref(){ --midiDeviceBBrefcount; }
public:
HMIDIIN midiDeviceHandle; // Device Handle
int midiCurrentDevice; // current used Device ID
int DesiredmidiDevice; //midi device to which the user would like to change during runtime
CKBOOL midiDeviceIsOpen; // tells whether the current Device is open or not
int midiDeviceBBrefcount; // refcount of the BBs using the midi device (to open the midi port on play only if there's BB using it)
midiMessageList listFromCallBack;
midiMessageList listForBehaviors;
#define MIDI_MAXNOTES 256
unsigned char noteState[MIDI_MAXNOTES]; // nb of channels * nb of note = 16 * 128 = 2048 bits = 256 bytes
};