|
|
/******************************************************************************
Copyright (c) 1985-1998 Microsoft Corporation
Title: mciseq.h - Multimedia Systems Media Control Interface streaming MIDI file data internal header file.
Version: 1.00
Date: 27-Apr-1990
Author: Greg Simons
------------------------------------------------------------------------------
Change log:
DATE REV DESCRIPTION ----------- ----- ----------------------------------------------------------- 27-APR-1990 GREGSI Original
*****************************************************************************/
//#define SEQDEBUG 1
#define MSEQ_PRODUCTNAME 1
#define IDS_MIDICAPTION 2
#define IDS_MIDITAB 3
#define IDDLGWARN 100
#define IDCHECK 102
/*************** Stream Stuff ***************************************/
#define NUMHDRS 2
#define BUFFSIZE 512
#ifndef cchLENGTH
#define cchLENGTH(_sz) (sizeof(_sz)/sizeof(_sz[0]))
#endif
typedef struct tag_HMSF { BYTE hours; BYTE minutes; BYTE seconds; BYTE frames; } HMSF;
typedef struct { /* All stream data for a track of an open sequence goes here */ DWORD beginning; // these are byte numbers within the open file
DWORD end; DWORD current; // byte # to start reading from for next chunk
DWORD bufferNum; // current buffer number
LPMIDISEQHDR fileHeaders[NUMHDRS]; // pointers to midi file track data headers
} TrackStreamType;
typedef struct { /* All stream data for an open sequence goes here */ WCHAR szFilename[128]; // file name here for stream thread
HMIDISEQ hSeq; // handle to the sequence
HMMIO hmmio; // MMIO handle to midi file or RMID file
LPMMIOPROC pIOProc; // Optional MMIO proc
HMIDIOUT hmidiOut; // handle to dest. midi port
UINT wPortNum; // midi port number
DWORD dwFileLength; ListHandle trackStreamListHandle; BOOL streaming; // to flag streaming process to exit or not
DWORD streamTaskHandle; // handle to streaming task
HANDLE streamThreadHandle; // OS handle to stream thread
HWND hNotifyCB; // mci client's notify cb--NULL if none
UINT wNotifyMsg; // mci message (command) that async notify's for
DWORD dwNotifyOldTo; // x for last "play foo to x notify"
// (critical for abort/supersede)
MCIDEVICEID wDeviceID; // this stream's devID for Notify callback
int fileDivType; // file division type
DWORD userDisplayType; // song pointer, smpte x, or milliseconds
BOOL bLastPaused; // if last stop action was result of "mci_pause"
} SeqStreamType, NEAR * pSeqStreamType;
extern ListHandle SeqStreamListHandle; // this is a global kept for the seq streamer
extern HINSTANCE hInstance;
// from mciseq.c
PUBLIC DWORD FAR PASCAL mciDriverEntry (MCIDEVICEID wDeviceID, UINT wMessage, DWORD_PTR dwParam1, DWORD_PTR dwParam2); PRIVATE BOOL NEAR PASCAL bAsync(UINT wMsg); PRIVATE BOOL NEAR PASCAL bMutex(UINT wNewMsg, UINT wOldMsg, DWORD wNewFlags, DWORD dwNewTo, DWORD dwOldTo); PUBLIC VOID FAR PASCAL PrepareForNotify(pSeqStreamType pStream, UINT wMessage, LPMCI_GENERIC_PARMS lpParms, DWORD dwTo); PUBLIC VOID FAR PASCAL SetupMmseqCallback(pSeqStreamType pStream, DWORD_PTR dwInstance); PUBLIC VOID FAR PASCAL Notify(pSeqStreamType pStream, UINT wStatus); PUBLIC VOID NEAR PASCAL EndStreamCycle(pSeqStreamType pStream); PUBLIC DWORD NEAR PASCAL EndFileStream(pSeqStreamType pStream); PUBLIC DWORD NEAR PASCAL msOpenStream(pSeqStreamType FAR * lppStream, LPCWSTR szName, LPMMIOPROC pIOProc); PUBLIC VOID FAR PASCAL StreamTrackReset(pSeqStreamType pStream, UINT wTrackNum); PUBLIC VOID FAR _LOADDS PASCAL mciStreamCycle(DWORD_PTR dwInst); PUBLIC VOID FAR PASCAL _LOADDS mciSeqCallback(HANDLE h, UINT wMsg, DWORD_PTR dwInstance, DWORD_PTR dw1, DWORD_PTR dw2);
// from mcicmds.c:
PUBLIC DWORD NEAR PASCAL msOpen(pSeqStreamType FAR *lppStream, MCIDEVICEID wDeviceID, DWORD dwFlags, LPMCI_OPEN_PARMS lpOpen); PUBLIC DWORD NEAR PASCAL msClose(pSeqStreamType pStream, MCIDEVICEID wDeviceID, DWORD dwFlags); PUBLIC DWORD NEAR PASCAL msPlay(pSeqStreamType pStream, MCIDEVICEID wDeviceID, DWORD dwFlags, LPMCI_PLAY_PARMS lpPlay); PUBLIC DWORD NEAR PASCAL msSeek(pSeqStreamType pStream, MCIDEVICEID wDeviceID, DWORD dwParam1, LPMCI_SEEK_PARMS lpSeek); PUBLIC DWORD NEAR PASCAL msStatus(pSeqStreamType pStream, MCIDEVICEID wDeviceID, DWORD dwFlags, LPMCI_STATUS_PARMS lpStatus); PUBLIC DWORD NEAR PASCAL msGetDevCaps(pSeqStreamType pStream, MCIDEVICEID wDeviceID, DWORD dwParam1, LPMCI_GETDEVCAPS_PARMS lpCapParms); PUBLIC DWORD NEAR PASCAL msInfo(pSeqStreamType pStream, MCIDEVICEID wDeviceID, DWORD dwFlags, LPMCI_INFO_PARMS lpInfo); PUBLIC DWORD NEAR PASCAL msSet(pSeqStreamType pStream, MCIDEVICEID wDeviceID, DWORD dwFlags, LPMCI_SEQ_SET_PARMS lpSetParms);
// from Formats.c
PUBLIC BOOL NEAR PASCAL ColonizeOutput(pSeqStreamType pStream); PUBLIC BOOL NEAR PASCAL FormatsEqual(pSeqStreamType pStream); PUBLIC DWORD NEAR PASCAL CnvtTimeToSeq(pSeqStreamType pStream, DWORD dwCurrent, MIDISEQINFO FAR * pSeqInfo); PUBLIC DWORD NEAR PASCAL CnvtTimeFromSeq(pSeqStreamType pStream, DWORD dwTicks, MIDISEQINFO FAR * pSeqInfo); PUBLIC BOOL NEAR PASCAL RangeCheck(pSeqStreamType pStream, DWORD dwValue);
/***************************************************************************
DEBUGGING SUPPORT
***************************************************************************/
#if DBG
extern void mciseqDbgOut(LPSTR lpszFormat, ...);
int mciseqDebugLevel;
#define dprintf( _x_ ) mciseqDbgOut _x_
#define dprintf1( _x_ ) if (mciseqDebugLevel >= 1) mciseqDbgOut _x_
#define dprintf2( _x_ ) if (mciseqDebugLevel >= 2) mciseqDbgOut _x_
#define dprintf3( _x_ ) if (mciseqDebugLevel >= 3) mciseqDbgOut _x_
#define dprintf4( _x_ ) if (mciseqDebugLevel >= 4) mciseqDbgOut _x_
#else
#define dprintf(x)
#define dprintf1(x)
#define dprintf2(x)
#define dprintf3(x)
#define dprintf4(x)
#endif
|