summaryrefslogtreecommitdiffstats
path: root/arm-wt-22k/lib_src/eas_miditypes.h
blob: 0b7f96ee652e07f2e720da57522b5489fc0d2892 (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 */