diff decoders/timidity/dls1.h @ 455:cbc2a4ffeeec

* Added support for loading DLS format instruments: Timidity_LoadDLS(), Timidity_FreeDLS(), Timidity_LoadDLSSong() * Added Timidity_Init_NoConfig()
author hercules
date Fri, 26 Sep 2003 20:51:58 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/decoders/timidity/dls1.h	Fri Sep 26 20:51:58 2003 +0000
@@ -0,0 +1,266 @@
+/*==========================================================================;
+//
+//  dls1.h
+//
+//
+//  Description:
+//
+//  Interface defines and structures for the Instrument Collection Form
+//  RIFF DLS.
+//
+//
+//  Written by Sonic Foundry 1996.  Released for public use.
+//
+//=========================================================================*/
+
+#ifndef _INC_DLS1
+#define _INC_DLS1
+
+/*//////////////////////////////////////////////////////////////////////////
+//
+//
+// Layout of an instrument collection:
+//
+//
+// RIFF [] 'DLS ' [dlid,colh,INSTLIST,WAVEPOOL,INFOLIST]
+//
+// INSTLIST
+// LIST [] 'lins'
+//               LIST [] 'ins ' [dlid,insh,RGNLIST,ARTLIST,INFOLIST]
+//               LIST [] 'ins ' [dlid,insh,RGNLIST,ARTLIST,INFOLIST]
+//               LIST [] 'ins ' [dlid,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' [dlid,RIFFWAVE]
+//               LIST [] 'wave' [dlid,RIFFWAVE]
+//               LIST [] 'wave' [dlid,RIFFWAVE]
+//               LIST [] 'wave' [dlid,RIFFWAVE]
+//               LIST [] 'wave' [dlid,RIFFWAVE]
+//
+// INFOLIST
+// LIST [] 'INFO' 
+//               'icmt' 'One of those crazy comments.'
+//               'icop' 'Copyright (C) 1996 Sonic Foundry'
+//
+/////////////////////////////////////////////////////////////////////////*/
+
+
+/*/////////////////////////////////////////////////////////////////////////
+// FOURCC's used in the DLS file
+/////////////////////////////////////////////////////////////////////////*/
+
+#define FOURCC_DLS   mmioFOURCC('D','L','S',' ')
+#define FOURCC_DLID  mmioFOURCC('d','l','i','d')
+#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
+
+/* Generic Destinations */
+#define CONN_DST_NONE              0x0000
+#define CONN_DST_ATTENUATION       0x0001
+#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_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_RELEASETIME   0x030d
+#define CONN_DST_EG2_SUSTAINLEVEL  0x030e
+
+#define CONN_TRN_NONE              0x0000
+#define CONN_TRN_CONCAVE           0x0001
+
+typedef struct _DLSID {
+  ULONG    ulData1;
+  USHORT   usData2;
+  USHORT   usData3;
+  BYTE     abData4[8];
+} DLSID, FAR *LPDLSID;
+
+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    0x0001l
+#define WAVELINK_CHANNEL_RIGHT   0x0002l
+
+#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  0xffffffffl
+
+typedef struct _POOLCUE { 
+  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     0x0001l
+#define F_WSMP_NO_COMPRESSION    0x0002l
+
+
+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_DLS1 */