summaryrefslogtreecommitdiffstats
path: root/arm-fm-22k/lib_src/eas_miditypes.h
blob: 015f08b220f0182da7eb829fd3089332d9d95279 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*----------------------------------------------------------------------------
 *
 * File:
 * eas_miditypes.h
 *
 * Contents and purpose:
 * Contains declarations for the MIDI stream parser.
 *
 *
 * Copyright Sonic Network Inc. 2005

 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *----------------------------------------------------------------------------
 * Revision Control:
 *   $Revision: 778 $
 *   $Date: 2007-07-23 16:45:17 -0700 (Mon, 23 Jul 2007) $
 *----------------------------------------------------------------------------
*/

#ifndef _EAS_MIDITYPES_H
#define _EAS_MIDITYPES_H

#include "eas_data.h"
#include "eas_parser.h"

/*----------------------------------------------------------------------------
 * S_MIDI_STREAM
 *
 * Maintains parser state for the MIDI stream parser
 *
 *----------------------------------------------------------------------------
*/

typedef struct s_midi_stream_tag
{
    EAS_BOOL8           byte3;              /* flag indicates 3rd byte expected */
    EAS_BOOL8           pending;            /* flag indicates more data expected */
    EAS_U8              sysExState;         /* maintains the SysEx state */
    EAS_U8              runningStatus;      /* last running status received */
    EAS_U8              status;             /* status byte */
    EAS_U8              d1;                 /* first data byte */
    EAS_U8              d2;                 /* second data byte */
    EAS_U8              flags;              /* flags - see below for definition */
#ifdef JET_INTERFACE
    EAS_U32             jetData;            /* JET data */
#endif
} S_MIDI_STREAM;

/* flags for S_MIDI_STREAM.flags */
#define MIDI_FLAG_GM_ON         0x01        /* GM System On message received */
#define MIDI_FLAG_FIRST_NOTE    0x02        /* first note received */

/* flags for S_MIDI_STREAM.jetFlags */
#define MIDI_FLAGS_JET_MUTE     0x00000001  /* track is muted */
#define MIDI_FLAGS_JET_CB       0x00000002  /* JET callback enabled */

/*----------------------------------------------------------------------------
 *
 * S_SMF_STREAM
 *
 * This structure contains data required to parse an SMF stream. For SMF0 files, there
 * will be a single instance of this per file. For SMF1 files, there will be multiple instance,
 * one for each separate stream in the file.
 *
 *----------------------------------------------------------------------------
*/

typedef struct s_smf_stream_tag
{
    EAS_FILE_HANDLE     fileHandle;         /* host wrapper file handle */
    EAS_U32             ticks;              /* time of next event in stream */
    EAS_I32             startFilePos;       /* start location of track within file */
    S_MIDI_STREAM       midiStream;         /* MIDI stream state */
} S_SMF_STREAM;

/*----------------------------------------------------------------------------
 *
 * S_SMF_DATA
 *
 * This structure contains the instance data required to parse an SMF stream.
 *
 *----------------------------------------------------------------------------
*/

typedef struct s_smf_data_tag
{
#ifdef _CHECKED_BUILD
    EAS_U32             handleCheck;        /* signature check for checked build */
#endif
    S_SMF_STREAM        *streams;           /* pointer to individual streams in file */
    S_SMF_STREAM        *nextStream;        /* pointer to next stream with event */
    S_SYNTH             *pSynth;            /* pointer to synth */
    EAS_FILE_HANDLE     fileHandle;         /* file handle */
    S_METADATA_CB       metadata;           /* metadata callback */
    EAS_I32             fileOffset;         /* for embedded files */
    EAS_I32             time;               /* current time in milliseconds/256 */
    EAS_U16             numStreams;         /* actual number of streams */
    EAS_U16             tickConv;           /* current MIDI tick to msec conversion */
    EAS_U16             ppqn;               /* ticks per quarter note */
    EAS_U8              state;              /* current state EAS_STATE_XXXX */
    EAS_U8              flags;              /* flags - see definitions below */
} S_SMF_DATA;

#define SMF_FLAGS_CHASE_MODE        0x01    /* chase mode - skip to first note */
#define SMF_FLAGS_HAS_TIME_SIG      0x02    /* time signature encountered at time 0 */
#define SMF_FLAGS_HAS_TEMPO         0x04    /* tempo encountered at time 0  */
#define SMF_FLAGS_HAS_GM_ON         0x08    /* GM System On encountered at time 0 */
#define SMF_FLAGS_JET_STREAM        0x80    /* JET in use - keep strict timing */

/* combo flags indicate setup bar */
#define SMF_FLAGS_SETUP_BAR (SMF_FLAGS_HAS_TIME_SIG | SMF_FLAGS_HAS_TEMPO | SMF_FLAGS_HAS_GM_ON)

/*----------------------------------------------------------------------------
 * Interactive MIDI structure
 *----------------------------------------------------------------------------
*/
typedef struct s_interactive_midi_tag
{
#ifdef _CHECKED_BUILD
    EAS_U32             handleCheck;        /* signature check for checked build */
#endif
    S_SYNTH     *pSynth;            /* pointer to synth */
    S_MIDI_STREAM       stream;             /* stream data */
} S_INTERACTIVE_MIDI;

#endif /* #ifndef _EAS_MIDITYPES_H */