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 80
#define JET_EVENT_APP_HIGH 83
#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
|