Dave Sparks | 56c99cd | 2009-08-24 17:35:45 -0700 | [diff] [blame] | 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 |
The Android Open Source Project | 7df3010 | 2009-03-03 19:30:38 -0800 | [diff] [blame] | 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. |
Dave Sparks | 56c99cd | 2009-08-24 17:35:45 -0700 | [diff] [blame] | 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 | |