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