1 /*---------------------------------------------------------------------------- 2 * 3 * File: 4 * eas_miditypes.h 5 * 6 * Contents and purpose: 7 * Contains declarations for the MIDI stream parser. 8 * 9 * 10 * Copyright Sonic Network Inc. 2005 11 12 * Licensed under the Apache License, Version 2.0 (the "License"); 13 * you may not use this file except in compliance with the License. 14 * You may obtain a copy of the License at 15 * 16 * http://www.apache.org/licenses/LICENSE-2.0 17 * 18 * Unless required by applicable law or agreed to in writing, software 19 * distributed under the License is distributed on an "AS IS" BASIS, 20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 21 * See the License for the specific language governing permissions and 22 * limitations under the License. 23 * 24 *---------------------------------------------------------------------------- 25 * Revision Control: 26 * $Revision: 778 $ 27 * $Date: 2007-07-23 16:45:17 -0700 (Mon, 23 Jul 2007) $ 28 *---------------------------------------------------------------------------- 29 */ 30 31 #ifndef _EAS_MIDITYPES_H 32 #define _EAS_MIDITYPES_H 33 34 #include "eas_data.h" 35 #include "eas_parser.h" 36 37 /*---------------------------------------------------------------------------- 38 * S_MIDI_STREAM 39 * 40 * Maintains parser state for the MIDI stream parser 41 * 42 *---------------------------------------------------------------------------- 43 */ 44 45 typedef struct s_midi_stream_tag 46 { 47 EAS_BOOL8 byte3; /* flag indicates 3rd byte expected */ 48 EAS_BOOL8 pending; /* flag indicates more data expected */ 49 EAS_U8 sysExState; /* maintains the SysEx state */ 50 EAS_U8 runningStatus; /* last running status received */ 51 EAS_U8 status; /* status byte */ 52 EAS_U8 d1; /* first data byte */ 53 EAS_U8 d2; /* second data byte */ 54 EAS_U8 flags; /* flags - see below for definition */ 55 #ifdef JET_INTERFACE 56 EAS_U32 jetData; /* JET data */ 57 #endif 58 } S_MIDI_STREAM; 59 60 /* flags for S_MIDI_STREAM.flags */ 61 #define MIDI_FLAG_GM_ON 0x01 /* GM System On message received */ 62 #define MIDI_FLAG_FIRST_NOTE 0x02 /* first note received */ 63 64 /* flags for S_MIDI_STREAM.jetFlags */ 65 #define MIDI_FLAGS_JET_MUTE 0x00000001 /* track is muted */ 66 #define MIDI_FLAGS_JET_CB 0x00000002 /* JET callback enabled */ 67 68 /*---------------------------------------------------------------------------- 69 * 70 * S_SMF_STREAM 71 * 72 * This structure contains data required to parse an SMF stream. For SMF0 files, there 73 * will be a single instance of this per file. For SMF1 files, there will be multiple instance, 74 * one for each separate stream in the file. 75 * 76 *---------------------------------------------------------------------------- 77 */ 78 79 typedef struct s_smf_stream_tag 80 { 81 EAS_FILE_HANDLE fileHandle; /* host wrapper file handle */ 82 EAS_U32 ticks; /* time of next event in stream */ 83 EAS_I32 startFilePos; /* start location of track within file */ 84 S_MIDI_STREAM midiStream; /* MIDI stream state */ 85 } S_SMF_STREAM; 86 87 /*---------------------------------------------------------------------------- 88 * 89 * S_SMF_DATA 90 * 91 * This structure contains the instance data required to parse an SMF stream. 92 * 93 *---------------------------------------------------------------------------- 94 */ 95 96 typedef struct s_smf_data_tag 97 { 98 #ifdef _CHECKED_BUILD 99 EAS_U32 handleCheck; /* signature check for checked build */ 100 #endif 101 S_SMF_STREAM *streams; /* pointer to individual streams in file */ 102 S_SMF_STREAM *nextStream; /* pointer to next stream with event */ 103 S_SYNTH *pSynth; /* pointer to synth */ 104 EAS_FILE_HANDLE fileHandle; /* file handle */ 105 S_METADATA_CB metadata; /* metadata callback */ 106 EAS_I32 fileOffset; /* for embedded files */ 107 EAS_I32 time; /* current time in milliseconds/256 */ 108 EAS_U16 numStreams; /* actual number of streams */ 109 EAS_U16 tickConv; /* current MIDI tick to msec conversion */ 110 EAS_U16 ppqn; /* ticks per quarter note */ 111 EAS_U8 state; /* current state EAS_STATE_XXXX */ 112 EAS_U8 flags; /* flags - see definitions below */ 113 } S_SMF_DATA; 114 115 #define SMF_FLAGS_CHASE_MODE 0x01 /* chase mode - skip to first note */ 116 #define SMF_FLAGS_HAS_TIME_SIG 0x02 /* time signature encountered at time 0 */ 117 #define SMF_FLAGS_HAS_TEMPO 0x04 /* tempo encountered at time 0 */ 118 #define SMF_FLAGS_HAS_GM_ON 0x08 /* GM System On encountered at time 0 */ 119 #define SMF_FLAGS_JET_STREAM 0x80 /* JET in use - keep strict timing */ 120 121 /* combo flags indicate setup bar */ 122 #define SMF_FLAGS_SETUP_BAR (SMF_FLAGS_HAS_TIME_SIG | SMF_FLAGS_HAS_TEMPO | SMF_FLAGS_HAS_GM_ON) 123 124 /*---------------------------------------------------------------------------- 125 * Interactive MIDI structure 126 *---------------------------------------------------------------------------- 127 */ 128 typedef struct s_interactive_midi_tag 129 { 130 #ifdef _CHECKED_BUILD 131 EAS_U32 handleCheck; /* signature check for checked build */ 132 #endif 133 S_SYNTH *pSynth; /* pointer to synth */ 134 S_MIDI_STREAM stream; /* stream data */ 135 } S_INTERACTIVE_MIDI; 136 137 #endif /* #ifndef _EAS_MIDITYPES_H */ 138 139