You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
6.1 KiB
184 lines
6.1 KiB
/*----------------------------------------------------------------------------
|
|
*
|
|
* 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
|
|
|