summaryrefslogtreecommitdiffstats
path: root/arm-wt-22k/lib_src/jet_data.h
blob: 717495097fb9ca26e7249c7d2a6e356a75110330 (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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/*----------------------------------------------------------------------------
 *
 * File: 
 * jet_data.h
 *
 * Contents and purpose:
 * Internal data structures and interfaces for JET
 *
 * Copyright (c) 2006 Sonic Network Inc.

 * 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: 554 $
 *   $Date: 2007-02-02 11:06:10 -0800 (Fri, 02 Feb 2007) $
 *----------------------------------------------------------------------------
*/

#ifndef _JET_DATA_H
#define _JET_DATA_H

#include "eas.h"
#include "jet.h"

/* maximum number of segments allowed in a JET file */
#ifndef JET_MAX_SEGMENTS
#define JET_MAX_SEGMENTS 			32
#endif

/* maximum number of DLS collections allowed in a JET file */
#ifndef JET_MAX_DLS_COLLECTIONS
#define JET_MAX_DLS_COLLECTIONS		4
#endif

/* maximum number of JET events in internal queue */
#ifndef JET_EVENT_QUEUE_SIZE
#define JET_EVENT_QUEUE_SIZE		32
#endif

/* maximum number of JET events in application queue */
#ifndef APP_EVENT_QUEUE_SIZE
#define APP_EVENT_QUEUE_SIZE		32
#endif

/* maximum number of active mute events */
#ifndef JET_MUTE_QUEUE_SIZE
#define JET_MUTE_QUEUE_SIZE			8
#endif

/*----------------------------------------------------------------------------
 * JET event definitions
 *----------------------------------------------------------------------------
*/
#define JET_EVENT_APP_LOW			85
#define JET_EVENT_APP_HIGH			90
#define JET_EVENT_LOW				102
#define JET_EVENT_HIGH				119
#define JET_EVENT_MARKER			102
#define JET_EVENT_TRIGGER_CLIP		103

#define JET_MARKER_LOOP_END			0

#define JET_CLIP_ACTIVE_FLAG		0x80
#define JET_CLIP_TRIGGER_FLAG		0x40
#define JET_CLIP_ID_MASK			0x3f

/*----------------------------------------------------------------------------
 * JET file definitions
 *----------------------------------------------------------------------------
*/
#define JET_TAG(a,b,c,d) (\
	( ((EAS_U32)(a) & 0xFF) << 24 ) \
	+ ( ((EAS_U32)(b) & 0xFF) << 16 ) \
	+ ( ((EAS_U32)(c) & 0xFF) <<  8 ) \
	+ ( ((EAS_U32)(d) & 0xFF)))

#define JET_VERSION 0x01000000
#define JET_HEADER_TAG JET_TAG('J','E','T',' ')
#define JET_INFO_CHUNK JET_TAG('J','I','N','F')
#define JET_SMF_CHUNK JET_TAG('J','S','M','F')
#define JET_DLS_CHUNK JET_TAG('J','D','L','S')
#define INFO_JET_COPYRIGHT JET_TAG('J','C','O','P')
#define JET_APP_DATA_CHUNK JET_TAG('J','A','P','P')

#define INFO_NUM_SMF_CHUNKS JET_TAG('S','M','F','#')
#define INFO_NUM_DLS_CHUNKS JET_TAG('D','L','S','#')
#define INFO_JET_VERSION JET_TAG('J','V','E','R')

/*----------------------------------------------------------------------------
 * S_JET_SEGMENT
 *
 * JET segment data
 *----------------------------------------------------------------------------
*/
typedef struct s_jet_segment_tag
{
	EAS_HANDLE			streamHandle;
	EAS_U32				muteFlags;
	EAS_I16				repeatCount;
	EAS_U8				userID;
	EAS_I8				transpose;
	EAS_I8				libNum;
	EAS_U8				state;
	EAS_U8				flags;
} S_JET_SEGMENT;

/* S_JET_SEGMENT.state */
typedef enum
{
	JET_STATE_CLOSED,
	JET_STATE_OPEN,
	JET_STATE_READY,
	JET_STATE_PLAYING,
	JET_STATE_PAUSED,
	JET_STATE_STOPPING
} E_JET_SEGMENT_STATE;

/* S_JEG_SEGMENT.flags */
#define JET_SEG_FLAG_MUTE_UPDATE		0x01

/*----------------------------------------------------------------------------
 * S_JET_DATA
 *
 * Main JET data structure
 *----------------------------------------------------------------------------
*/
#define SEG_QUEUE_DEPTH 3
typedef struct s_jet_data_tag
{
	EAS_FILE_HANDLE		jetFileHandle;
	S_JET_SEGMENT		segQueue[SEG_QUEUE_DEPTH];
	EAS_I32				segmentOffsets[JET_MAX_SEGMENTS];
	EAS_I32				appDataOffset;
	EAS_I32				appDataSize;
	EAS_DLSLIB_HANDLE	libHandles[JET_MAX_DLS_COLLECTIONS];
	EAS_U32				jetEventQueue[JET_EVENT_QUEUE_SIZE];
	EAS_U32				appEventQueue[APP_EVENT_QUEUE_SIZE];
	S_JET_CONFIG		config;
	EAS_U32				segmentTime;
	EAS_U8				muteQueue[JET_MUTE_QUEUE_SIZE];
	EAS_U8				numSegments;
	EAS_U8				numLibraries;
	EAS_U8				flags;
	EAS_U8				playSegment;
	EAS_U8				queueSegment;
	EAS_U8				numQueuedSegments;
	EAS_U8				jetEventQueueRead;
	EAS_U8				jetEventQueueWrite;
	EAS_U8				appEventQueueRead;
	EAS_U8				appEventQueueWrite;
} S_JET_DATA;

/* flags for S_JET_DATA.flags */
#define JET_FLAGS_PLAYING		1

#define JET_EVENT_VAL_MASK		0x0000007f	/* mask for value */
#define JET_EVENT_CTRL_MASK		0x00003f80	/* mask for controller */
#define JET_EVENT_CHAN_MASK		0x0003c000	/* mask for channel */
#define JET_EVENT_TRACK_MASK	0x00fc0000	/* mask for track number */
#define JET_EVENT_SEG_MASK		0xff000000	/* mask for segment ID */
#define JET_EVENT_CTRL_SHIFT	7			/* shift for controller number */
#define JET_EVENT_CHAN_SHIFT	14			/* shift to for MIDI channel */
#define JET_EVENT_TRACK_SHIFT	18			/* shift to get track ID to bit 0 */
#define JET_EVENT_SEG_SHIFT		24			/* shift to get segment ID to bit 0 */

/* prototype for callback function */
extern void JET_Event (EAS_DATA_HANDLE easHandle, EAS_U32 segTrack, EAS_U8 channel, EAS_U8 controller, EAS_U8 value);

/* prototype for JET render function */
extern EAS_PUBLIC EAS_RESULT JET_Process (EAS_DATA_HANDLE easHandle);

#endif