156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File: 456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * eas_sndlib.h 556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Contents and purpose: 756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Declarations for the sound library 856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copyright Sonic Network Inc. 2005 107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * you may not use this file except in compliance with the License. 137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * You may obtain a copy of the License at 147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * See the License for the specific language governing permissions and 217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * limitations under the License. 2256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 2356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 2456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Revision Control: 2556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * $Revision: 550 $ 2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * $Date: 2007-02-02 09:37:03 -0800 (Fri, 02 Feb 2007) $ 2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef _EAS_SNDLIB_H 3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define _EAS_SNDLIB_H 3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_types.h" 3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_synthcfg.h" 3556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _WT_SYNTH 3756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_wtengine.h" 3856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 3956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 4056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 4156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This is bit of a hack to allow us to keep the same structure 4256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * declarations for the DLS parser. Normally, the data is located 4356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * in read-only memory, but for DLS, we store the data in RW 4456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * memory. 4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 4656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef SCNST 4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SCNST const 4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * sample size 5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _16_BIT_SAMPLES 5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef EAS_I16 EAS_SAMPLE; 5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef EAS_I8 EAS_SAMPLE; 5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS Library ID - quick check for valid library and version 6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define _EAS_LIBRARY_VERSION 0x01534145 6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_PROGRAMS_IN_BANK 128 6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define INVALID_REGION_INDEX 0xffff 6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* this bit in region index indicates that region is for secondary synth */ 7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define FLAG_RGN_IDX_FM_SYNTH 0x8000 7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define FLAG_RGN_IDX_DLS_SYNTH 0x4000 7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define REGION_INDEX_MASK 0x3fff 7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Generic region data structure 7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This must be the first element in each region structure 7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_region_tag 8256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 8356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 keyGroupAndFlags; 8456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 rangeLow; 8556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 rangeHigh; 8656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_REGION; 8756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 8856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* 8956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Bit fields for m_nKeyGroupAndFlags 9056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Bits 0-2 are mode bits in FM synth 9156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Bits 8-11 are the key group 9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define REGION_FLAG_IS_LOOPED 0x01 9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define REGION_FLAG_USE_WAVE_GENERATOR 0x02 9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define REGION_FLAG_USE_ADPCM 0x04 9656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define REGION_FLAG_ONE_SHOT 0x08 9756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define REGION_FLAG_SQUARE_WAVE 0x10 9856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define REGION_FLAG_OFF_CHIP 0x20 9956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define REGION_FLAG_NON_SELF_EXCLUSIVE 0x40 10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define REGION_FLAG_LAST_REGION 0x8000 10156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Envelope data structure 10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 10656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_envelope_tag 10756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 10856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 attackTime; 10956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 decayTime; 11056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 sustainLevel; 11156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 releaseTime; 11256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_ENVELOPE; 11356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * DLS envelope data structure 11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 11856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_dls_envelope_tag 11956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 delayTime; 12156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 attackTime; 12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 holdTime; 12356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 decayTime; 12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 sustainLevel; 12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 releaseTime; 12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 velToAttack; 12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 keyNumToDecay; 12856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 keyNumToHold; 12956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_DLS_ENVELOPE; 13056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 13156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 13256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * LFO data structure 13356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 13456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 13556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_lfo_params_tag 13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 lfoFreq; 13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 lfoDelay; 13956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_LFO_PARAMS; 14056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 14156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 14256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Articulation data structure 14356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 14456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 14556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_articulation_tag 14656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 14756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_ENVELOPE eg1; 14856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_ENVELOPE eg2; 14956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 lfoToPitch; 15056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 lfoDelay; 15156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 lfoFreq; 15256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 eg2ToPitch; 15356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 eg2ToFc; 15456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 filterCutoff; 15556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I8 lfoToGain; 15656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 filterQ; 15756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I8 pan; 15856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_ARTICULATION; 15956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 16156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * DLS articulation data structure 16256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_dls_articulation_tag 16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_LFO_PARAMS modLFO; 16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_LFO_PARAMS vibLFO; 16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_DLS_ENVELOPE eg1; 17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_DLS_ENVELOPE eg2; 17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 eg1ShutdownTime; 17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 filterCutoff; 17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 modLFOToFc; 17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 modLFOCC1ToFc; 17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 modLFOChanPressToFc; 17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 eg2ToFc; 18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 velToFc; 18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 keyNumToFc; 18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 modLFOToGain; 18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 modLFOCC1ToGain; 18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 modLFOChanPressToGain; 18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 tuning; 18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 keyNumToPitch; 18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 vibLFOToPitch; 19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 vibLFOCC1ToPitch; 19156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 vibLFOChanPressToPitch; 19256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 modLFOToPitch; 19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 modLFOCC1ToPitch; 19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 modLFOChanPressToPitch; 19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 eg2ToPitch; 19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* pad to 4-byte boundary */ 19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 pad; 19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I8 pan; 20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 filterQandFlags; 20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _REVERB 20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 reverbSend; 20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 cc91ToReverbSend; 20656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 20756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 20856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _CHORUS 20956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 chorusSend; 21056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 cc93ToChorusSend; 21156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 21256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_DLS_ARTICULATION; 21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 21456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* flags in filterQandFlags 21556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * NOTE: Q is stored in bottom 5 bits 21656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 21756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define FLAG_DLS_VELOCITY_SENSITIVE 0x80 21856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define FILTER_Q_MASK 0x1f 21956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 22056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 22156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Wavetable region data structure 22256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 22356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 22456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_wt_region_tag 22556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 22656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_REGION region; 22756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 tuning; 22856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 gain; 22956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 loopStart; 23056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 loopEnd; 23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 waveIndex; 23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 artIndex; 23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_WT_REGION; 23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * DLS region data structure 23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_dls_region_tag 24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_WT_REGION wtRegion; 24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 velLow; 24356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 velHigh; 24456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_DLS_REGION; 24556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 24656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 24756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * FM synthesizer data structures 24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_fm_oper_tag 25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 25256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 tuning; 25356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 attackDecay; 25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 velocityRelease; 25556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 egKeyScale; 25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 sustain; 25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 gain; 25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 flags; 25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_FM_OPER; 26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* defines for S_FM_OPER.m_nFlags */ 26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define FM_OPER_FLAG_MONOTONE 0x01 26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define FM_OPER_FLAG_NO_VIBRATO 0x02 26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define FM_OPER_FLAG_NOISE 0x04 26556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define FM_OPER_FLAG_LINEAR_VELOCITY 0x08 26656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 26756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* NOTE: The first two structure elements are common with S_WT_REGION 26856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * and we will rely on that in the voice management code and must 26956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * remain there unless the voice management code is revisited. 27056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 27156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_fm_region_tag 27256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 27356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_REGION region; 27456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 vibTrem; 27556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 lfoFreqDelay; 27656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 feedback; 27756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I8 pan; 27856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FM_OPER oper[4]; 27956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_FM_REGION; 28056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Common data structures 28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 28556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 28656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 28756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Program data structure 28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Used for individual programs not stored as a complete bank. 28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_program_tag 29256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 29356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 locale; 29456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 regionIndex; 29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_PROGRAM; 29656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 29756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 29856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Bank data structure 29956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 30056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * A bank always consists of 128 programs. If a bank is less than 128 30156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * programs, it should be stored as a spare matrix in the pPrograms 30256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * array. 30356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 30456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * bankNum: MSB/LSB of MIDI bank select controller 30556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * regionIndex: Index of first region in program 30656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 30756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 30856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_bank_tag 30956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 31056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 locale; 31156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 regionIndex[NUM_PROGRAMS_IN_BANK]; 31256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_BANK; 31356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 31456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 31556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* defines for libFormat field 31656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * bits 0-17 are the sample rate 31756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * bit 18 is true if wavetable is present 31856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * bit 19 is true if FM is present 31956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * bit 20 is true if filter is enabled 32056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * bit 21 is sample depth (0 = 8-bits, 1 = 16-bits) 32156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * bits 22-31 are reserved 32256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 32356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define LIBFORMAT_SAMPLE_RATE_MASK 0x0003ffff 32456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define LIB_FORMAT_TYPE_MASK 0x000c0000 32556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define LIB_FORMAT_WAVETABLE 0x00000000 32656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define LIB_FORMAT_FM 0x00040000 32756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define LIB_FORMAT_HYBRID 0x00080000 32856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define LIB_FORMAT_FILTER_ENABLED 0x00100000 32956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define LIB_FORMAT_16_BIT_SAMPLES 0x00200000 33056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 33156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DLS_SYNTHESIZER 33256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 33356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * DLS data structure 33456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 33556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pDLSPrograms pointer to array of DLS programs 33656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pDLSRegions pointer to array of DLS regions 33756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pDLSArticulations pointer to array of DLS articulations 33856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pSampleLen pointer to array of sample lengths 33956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * ppSamples pointer to array of sample pointers 34056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * numDLSPrograms number of DLS programs 34156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * numDLSRegions number of DLS regions 34256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * numDLSArticulations number of DLS articulations 34356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * numDLSSamples number of DLS samples 34456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 34556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 34656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_eas_dls_tag 34756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 34856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_PROGRAM *pDLSPrograms; 34956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_DLS_REGION *pDLSRegions; 35056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_DLS_ARTICULATION *pDLSArticulations; 35156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 *pDLSSampleLen; 35256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 *pDLSSampleOffsets; 35356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_SAMPLE *pDLSSamples; 35456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 numDLSPrograms; 35556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 numDLSRegions; 35656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 numDLSArticulations; 35756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 numDLSSamples; 35856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 refCount; 35956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_DLS; 36056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 36156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 36256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 36356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sound library data structure 36456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 36556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pBanks pointer to array of banks 36656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pPrograms pointer to array of programs 36756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pWTRegions pointer to array of wavetable regions 36856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pFMRegions pointer to array of FM regions 36956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pArticulations pointer to array of articulations 37056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pSampleLen pointer to array of sample lengths 37156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * ppSamples pointer to array of sample pointers 37256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * numBanks number of banks 37356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * numPrograms number of individual program 37456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * numRegions number of regions 37556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * numArticulations number of articulations 37656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * numSamples number of samples 37756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 37856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 37956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_eas_sndlib_tag 38056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 38156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST EAS_U32 identifier; 38256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST EAS_U32 libAttr; 38356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 38456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST S_BANK *pBanks; 38556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST S_PROGRAM *pPrograms; 38656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 38756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST S_WT_REGION *pWTRegions; 38856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST S_ARTICULATION *pArticulations; 38956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST EAS_U32 *pSampleLen; 39056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST EAS_U32 *pSampleOffsets; 39156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST EAS_SAMPLE *pSamples; 39256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 39356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST S_FM_REGION *pFMRegions; 39456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 39556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST EAS_U16 numBanks; 39656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST EAS_U16 numPrograms; 39756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 39856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST EAS_U16 numWTRegions; 39956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST EAS_U16 numArticulations; 40056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST EAS_U16 numSamples; 40156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 40256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SCNST EAS_U16 numFMRegions; 40356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_EAS; 40456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 40556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 40656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 407