/*---------------------------------------------------------------------------- | |
* | |
* File: | |
* eas_miditypes.h | |
* | |
* Contents and purpose: | |
* Contains declarations for the MIDI stream parser. | |
* | |
* | |
* Copyright Sonic Network Inc. 2005 | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
* | |
*---------------------------------------------------------------------------- | |
* Revision Control: | |
* $Revision: 778 $ | |
* $Date: 2007-07-23 16:45:17 -0700 (Mon, 23 Jul 2007) $ | |
*---------------------------------------------------------------------------- | |
*/ | |
#ifndef _EAS_MIDITYPES_H | |
#define _EAS_MIDITYPES_H | |
#include "eas_data.h" | |
#include "eas_parser.h" | |
/*---------------------------------------------------------------------------- | |
* S_MIDI_STREAM | |
* | |
* Maintains parser state for the MIDI stream parser | |
* | |
*---------------------------------------------------------------------------- | |
*/ | |
typedef struct s_midi_stream_tag | |
{ | |
EAS_BOOL8 byte3; /* flag indicates 3rd byte expected */ | |
EAS_BOOL8 pending; /* flag indicates more data expected */ | |
EAS_U8 sysExState; /* maintains the SysEx state */ | |
EAS_U8 runningStatus; /* last running status received */ | |
EAS_U8 status; /* status byte */ | |
EAS_U8 d1; /* first data byte */ | |
EAS_U8 d2; /* second data byte */ | |
EAS_U8 flags; /* flags - see below for definition */ | |
#ifdef JET_INTERFACE | |
EAS_U32 jetData; /* JET data */ | |
#endif | |
} S_MIDI_STREAM; | |
/* flags for S_MIDI_STREAM.flags */ | |
#define MIDI_FLAG_GM_ON 0x01 /* GM System On message received */ | |
#define MIDI_FLAG_FIRST_NOTE 0x02 /* first note received */ | |
/* flags for S_MIDI_STREAM.jetFlags */ | |
#define MIDI_FLAGS_JET_MUTE 0x00000001 /* track is muted */ | |
#define MIDI_FLAGS_JET_CB 0x00000002 /* JET callback enabled */ | |
/*---------------------------------------------------------------------------- | |
* | |
* S_SMF_STREAM | |
* | |
* This structure contains data required to parse an SMF stream. For SMF0 files, there | |
* will be a single instance of this per file. For SMF1 files, there will be multiple instance, | |
* one for each separate stream in the file. | |
* | |
*---------------------------------------------------------------------------- | |
*/ | |
typedef struct s_smf_stream_tag | |
{ | |
EAS_FILE_HANDLE fileHandle; /* host wrapper file handle */ | |
EAS_U32 ticks; /* time of next event in stream */ | |
EAS_I32 startFilePos; /* start location of track within file */ | |
S_MIDI_STREAM midiStream; /* MIDI stream state */ | |
} S_SMF_STREAM; | |
/*---------------------------------------------------------------------------- | |
* | |
* S_SMF_DATA | |
* | |
* This structure contains the instance data required to parse an SMF stream. | |
* | |
*---------------------------------------------------------------------------- | |
*/ | |
typedef struct s_smf_data_tag | |
{ | |
#ifdef _CHECKED_BUILD | |
EAS_U32 handleCheck; /* signature check for checked build */ | |
#endif | |
S_SMF_STREAM *streams; /* pointer to individual streams in file */ | |
S_SMF_STREAM *nextStream; /* pointer to next stream with event */ | |
S_SYNTH *pSynth; /* pointer to synth */ | |
EAS_FILE_HANDLE fileHandle; /* file handle */ | |
S_METADATA_CB metadata; /* metadata callback */ | |
EAS_I32 fileOffset; /* for embedded files */ | |
EAS_I32 time; /* current time in milliseconds/256 */ | |
EAS_U16 numStreams; /* actual number of streams */ | |
EAS_U16 tickConv; /* current MIDI tick to msec conversion */ | |
EAS_U16 ppqn; /* ticks per quarter note */ | |
EAS_U8 state; /* current state EAS_STATE_XXXX */ | |
EAS_U8 flags; /* flags - see definitions below */ | |
} S_SMF_DATA; | |
#define SMF_FLAGS_CHASE_MODE 0x01 /* chase mode - skip to first note */ | |
#define SMF_FLAGS_HAS_TIME_SIG 0x02 /* time signature encountered at time 0 */ | |
#define SMF_FLAGS_HAS_TEMPO 0x04 /* tempo encountered at time 0 */ | |
#define SMF_FLAGS_HAS_GM_ON 0x08 /* GM System On encountered at time 0 */ | |
#define SMF_FLAGS_JET_STREAM 0x80 /* JET in use - keep strict timing */ | |
/* combo flags indicate setup bar */ | |
#define SMF_FLAGS_SETUP_BAR (SMF_FLAGS_HAS_TIME_SIG | SMF_FLAGS_HAS_TEMPO | SMF_FLAGS_HAS_GM_ON) | |
/*---------------------------------------------------------------------------- | |
* Interactive MIDI structure | |
*---------------------------------------------------------------------------- | |
*/ | |
typedef struct s_interactive_midi_tag | |
{ | |
#ifdef _CHECKED_BUILD | |
EAS_U32 handleCheck; /* signature check for checked build */ | |
#endif | |
S_SYNTH *pSynth; /* pointer to synth */ | |
S_MIDI_STREAM stream; /* stream data */ | |
} S_INTERACTIVE_MIDI; | |
#endif /* #ifndef _EAS_MIDITYPES_H */ | |