/* | |
dls.h | |
Description: | |
Interface defines and structures for the Instrument Collection Form | |
RIFF DLS. | |
Written by Sonic Foundry 1996. Released for public use. | |
*/ | |
#ifndef _INC_DLS | |
#define _INC_DLS | |
/* | |
Layout of an instrument collection: | |
RIFF [] 'DLS ' [colh,INSTLIST,WAVEPOOL,INFOLIST] | |
INSTLIST | |
LIST [] 'lins' | |
LIST [] 'ins ' [insh,RGNLIST,ARTLIST,INFOLIST] | |
LIST [] 'ins ' [insh,RGNLIST,ARTLIST,INFOLIST] | |
LIST [] 'ins ' [insh,RGNLIST,ARTLIST,INFOLIST] | |
RGNLIST | |
LIST [] 'lrgn' | |
LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST] | |
LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST] | |
LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST] | |
ARTLIST | |
LIST [] 'lart' | |
'art1' level 1 Articulation connection graph | |
'art2' level 2 Articulation connection graph | |
'3rd1' Possible 3rd party articulation structure 1 | |
'3rd2' Possible 3rd party articulation structure 2 .... and so on | |
WAVEPOOL | |
ptbl [] [pool table] | |
LIST [] 'wvpl' | |
[path], | |
[path], | |
LIST [] 'wave',RIFFWAVE | |
LIST [] 'wave',RIFFWAVE | |
LIST [] 'wave',RIFFWAVE | |
LIST [] 'wave',RIFFWAVE | |
LIST [] 'wave',RIFFWAVE | |
INFOLIST | |
LIST [] 'INFO' | |
'icmt' 'One of those crazy comments.' | |
'icop' 'Copyright (C) 1996 Sonic Foundry' | |
*/ | |
/* | |
FOURCC's used in the DLS file | |
*/ | |
/* shree */ | |
//#define FAR | |
/* shree | |
#define FOURCC_DLS mmioFOURCC('D','L','S',' ') | |
#define FOURCC_COLH mmioFOURCC('c','o','l','h') | |
#define FOURCC_WVPL mmioFOURCC('w','v','p','l') | |
#define FOURCC_PTBL mmioFOURCC('p','t','b','l') | |
#define FOURCC_PATH mmioFOURCC('p','a','t','h') | |
#define FOURCC_wave mmioFOURCC('w','a','v','e') | |
#define FOURCC_LINS mmioFOURCC('l','i','n','s') | |
#define FOURCC_INS mmioFOURCC('i','n','s',' ') | |
#define FOURCC_INSH mmioFOURCC('i','n','s','h') | |
#define FOURCC_LRGN mmioFOURCC('l','r','g','n') | |
#define FOURCC_RGN mmioFOURCC('r','g','n',' ') | |
#define FOURCC_RGNH mmioFOURCC('r','g','n','h') | |
#define FOURCC_LART mmioFOURCC('l','a','r','t') | |
#define FOURCC_ART1 mmioFOURCC('a','r','t','1') | |
#define FOURCC_WLNK mmioFOURCC('w','l','n','k') | |
#define FOURCC_WSMP mmioFOURCC('w','s','m','p') | |
#define FOURCC_VERS mmioFOURCC('v','e','r','s') | |
*/ | |
/* | |
Articulation connection graph definitions | |
*/ | |
/* Generic Sources */ | |
#define CONN_SRC_NONE 0x0000 | |
#define CONN_SRC_LFO 0x0001 | |
#define CONN_SRC_KEYONVELOCITY 0x0002 | |
#define CONN_SRC_KEYNUMBER 0x0003 | |
#define CONN_SRC_EG1 0x0004 | |
#define CONN_SRC_EG2 0x0005 | |
#define CONN_SRC_PITCHWHEEL 0x0006 | |
/* Midi Controllers 0-127 */ | |
#define CONN_SRC_CC1 0x0081 | |
#define CONN_SRC_CC7 0x0087 | |
#define CONN_SRC_CC10 0x008a | |
#define CONN_SRC_CC11 0x008b | |
/* Registered Parameter Numbers */ | |
#define CONN_SRC_RPN0 0x0100 | |
#define CONN_SRC_RPN1 0x0101 | |
#define CONN_SRC_RPN2 0x0102 | |
/* Generic Destinations */ | |
#define CONN_DST_NONE 0x0000 | |
#define CONN_DST_ATTENUATION 0x0001 | |
#define CONN_DST_RESERVED 0x0002 | |
#define CONN_DST_PITCH 0x0003 | |
#define CONN_DST_PAN 0x0004 | |
/* LFO Destinations */ | |
#define CONN_DST_LFO_FREQUENCY 0x0104 | |
#define CONN_DST_LFO_STARTDELAY 0x0105 | |
/* EG1 Destinations */ | |
#define CONN_DST_EG1_ATTACKTIME 0x0206 | |
#define CONN_DST_EG1_DECAYTIME 0x0207 | |
#define CONN_DST_EG1_RESERVED 0x0208 | |
#define CONN_DST_EG1_RELEASETIME 0x0209 | |
#define CONN_DST_EG1_SUSTAINLEVEL 0x020a | |
/* EG2 Destinations */ | |
#define CONN_DST_EG2_ATTACKTIME 0x030a | |
#define CONN_DST_EG2_DECAYTIME 0x030b | |
#define CONN_DST_EG2_RESERVED 0x030c | |
#define CONN_DST_EG2_RELEASETIME 0x030d | |
#define CONN_DST_EG2_SUSTAINLEVEL 0x030e | |
#define CONN_TRN_NONE 0x0000 | |
#define CONN_TRN_CONCAVE 0x0001 | |
typedef struct _DLSVERSION { | |
DWORD dwVersionMS; | |
DWORD dwVersionLS; | |
}DLSVERSION, FAR *LPDLSVERSION; | |
typedef struct _CONNECTION { | |
USHORT usSource; | |
USHORT usControl; | |
USHORT usDestination; | |
USHORT usTransform; | |
LONG lScale; | |
}CONNECTION, FAR *LPCONNECTION; | |
/* Level 1 Articulation Data */ | |
typedef struct _CONNECTIONLIST { | |
ULONG cbSize; /* size of the connection list structure */ | |
ULONG cConnections; /* count of connections in the list */ | |
} CONNECTIONLIST, FAR *LPCONNECTIONLIST; | |
/* | |
Generic type defines for regions and instruments | |
*/ | |
typedef struct _RGNRANGE { | |
USHORT usLow; | |
USHORT usHigh; | |
}RGNRANGE, FAR * LPRGNRANGE; | |
#define F_INSTRUMENT_DRUMS 0x80000000 | |
typedef struct _MIDILOCALE { | |
ULONG ulBank; | |
ULONG ulInstrument; | |
}MIDILOCALE, FAR *LPMIDILOCALE; | |
/* | |
Header structures found in an DLS file for collection, instruments, and | |
regions. | |
*/ | |
#define F_RGN_OPTION_SELFNONEXCLUSIVE 0x0001 | |
typedef struct _RGNHEADER { | |
RGNRANGE RangeKey; /* Key range */ | |
RGNRANGE RangeVelocity; /* Velocity Range */ | |
USHORT fusOptions; /* Synthesis options for this range */ | |
USHORT usKeyGroup; /* Key grouping for non simultaneous play | |
0 = no group, 1 up is group | |
for Level 1 only groups 1-15 are allowed */ | |
}RGNHEADER, FAR *LPRGNHEADER; | |
typedef struct _INSTHEADER { | |
ULONG cRegions; /* Count of regions in this instrument */ | |
MIDILOCALE Locale; /* Intended MIDI locale of this instrument */ | |
}INSTHEADER, FAR *LPINSTHEADER; | |
typedef struct _DLSHEADER { | |
ULONG cInstruments; /* Count of instruments in the collection */ | |
}DLSHEADER, FAR *LPDLSHEADER; | |
/* | |
definitions for the Wave link structure | |
*/ | |
/***** For level 1 only WAVELINK_CHANNEL_MONO is valid **** | |
ulChannel allows for up to 32 channels of audio with each bit position | |
specifiying a channel of playback */ | |
#define WAVELINK_CHANNEL_LEFT 0x0001 | |
#define WAVELINK_CHANNEL_RIGHT 0x0002 | |
#define F_WAVELINK_PHASE_MASTER 0x0001 | |
typedef struct _WAVELINK { /* any paths or links are stored right after struct */ | |
USHORT fusOptions; /* options flags for this wave */ | |
USHORT usPhaseGroup; /* Phase grouping for locking channels */ | |
ULONG ulChannel; /* channel placement */ | |
ULONG ulTableIndex; /* index into the wave pool table, 0 based */ | |
}WAVELINK, FAR *LPWAVELINK; | |
#define POOL_CUE_NULL 0xffffffff | |
typedef struct _POOLCUE { | |
// ULONG ulEntryIndex; /* Index entry in the list */ | |
ULONG ulOffset; /* Offset to the entry in the list */ | |
}POOLCUE, FAR *LPPOOLCUE; | |
typedef struct _POOLTABLE { | |
ULONG cbSize; /* size of the pool table structure */ | |
ULONG cCues; /* count of cues in the list */ | |
} POOLTABLE, FAR *LPPOOLTABLE; | |
/* | |
Structures for the "wsmp" chunk | |
*/ | |
#define F_WSMP_NO_TRUNCATION 0x0001 | |
#define F_WSMP_NO_COMPRESSION 0x0002 | |
typedef struct _rwsmp { | |
ULONG cbSize; | |
USHORT usUnityNote; /* MIDI Unity Playback Note */ | |
SHORT sFineTune; /* Fine Tune in log tuning */ | |
LONG lAttenuation; /* Overall Attenuation to be applied to data */ | |
ULONG fulOptions; /* Flag options */ | |
ULONG cSampleLoops; /* Count of Sample loops, 0 loops is one shot */ | |
} WSMPL, FAR *LPWSMPL; | |
/* This loop type is a normal forward playing loop which is continually | |
played until the envelope reaches an off threshold in the release | |
portion of the volume envelope */ | |
#define WLOOP_TYPE_FORWARD 0 | |
typedef struct _rloop { | |
ULONG cbSize; | |
ULONG ulType; /* Loop Type */ | |
ULONG ulStart; /* Start of loop in samples */ | |
ULONG ulLength; /* Length of loop in samples */ | |
} WLOOP, FAR *LPWLOOP; | |
#endif /* _INC_DLS */ |