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