summaryrefslogtreecommitdiffstats
path: root/arm-wt-22k/lib_src/eas_sndlib.h
diff options
context:
space:
mode:
Diffstat (limited to 'arm-wt-22k/lib_src/eas_sndlib.h')
-rw-r--r--arm-wt-22k/lib_src/eas_sndlib.h406
1 files changed, 406 insertions, 0 deletions
diff --git a/arm-wt-22k/lib_src/eas_sndlib.h b/arm-wt-22k/lib_src/eas_sndlib.h
new file mode 100644
index 0000000..e05bee0
--- /dev/null
+++ b/arm-wt-22k/lib_src/eas_sndlib.h
@@ -0,0 +1,406 @@
+/*----------------------------------------------------------------------------
+ *
+ * File:
+ * eas_sndlib.h
+ *
+ * Contents and purpose:
+ * Declarations for the sound library
+ *
+ * Copyright Sonic Network Inc. 2005
+
+ * 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: 550 $
+ * $Date: 2007-02-02 09:37:03 -0800 (Fri, 02 Feb 2007) $
+ *----------------------------------------------------------------------------
+*/
+
+#ifndef _EAS_SNDLIB_H
+#define _EAS_SNDLIB_H
+
+#include "eas_types.h"
+#include "eas_synthcfg.h"
+
+#ifdef _WT_SYNTH
+#include "eas_wtengine.h"
+#endif
+
+/*----------------------------------------------------------------------------
+ * This is bit of a hack to allow us to keep the same structure
+ * declarations for the DLS parser. Normally, the data is located
+ * in read-only memory, but for DLS, we store the data in RW
+ * memory.
+ *----------------------------------------------------------------------------
+*/
+#ifndef SCNST
+#define SCNST const
+#endif
+
+/*----------------------------------------------------------------------------
+ * sample size
+ *----------------------------------------------------------------------------
+*/
+#ifdef _16_BIT_SAMPLES
+typedef EAS_I16 EAS_SAMPLE;
+#else
+typedef EAS_I8 EAS_SAMPLE;
+#endif
+
+/*----------------------------------------------------------------------------
+ * EAS Library ID - quick check for valid library and version
+ *----------------------------------------------------------------------------
+*/
+#define _EAS_LIBRARY_VERSION 0x01534145
+
+#define NUM_PROGRAMS_IN_BANK 128
+#define INVALID_REGION_INDEX 0xffff
+
+/* this bit in region index indicates that region is for secondary synth */
+#define FLAG_RGN_IDX_FM_SYNTH 0x8000
+#define FLAG_RGN_IDX_DLS_SYNTH 0x4000
+#define REGION_INDEX_MASK 0x3fff
+
+/*----------------------------------------------------------------------------
+ * Generic region data structure
+ *
+ * This must be the first element in each region structure
+ *----------------------------------------------------------------------------
+*/
+typedef struct s_region_tag
+{
+ EAS_U16 keyGroupAndFlags;
+ EAS_U8 rangeLow;
+ EAS_U8 rangeHigh;
+} S_REGION;
+
+/*
+ * Bit fields for m_nKeyGroupAndFlags
+ * Bits 0-2 are mode bits in FM synth
+ * Bits 8-11 are the key group
+ */
+#define REGION_FLAG_IS_LOOPED 0x01
+#define REGION_FLAG_USE_WAVE_GENERATOR 0x02
+#define REGION_FLAG_USE_ADPCM 0x04
+#define REGION_FLAG_ONE_SHOT 0x08
+#define REGION_FLAG_SQUARE_WAVE 0x10
+#define REGION_FLAG_OFF_CHIP 0x20
+#define REGION_FLAG_NON_SELF_EXCLUSIVE 0x40
+#define REGION_FLAG_LAST_REGION 0x8000
+
+/*----------------------------------------------------------------------------
+ * Envelope data structure
+ *----------------------------------------------------------------------------
+*/
+typedef struct s_envelope_tag
+{
+ EAS_I16 attackTime;
+ EAS_I16 decayTime;
+ EAS_I16 sustainLevel;
+ EAS_I16 releaseTime;
+} S_ENVELOPE;
+
+/*----------------------------------------------------------------------------
+ * DLS envelope data structure
+ *----------------------------------------------------------------------------
+*/
+typedef struct s_dls_envelope_tag
+{
+ EAS_I16 delayTime;
+ EAS_I16 attackTime;
+ EAS_I16 holdTime;
+ EAS_I16 decayTime;
+ EAS_I16 sustainLevel;
+ EAS_I16 releaseTime;
+ EAS_I16 velToAttack;
+ EAS_I16 keyNumToDecay;
+ EAS_I16 keyNumToHold;
+} S_DLS_ENVELOPE;
+
+/*----------------------------------------------------------------------------
+ * LFO data structure
+ *----------------------------------------------------------------------------
+*/
+typedef struct s_lfo_params_tag
+{
+ EAS_I16 lfoFreq;
+ EAS_I16 lfoDelay;
+} S_LFO_PARAMS;
+
+/*----------------------------------------------------------------------------
+ * Articulation data structure
+ *----------------------------------------------------------------------------
+*/
+typedef struct s_articulation_tag
+{
+ S_ENVELOPE eg1;
+ S_ENVELOPE eg2;
+ EAS_I16 lfoToPitch;
+ EAS_I16 lfoDelay;
+ EAS_I16 lfoFreq;
+ EAS_I16 eg2ToPitch;
+ EAS_I16 eg2ToFc;
+ EAS_I16 filterCutoff;
+ EAS_I8 lfoToGain;
+ EAS_U8 filterQ;
+ EAS_I8 pan;
+} S_ARTICULATION;
+
+/*----------------------------------------------------------------------------
+ * DLS articulation data structure
+ *----------------------------------------------------------------------------
+*/
+
+typedef struct s_dls_articulation_tag
+{
+ S_LFO_PARAMS modLFO;
+ S_LFO_PARAMS vibLFO;
+
+ S_DLS_ENVELOPE eg1;
+ S_DLS_ENVELOPE eg2;
+
+ EAS_I16 eg1ShutdownTime;
+
+ EAS_I16 filterCutoff;
+ EAS_I16 modLFOToFc;
+ EAS_I16 modLFOCC1ToFc;
+ EAS_I16 modLFOChanPressToFc;
+ EAS_I16 eg2ToFc;
+ EAS_I16 velToFc;
+ EAS_I16 keyNumToFc;
+
+ EAS_I16 modLFOToGain;
+ EAS_I16 modLFOCC1ToGain;
+ EAS_I16 modLFOChanPressToGain;
+
+ EAS_I16 tuning;
+ EAS_I16 keyNumToPitch;
+ EAS_I16 vibLFOToPitch;
+ EAS_I16 vibLFOCC1ToPitch;
+ EAS_I16 vibLFOChanPressToPitch;
+ EAS_I16 modLFOToPitch;
+ EAS_I16 modLFOCC1ToPitch;
+ EAS_I16 modLFOChanPressToPitch;
+ EAS_I16 eg2ToPitch;
+
+ /* pad to 4-byte boundary */
+ EAS_U16 pad;
+
+ EAS_I8 pan;
+ EAS_U8 filterQandFlags;
+
+#ifdef _REVERB
+ EAS_I16 reverbSend;
+ EAS_I16 cc91ToReverbSend;
+#endif
+
+#ifdef _CHORUS
+ EAS_I16 chorusSend;
+ EAS_I16 cc93ToChorusSend;
+#endif
+} S_DLS_ARTICULATION;
+
+/* flags in filterQandFlags
+ * NOTE: Q is stored in bottom 5 bits
+ */
+#define FLAG_DLS_VELOCITY_SENSITIVE 0x80
+#define FILTER_Q_MASK 0x1f
+
+/*----------------------------------------------------------------------------
+ * Wavetable region data structure
+ *----------------------------------------------------------------------------
+*/
+typedef struct s_wt_region_tag
+{
+ S_REGION region;
+ EAS_I16 tuning;
+ EAS_I16 gain;
+ EAS_U32 loopStart;
+ EAS_U32 loopEnd;
+ EAS_U16 waveIndex;
+ EAS_U16 artIndex;
+} S_WT_REGION;
+
+/*----------------------------------------------------------------------------
+ * DLS region data structure
+ *----------------------------------------------------------------------------
+*/
+typedef struct s_dls_region_tag
+{
+ S_WT_REGION wtRegion;
+ EAS_U8 velLow;
+ EAS_U8 velHigh;
+} S_DLS_REGION;
+
+/*----------------------------------------------------------------------------
+ * FM synthesizer data structures
+ *----------------------------------------------------------------------------
+*/
+typedef struct s_fm_oper_tag
+{
+ EAS_I16 tuning;
+ EAS_U8 attackDecay;
+ EAS_U8 velocityRelease;
+ EAS_U8 egKeyScale;
+ EAS_U8 sustain;
+ EAS_U8 gain;
+ EAS_U8 flags;
+} S_FM_OPER;
+
+/* defines for S_FM_OPER.m_nFlags */
+#define FM_OPER_FLAG_MONOTONE 0x01
+#define FM_OPER_FLAG_NO_VIBRATO 0x02
+#define FM_OPER_FLAG_NOISE 0x04
+#define FM_OPER_FLAG_LINEAR_VELOCITY 0x08
+
+/* NOTE: The first two structure elements are common with S_WT_REGION
+ * and we will rely on that in the voice management code and must
+ * remain there unless the voice management code is revisited.
+ */
+typedef struct s_fm_region_tag
+{
+ S_REGION region;
+ EAS_U8 vibTrem;
+ EAS_U8 lfoFreqDelay;
+ EAS_U8 feedback;
+ EAS_I8 pan;
+ S_FM_OPER oper[4];
+} S_FM_REGION;
+
+/*----------------------------------------------------------------------------
+ * Common data structures
+ *----------------------------------------------------------------------------
+*/
+
+/*----------------------------------------------------------------------------
+ * Program data structure
+ * Used for individual programs not stored as a complete bank.
+ *----------------------------------------------------------------------------
+*/
+typedef struct s_program_tag
+{
+ EAS_U32 locale;
+ EAS_U16 regionIndex;
+} S_PROGRAM;
+
+/*----------------------------------------------------------------------------
+ * Bank data structure
+ *
+ * A bank always consists of 128 programs. If a bank is less than 128
+ * programs, it should be stored as a spare matrix in the pPrograms
+ * array.
+ *
+ * bankNum: MSB/LSB of MIDI bank select controller
+ * regionIndex: Index of first region in program
+ *----------------------------------------------------------------------------
+*/
+typedef struct s_bank_tag
+{
+ EAS_U16 locale;
+ EAS_U16 regionIndex[NUM_PROGRAMS_IN_BANK];
+} S_BANK;
+
+
+/* defines for libFormat field
+ * bits 0-17 are the sample rate
+ * bit 18 is true if wavetable is present
+ * bit 19 is true if FM is present
+ * bit 20 is true if filter is enabled
+ * bit 21 is sample depth (0 = 8-bits, 1 = 16-bits)
+ * bits 22-31 are reserved
+ */
+#define LIBFORMAT_SAMPLE_RATE_MASK 0x0003ffff
+#define LIB_FORMAT_TYPE_MASK 0x000c0000
+#define LIB_FORMAT_WAVETABLE 0x00000000
+#define LIB_FORMAT_FM 0x00040000
+#define LIB_FORMAT_HYBRID 0x00080000
+#define LIB_FORMAT_FILTER_ENABLED 0x00100000
+#define LIB_FORMAT_16_BIT_SAMPLES 0x00200000
+
+#ifdef DLS_SYNTHESIZER
+/*----------------------------------------------------------------------------
+ * DLS data structure
+ *
+ * pDLSPrograms pointer to array of DLS programs
+ * pDLSRegions pointer to array of DLS regions
+ * pDLSArticulations pointer to array of DLS articulations
+ * pSampleLen pointer to array of sample lengths
+ * ppSamples pointer to array of sample pointers
+ * numDLSPrograms number of DLS programs
+ * numDLSRegions number of DLS regions
+ * numDLSArticulations number of DLS articulations
+ * numDLSSamples number of DLS samples
+ *----------------------------------------------------------------------------
+*/
+typedef struct s_eas_dls_tag
+{
+ S_PROGRAM *pDLSPrograms;
+ S_DLS_REGION *pDLSRegions;
+ S_DLS_ARTICULATION *pDLSArticulations;
+ EAS_U32 *pDLSSampleLen;
+ EAS_U32 *pDLSSampleOffsets;
+ EAS_SAMPLE *pDLSSamples;
+ EAS_U16 numDLSPrograms;
+ EAS_U16 numDLSRegions;
+ EAS_U16 numDLSArticulations;
+ EAS_U16 numDLSSamples;
+ EAS_U8 refCount;
+} S_DLS;
+#endif
+
+/*----------------------------------------------------------------------------
+ * Sound library data structure
+ *
+ * pBanks pointer to array of banks
+ * pPrograms pointer to array of programs
+ * pWTRegions pointer to array of wavetable regions
+ * pFMRegions pointer to array of FM regions
+ * pArticulations pointer to array of articulations
+ * pSampleLen pointer to array of sample lengths
+ * ppSamples pointer to array of sample pointers
+ * numBanks number of banks
+ * numPrograms number of individual program
+ * numRegions number of regions
+ * numArticulations number of articulations
+ * numSamples number of samples
+ *----------------------------------------------------------------------------
+*/
+typedef struct s_eas_sndlib_tag
+{
+ SCNST EAS_U32 identifier;
+ SCNST EAS_U32 libAttr;
+
+ SCNST S_BANK *pBanks;
+ SCNST S_PROGRAM *pPrograms;
+
+ SCNST S_WT_REGION *pWTRegions;
+ SCNST S_ARTICULATION *pArticulations;
+ SCNST EAS_U32 *pSampleLen;
+ SCNST EAS_U32 *pSampleOffsets;
+ SCNST EAS_SAMPLE *pSamples;
+
+ SCNST S_FM_REGION *pFMRegions;
+
+ SCNST EAS_U16 numBanks;
+ SCNST EAS_U16 numPrograms;
+
+ SCNST EAS_U16 numWTRegions;
+ SCNST EAS_U16 numArticulations;
+ SCNST EAS_U16 numSamples;
+
+ SCNST EAS_U16 numFMRegions;
+} S_EAS;
+
+#endif
+