156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File:
456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * eas_mdls.h
556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Contents and purpose:
756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Declarations, interfaces, and prototypes for eas_mdls.c
856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copyright Sonic Network Inc. 2004
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*/
2556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef _EAS_MDLS_H
2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define _EAS_MDLS_H
2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*------------------------------------
3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * includes
3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *------------------------------------
3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_data.h"
3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*------------------------------------
3756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Some defines for dls.h
3856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *------------------------------------
3956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
4056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef DWORD
4156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DWORD EAS_I32
4256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define FAR
4356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SHORT EAS_I16
4456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define USHORT EAS_U16
4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define LONG EAS_I32
4656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define ULONG EAS_U32
4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* GUID struct (call it DLSID in case GUID is defined elsewhere) */
5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct
5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U32 Data1;
5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16 Data2;
5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16 Data3;
5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8  Data4[8];
5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} DLSID;
5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFINE_DLSID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) const DLSID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*------------------------------------
6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * defines
6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *------------------------------------
6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* maximum sample memory for DLS query support */
6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef MAX_DLS_MEMORY
6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MAX_DLS_MEMORY 65536
6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* size of conditional chunk stack */
7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef CDL_STACK_SIZE
7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CDL_STACK_SIZE 8
7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* size of read buffer for sample conversion */
7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef SAMPLE_CONVERT_CHUNK_SIZE
7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SAMPLE_CONVERT_CHUNK_SIZE 32
7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
8256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define ZERO_TIME_IN_CENTS              -32768
8356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
8456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* Pan calculation macros */
8556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define PAN_CONVERSION_FACTOR       4129
8656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MAX_PAN_VALUE               63
8756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MIN_PAN_VALUE               -63
8856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
8956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* multiplier to convert time cents to 10-bit fraction log for EAS_LogToLinear16 */
9056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define TIME_CENTS_TO_LOG2          27962
9156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* conversion factor sustain level from percent to exponent for LogToLinear16 */
9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SUSTAIN_LOG_CONVERSION_FACTOR   536871
9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SUSTAIN_LOG_CONVERSION_SHIFT    15
9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
9656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* conversion factor sustain level from percent to EG full scale */
9756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SUSTAIN_LINEAR_CONVERSION_FACTOR    1073709
9856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
9956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* conversion factor to convert frame period to decay rate */
10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DECAY_CONVERSION_FACTOR     -16
10156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * These macros define the various characteristics of the defined sample rates
10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * DLS_ATTACK_TIME_CONVERT      log offset for conversion from time cents to attack rate
10656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * DLS_LFO_FREQUENCY_CONVERT    pitch-cents offset for LFO frequency conversion
10756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
10856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
10956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
11056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if defined (_SAMPLE_RATE_8000)
11156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_RATE_CONVERT                -9559
11256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_LFO_FREQUENCY_CONVERT       5921
11356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#elif defined (_SAMPLE_RATE_16000)
11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_RATE_CONVERT                -9559
11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_LFO_FREQUENCY_CONVERT       5921
11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
11856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#elif defined (_SAMPLE_RATE_20000)
11956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_RATE_CONVERT                -8745
12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_LFO_FREQUENCY_CONVERT       5108
12156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#elif defined (_SAMPLE_RATE_22050)
12356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_RATE_CONVERT                -8914
12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_LFO_FREQUENCY_CONVERT       5277
12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#elif defined (_SAMPLE_RATE_24000)
12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_RATE_CONVERT                -9061
12856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_LFO_FREQUENCY_CONVERT       5423
12956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
13056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#elif defined (_SAMPLE_RATE_32000)
13156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_RATE_CONVERT                -9559
13256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_LFO_FREQUENCY_CONVERT       5921
13356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
13456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#elif defined (_SAMPLE_RATE_44100)
13556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_RATE_CONVERT                -8914
13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_LFO_FREQUENCY_CONVERT       5277
13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#elif defined (_SAMPLE_RATE_48000)
13956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_RATE_CONVERT                -9061
14056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_LFO_FREQUENCY_CONVERT       5423
14156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
14256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else
14356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#error "_SAMPLE_RATE_XXXXX must be defined to valid rate"
14456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
14556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
14656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*
14756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * FILTER_Q_CONVERSION_FACTOR convers the 0.1dB steps in the DLS
14856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * file to our internal 0.75 dB steps. The value is calculated
14956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * as follows:
15056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
15156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 32768 / (10 * <step-size in dB>)
15256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
15356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * FILTER_RESONANCE_NUM_ENTRIES is the number of entries in the table
15456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
15556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define FILTER_Q_CONVERSION_FACTOR          4369
15656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define FILTER_RESONANCE_NUM_ENTRIES        31
15756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
15856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*
15956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Multiplier to convert DLS gain units (10ths of a dB) to a
16056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * power-of-two exponent for conversion to linear gain using our
16156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * piece-wise linear approximator. Note that we ignore the lower
16256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 16-bits of the DLS gain value. The result is a 10-bit fraction
16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * that works with the EAS_LogToLinear16 function.
16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * DLS_GAIN_FACTOR = (2^18) / (200 * log10(2))
16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */
16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_GAIN_FACTOR         4354
16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_GAIN_SHIFT          8
16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*
17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Reciprocal of 10 for quick divide by 10's
17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * DLS_GAIN_FACTOR = (2^18) / (200 * log10(2))
17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */
17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_DIV_10_FACTOR       3277
17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_DIV_10_SHIFT        16
17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*
17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Multiplier to convert DLS time cents units to a power-of-two
18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * exponent for conversion to absolute time units using our
18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * piece-wise linear approximator.
18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * DLS_TIME_FACTOR = (2^22) / 1200
18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */
18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_TIME_FACTOR         3495
18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_TIME_SHIFT          22
18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* LFO limits */
19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MAX_LFO_FREQUENCY_IN_HERTZ          20
19156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MIN_LFO_FREQUENCY_IN_HERTZ          0.1
19256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MAX_LFO_FREQUENCY_IN_PITCHCENTS     1549
19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MIN_LFO_FREQUENCY_IN_PITCHCENTS     -7624
19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MAX_LFO_AMPLITUDE_DEPTH             12  /* in dB, DLS2.1 p 31*/
19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MIN_LFO_AMPLITUDE_DEPTH             -12 /* in dB, DLS2.1 p 31*/
19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* add to pitch cents before pow(2.0, n) to convert to frequency */
19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define ABSOLUTE_PITCH_BIAS                 238395828
19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define A5_PITCH_OFFSET                     6900
20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*
20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksCHUNK_TYPE is a macro that converts the 4 input args into a 32-bit int
20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkswhere
20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksargument a is placed at the MSB location and
20656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksargument d is placed at the LSB location.
20756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksThis is useful for determining the DLS chunk types
20856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
20956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_TYPE(a,b,c,d) (   \
21056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        ( ((EAS_U32)(a) & 0xFF) << 24 ) \
21156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    +   ( ((EAS_U32)(b) & 0xFF) << 16 ) \
21256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    +   ( ((EAS_U32)(c) & 0xFF) <<  8 ) \
21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    +   ( ((EAS_U32)(d) & 0xFF)       ) )
21456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
21556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_RIFF                  CHUNK_TYPE('R','I','F','F')
21656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_DLS                   CHUNK_TYPE('D','L','S',' ')
21756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_CDL                   CHUNK_TYPE('c','d','l',' ')
21856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_VERS                  CHUNK_TYPE('v','e','r','s')
21956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_DLID                  CHUNK_TYPE('d','l','i','d')
22056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_LIST                  CHUNK_TYPE('L','I','S','T')
22156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_COLH                  CHUNK_TYPE('c','o','l','h')
22256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_LINS                  CHUNK_TYPE('l','i','n','s')
22356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_PTBL                  CHUNK_TYPE('p','t','b','l')
22456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_WVPL                  CHUNK_TYPE('w','v','p','l')
22556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_INFO                  CHUNK_TYPE('I','N','F','O')
22656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_INAM                  CHUNK_TYPE('I','N','A','M')
22756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_INS                   CHUNK_TYPE('i','n','s',' ')
22856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_INSH                  CHUNK_TYPE('i','n','s','h')
22956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_LRGN                  CHUNK_TYPE('l','r','g','n')
23056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_RGN                   CHUNK_TYPE('r','g','n',' ')
23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_RGN2                  CHUNK_TYPE('r','g','n','2')
23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_RGNH                  CHUNK_TYPE('r','g','n','h')
23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_WSMP                  CHUNK_TYPE('w','s','m','p')
23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_WLNK                  CHUNK_TYPE('w','l','n','k')
23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_LART                  CHUNK_TYPE('l','a','r','t')
23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_LAR2                  CHUNK_TYPE('l','a','r','2')
23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_ART1                  CHUNK_TYPE('a','r','t','1')
23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_ART2                  CHUNK_TYPE('a','r','t','2')
23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_WAVE                  CHUNK_TYPE('w','a','v','e')
24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_FMT                   CHUNK_TYPE('f','m','t',' ')
24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_DATA                  CHUNK_TYPE('d','a','t','a')
24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHUNK_DMPR                  CHUNK_TYPE('d','m','p','r')
24356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
24456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
24556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define WAVE_FORMAT_PCM             0x0001 /* Microsoft PCM format, see DLS2.1 p60 */
24656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define WAVE_FORMAT_EXTENSIBLE      0xffff
24756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* defines for wave table structures */
24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* initialize each articulation structure to a harmless state */
25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* change art values after we've determined EAS internals */
25256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_DLS_FILTER_CUTOFF_FREQUENCY     0x7FFF      /* DLS2.1, p 31 means leave filter off */
25356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/**********/
25556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* define the waves that we expect to generate instead of store */
25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* NOTE: our comparison routine converts the input string
25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksto lowercase, so the following comparison values should all
25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksbe in lowercase.
26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define STRING_NOISE            "noise"
26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*------------------------------------
26556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * type definitions
26656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *------------------------------------
26756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
26856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _STANDALONE_CONVERTER
26956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_dls_params
27056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
27156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT     sampleRate;
27256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT     samplesPerFrame;
27356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT     bitDepth;
27456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    double      ditherLevel;
27556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    double      ditherFilterCoeff;
27656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_BOOL    compatibility;
27756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_BOOL    encodeADPCM;
27856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_DLS_PARAMS;
27956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
28056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* function prototypes */
28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT DLSParser (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE fileHandle, EAS_I32 offset, S_DLS **pDLS);
28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT DLSCleanup (EAS_HW_DATA_HANDLE hwInstData, S_DLS *pDLS);
28556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid DLSAddRef (S_DLS *pDLS);
28656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_I16 ConvertDelay (EAS_I32 timeCents);
28756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_I16 ConvertRate (EAS_I32 timeCents);
28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _STANDALONE_CONVERTER
29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid DLSConvParams (S_DLS_PARAMS *pParams, EAS_BOOL set);
29256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
29356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
29456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
296