/*---------------------------------------------------------------------------- * * 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 */