156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File: 456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * eas_miditypes.h 556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Contents and purpose: 756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Contains declarations for the MIDI stream parser. 856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 1056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copyright Sonic Network Inc. 2005 117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * you may not use this file except in compliance with the License. 147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * You may obtain a copy of the License at 157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * See the License for the specific language governing permissions and 227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * limitations under the License. 2356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 2456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 2556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Revision Control: 2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * $Revision: 778 $ 2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * $Date: 2007-07-23 16:45:17 -0700 (Mon, 23 Jul 2007) $ 2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef _EAS_MIDITYPES_H 3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define _EAS_MIDITYPES_H 3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_data.h" 3556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_parser.h" 3656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 3856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * S_MIDI_STREAM 3956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 4056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Maintains parser state for the MIDI stream parser 4156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 4256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 4356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 4456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_midi_stream_tag 4656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL8 byte3; /* flag indicates 3rd byte expected */ 4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL8 pending; /* flag indicates more data expected */ 4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 sysExState; /* maintains the SysEx state */ 5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 runningStatus; /* last running status received */ 5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 status; /* status byte */ 5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 d1; /* first data byte */ 5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 d2; /* second data byte */ 5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 flags; /* flags - see below for definition */ 5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef JET_INTERFACE 5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 jetData; /* JET data */ 5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_MIDI_STREAM; 5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* flags for S_MIDI_STREAM.flags */ 6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MIDI_FLAG_GM_ON 0x01 /* GM System On message received */ 6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MIDI_FLAG_FIRST_NOTE 0x02 /* first note received */ 6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* flags for S_MIDI_STREAM.jetFlags */ 6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MIDI_FLAGS_JET_MUTE 0x00000001 /* track is muted */ 6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MIDI_FLAGS_JET_CB 0x00000002 /* JET callback enabled */ 6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * S_SMF_STREAM 7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This structure contains data required to parse an SMF stream. For SMF0 files, there 7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * will be a single instance of this per file. For SMF1 files, there will be multiple instance, 7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * one for each separate stream in the file. 7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_smf_stream_tag 8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FILE_HANDLE fileHandle; /* host wrapper file handle */ 8256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 ticks; /* time of next event in stream */ 8356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 startFilePos; /* start location of track within file */ 8456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_MIDI_STREAM midiStream; /* MIDI stream state */ 8556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_SMF_STREAM; 8656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 8756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 8856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 8956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * S_SMF_DATA 9056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 9156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This structure contains the instance data required to parse an SMF stream. 9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 9656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_smf_data_tag 9756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 9856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _CHECKED_BUILD 9956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 handleCheck; /* signature check for checked build */ 10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 10156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_SMF_STREAM *streams; /* pointer to individual streams in file */ 10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_SMF_STREAM *nextStream; /* pointer to next stream with event */ 10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_SYNTH *pSynth; /* pointer to synth */ 10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FILE_HANDLE fileHandle; /* file handle */ 10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_METADATA_CB metadata; /* metadata callback */ 10656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 fileOffset; /* for embedded files */ 10756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 time; /* current time in milliseconds/256 */ 10856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 numStreams; /* actual number of streams */ 10956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 tickConv; /* current MIDI tick to msec conversion */ 11056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 ppqn; /* ticks per quarter note */ 11156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 state; /* current state EAS_STATE_XXXX */ 11256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 flags; /* flags - see definitions below */ 11356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_SMF_DATA; 11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SMF_FLAGS_CHASE_MODE 0x01 /* chase mode - skip to first note */ 11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SMF_FLAGS_HAS_TIME_SIG 0x02 /* time signature encountered at time 0 */ 11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SMF_FLAGS_HAS_TEMPO 0x04 /* tempo encountered at time 0 */ 11856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SMF_FLAGS_HAS_GM_ON 0x08 /* GM System On encountered at time 0 */ 11956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SMF_FLAGS_JET_STREAM 0x80 /* JET in use - keep strict timing */ 12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 12156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* combo flags indicate setup bar */ 12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SMF_FLAGS_SETUP_BAR (SMF_FLAGS_HAS_TIME_SIG | SMF_FLAGS_HAS_TEMPO | SMF_FLAGS_HAS_GM_ON) 12356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Interactive MIDI structure 12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 12856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_interactive_midi_tag 12956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 13056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _CHECKED_BUILD 13156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 handleCheck; /* signature check for checked build */ 13256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 13356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_SYNTH *pSynth; /* pointer to synth */ 13456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_MIDI_STREAM stream; /* stream data */ 13556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_INTERACTIVE_MIDI; 13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif /* #ifndef _EAS_MIDITYPES_H */ 13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 139