summaryrefslogtreecommitdiffstats
path: root/arm-wt-22k/lib_src/jet_data.h
blob: 6bd72e024b25734ea64886efeb54a9636a0118f9 (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           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