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