156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File:
456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * eas_synth.h
556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Contents and purpose:
756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Declarations, interfaces, and prototypes for synth.
856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copyright Sonic Network Inc. 2004, 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: 718 $
2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *   $Date: 2007-06-08 16:43:16 -0700 (Fri, 08 Jun 2007) $
2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef _EAS_SYNTH_H
3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define _EAS_SYNTH_H
3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_types.h"
3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_sndlib.h"
3556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _WT_SYNTH
3756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_wtsynth.h"
3856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
3956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
4056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _FM_SYNTH
4156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_fmsynth.h"
4256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
4356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
4456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef NUM_OUTPUT_CHANNELS
4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_OUTPUT_CHANNELS         2
4656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef MAX_SYNTH_VOICES
4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MAX_SYNTH_VOICES            64
5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef MAX_VIRTUAL_SYNTHESIZERS
5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MAX_VIRTUAL_SYNTHESIZERS    4
5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* defines */
5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef NUM_PRIMARY_VOICES
5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_PRIMARY_VOICES      MAX_SYNTH_VOICES
5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#elif !defined(NUM_SECONDARY_VOICES)
6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_SECONDARY_VOICES    (MAX_SYNTH_VOICES - NUM_PRIMARY_VOICES)
6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if defined(EAS_WT_SYNTH)
6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_WT_VOICES           MAX_SYNTH_VOICES
6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* FM on MCU */
6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#elif defined(EAS_FM_SYNTH)
6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_FM_VOICES           MAX_SYNTH_VOICES
6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* wavetable drums on MCU, wavetable melodic on DSP */
7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#elif defined(EAS_SPLIT_WT_SYNTH)
7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_WT_VOICES           MAX_SYNTH_VOICES
7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* wavetable drums and FM melodic on MCU */
7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#elif defined(EAS_HYBRID_SYNTH)
7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_WT_VOICES           NUM_PRIMARY_VOICES
7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_FM_VOICES           NUM_SECONDARY_VOICES
7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* wavetable drums on MCU, FM melodic on DSP */
8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#elif defined(EAS_SPLIT_HYBRID_SYNTH)
8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_WT_VOICES           NUM_PRIMARY_VOICES
8256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_FM_VOICES           NUM_SECONDARY_VOICES
8356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
8456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* FM synth on DSP */
8556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#elif defined(EAS_SPLIT_FM_SYNTH)
8656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_FM_VOICES           MAX_SYNTH_VOICES
8756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
8856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else
8956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#error "Unrecognized architecture option"
9056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
9156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_SYNTH_CHANNELS      16
9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_SYNTH_VOICES    MAX_SYNTH_VOICES
9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
9656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* use the following values to specify unassigned channels or voices */
9756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define UNASSIGNED_SYNTH_CHANNEL    NUM_SYNTH_CHANNELS
9856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define UNASSIGNED_SYNTH_VOICE      MAX_SYNTH_VOICES
9956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
10156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* synth parameters are updated every SYNTH_UPDATE_PERIOD_IN_SAMPLES */
10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SYNTH_UPDATE_PERIOD_IN_SAMPLES  (EAS_I32)(0x1L << SYNTH_UPDATE_PERIOD_IN_BITS)
10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* stealing weighting factors */
10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NOTE_AGE_STEAL_WEIGHT           1
10656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NOTE_GAIN_STEAL_WEIGHT          4
10756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHANNEL_POLY_STEAL_WEIGHT       12
10856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHANNEL_PRIORITY_STEAL_WEIGHT   2
10956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NOTE_MATCH_PENALTY              128
11056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SYNTH_PRIORITY_WEIGHT           8
11156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
11256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* default synth master volume */
11356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_SYNTH_MASTER_VOLUME     0x7fff
11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_SYNTH_PRIORITY          5
11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* default tuning values */
11856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_PITCH_BEND_SENSITIVITY      200     /* 2 semitones */
11956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_FINE_PITCH                  0       /* 0 cents */
12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_COARSE_PITCH                0       /* 0 semitones */
12156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* default drum channel is 10, but is internally 9 due to unit offset */
12356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_DRUM_CHANNEL            9
12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* drum channel can simultaneously play this many voices at most */
12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_CHANNEL_POLYPHONY_LIMIT 2
12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
12856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* default instrument is acoustic piano */
12956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_MELODY_BANK_MSB         0x79
13056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_RHYTHM_BANK_MSB         0x78
13156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_MELODY_BANK_NUMBER      (DEFAULT_MELODY_BANK_MSB << 8)
13256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_RHYTHM_BANK_NUMBER      (DEFAULT_RHYTHM_BANK_MSB << 8)
13356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_SYNTH_PROGRAM_NUMBER    0
13456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
13556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_PITCH_BEND      0x2000  /* 0x2000 == (0x40 << 7) | 0x00 */
13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_MOD_WHEEL       0
13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_CHANNEL_VOLUME  0x64
13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_PAN             0x40    /* decimal 64, center */
13956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
14056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _REVERB
14156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_REVERB_SEND     40      /* some reverb */
14256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
14356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
14456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _CHORUS
14556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_CHORUS_SEND     0       /* no chorus */
14656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
14756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
14856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_EAS_FILTER_CUTOFF_FREQUENCY 0           /* EAS synth uses a different default */
14956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_FILTER_RESONANCE        0
15056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_EXPRESSION              0x7F
15156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
15256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_CHANNEL_PRESSURE        0
15356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
15456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_REGISTERED_PARAM        0x3FFF
15556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
15656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_CHANNEL_STATIC_GAIN     0
15756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_CHANNEL_STATIC_PITCH    0
15856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
15956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_LFO_MOD_WHEEL_TO_PITCH_CENTS            50
16056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_LFO_CHANNEL_PRESSURE_TO_PITCH_CENTS     50
16156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
16256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_KEY_NUMBER          0x69
16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_VELOCITY            0x64
16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_REGION_INDEX        0
16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_ARTICULATION_INDEX  0
16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_VOICE_GAIN          0
16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_AGE                 0
16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_SP_MIDI_PRIORITY    16
16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* filter defines */
17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_FILTER_ZERO     0
17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define FILTER_CUTOFF_MAX_PITCH_CENTS       1919
17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define FILTER_CUTOFF_MIN_PITCH_CENTS       -4467
17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define A5_PITCH_OFFSET_IN_CENTS            6900
17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*------------------------------------
17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * S_SYNTH_CHANNEL data structure
17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *------------------------------------
18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* S_SYNTH_CHANNEL.m_nFlags */
18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHANNEL_FLAG_SUSTAIN_PEDAL                      0x01
18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHANNEL_FLAG_MUTE                               0x02
18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHANNEL_FLAG_UPDATE_CHANNEL_PARAMETERS          0x04
18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHANNEL_FLAG_RHYTHM_CHANNEL                     0x08
18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define CHANNEL_FLAG_EXTERNAL_AUDIO                     0x10
18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_CHANNEL_FLAGS                           0
18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* macros for extracting virtual synth and channel numbers */
19156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define GET_VSYNTH(a) ((a) >> 4)
19256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define GET_CHANNEL(a) ((a) & 15)
19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_synth_channel_tag
19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* use static channel parameters to reduce MIPs */
19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* parameters shared by multiple voices assigned to same channel */
19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32     staticPitch;        /* (pitch bend * pitch sens) + fine pitch */
19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I16     staticGain;         /* (CC7 * CC11 * master vol)^2  */
20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16     regionIndex;        /* index of first region in program */
20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16     bankNum;            /* play programs from this bank */
20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I16     pitchBend;          /* pitch wheel value */
20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I16     pitchBendSensitivity;
20656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I16     registeredParam;    /* currently selected registered param */
20756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
20856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
20956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if defined(_FM_SYNTH)
21056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I16     lfoAmt;             /* amount of LFO to apply to voice */
21156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
21256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8      programNum;         /* play this instrument number */
21456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8      modWheel;           /* CC1 */
21556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8      volume;             /* CC7 */
21656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8      pan;                /* CC10 */
21756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
21856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8      expression;         /* CC11 */
21956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
22056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* the following parameters are controlled by RPNs */
22156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I8      finePitch;
22256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I8      coarsePitch;
22356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
22456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8      channelPressure;    /* applied to all voices on a given channel */
22556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
22656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8      channelFlags;       /* bit field channelFlags for */
22756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                                    /* CC64, SP-MIDI channel masking */
22856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
22956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8      pool;               /* SPMIDI channel voice pool */
23056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8      mip;                /* SPMIDI MIP setting */
23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef  _REVERB
23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8      reverbSend;         /* CC91 */
23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef  _CHORUS
23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8      chorusSend;         /* CC93 */
23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_SYNTH_CHANNEL;
24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*------------------------------------
24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * S_SYNTH_VOICE data structure
24356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *------------------------------------
24456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
24556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
24656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* S_SYNTH_VOICE.m_nFlags */
24756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define VOICE_FLAG_UPDATE_VOICE_PARAMETERS              0x01
24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define VOICE_FLAG_SUSTAIN_PEDAL_DEFER_NOTE_OFF         0x02
24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define VOICE_FLAG_DEFER_MIDI_NOTE_OFF                  0x04
25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define VOICE_FLAG_NO_SAMPLES_SYNTHESIZED_YET           0x08
25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define VOICE_FLAG_DEFER_MUTE                           0x40
25256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_VOICE_FLAGS                             0
25356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* S_SYNTH_VOICE.m_eState */
25556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef enum {
25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    eVoiceStateFree = 0,
25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    eVoiceStateStart,
25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    eVoiceStatePlay,
26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    eVoiceStateRelease,
26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    eVoiceStateMuting,
26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    eVoiceStateStolen,
26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    eVoiceStateInvalid          /* should never be in this state! */
26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
26556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} E_VOICE_STATE;
26656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_VOICE_STATE     eVoiceStateFree
26756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
26856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_synth_voice_tag
26956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
27056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
27156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* These parameters are common to both wavetable and FM
27256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * synthesizers. The voice manager should only access this data.
27356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Any other data should be manipulated by the code that is
27456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * specific to that synthesizer and reflected back through the
27556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * common state data available here.
27656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */
27756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16             regionIndex;        /* index to wave and playback params */
27856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I16             gain;               /* current gain */
27956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16             age;                /* large value means old note */
28056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16             nextRegionIndex;    /* index to wave and playback params */
28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8              voiceState;         /* current voice state */
28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8              voiceFlags;         /* misc flags/bit fields */
28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8              channel;            /* this voice plays on this synth channel */
28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8              note;               /* 12 <= key number <= 108 */
28556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8              velocity;           /* 0 <= velocity <= 127 */
28656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8              nextChannel;        /* play stolen voice on this channel */
28756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8              nextNote;           /* 12 <= key number <= 108 */
28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8              nextVelocity;       /* 0 <= velocity <= 127 */
28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_SYNTH_VOICE;
29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*------------------------------------
29256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * S_SYNTH data structure
29356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
29456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * One instance for each MIDI stream
29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *------------------------------------
29656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
29756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
29856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* S_SYNTH.m_nFlags */
29956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SYNTH_FLAG_RESET_IS_REQUESTED                   0x01
30056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SYNTH_FLAG_SP_MIDI_ON                           0x02
30156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SYNTH_FLAG_UPDATE_ALL_CHANNEL_PARAMETERS        0x04
30256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define SYNTH_FLAG_DEFERRED_MIDI_NOTE_OFF_PENDING       0x08
30356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DEFAULT_SYNTH_FLAGS     SYNTH_FLAG_UPDATE_ALL_CHANNEL_PARAMETERS
30456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
30556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_synth_tag
30656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
30756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    struct s_eas_data_tag   *pEASData;
30856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    const S_EAS             *pEAS;
30956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
31056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DLS_SYNTHESIZER
31156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_DLS                   *pDLS;
31256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
31356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
31456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef EXTERNAL_AUDIO
31556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_EXT_PRG_CHG_FUNC    cbProgChgFunc;
31656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_EXT_EVENT_FUNC      cbEventFunc;
31756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_VOID_PTR            *pExtAudioInstData;
31856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
31956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
32056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_SYNTH_CHANNEL         channels[NUM_SYNTH_CHANNELS];
32156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32                 totalNoteCount;
32256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16                 maxPolyphony;
32356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16                 numActiveVoices;
32456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16                 masterVolume;
32556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8                  channelsByPriority[NUM_SYNTH_CHANNELS];
32656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8                  poolCount[NUM_SYNTH_CHANNELS];
32756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8                  poolAlloc[NUM_SYNTH_CHANNELS];
32856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8                  synthFlags;
32956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I8                  globalTranspose;
33056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8                  vSynthNum;
33156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8                  refCount;
33256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8                  priority;
33356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_SYNTH;
33456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
33556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*------------------------------------
33656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * S_VOICE_MGR data structure
33756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
33856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * One instance for each EAS library instance
33956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *------------------------------------
34056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
34156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_voice_mgr_tag
34256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
34356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_SYNTH                 *pSynth[MAX_VIRTUAL_SYNTHESIZERS];
34456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_PCM                 voiceBuffer[SYNTH_UPDATE_PERIOD_IN_SAMPLES];
34556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
34656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _FM_SYNTH
34756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_PCM                 operMixBuffer[SYNTH_UPDATE_PERIOD_IN_SAMPLES];
34856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_FM_VOICE              fmVoices[NUM_FM_VOICES];
34956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
35056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
35156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _WT_SYNTH
35256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_WT_VOICE              wtVoices[NUM_WT_VOICES];
35356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
35456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
35556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _REVERB
35656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_PCM                 reverbSendBuffer[NUM_OUTPUT_CHANNELS * SYNTH_UPDATE_PERIOD_IN_SAMPLES];
35756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
35856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
35956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _CHORUS
36056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_PCM                 chorusSendBuffer[NUM_OUTPUT_CHANNELS * SYNTH_UPDATE_PERIOD_IN_SAMPLES];
36156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
36256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_SYNTH_VOICE           voices[MAX_SYNTH_VOICES];
36356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
36456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_SNDLIB_HANDLE       pGlobalEAS;
36556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
36656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DLS_SYNTHESIZER
36756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_DLS                   *pGlobalDLS;
36856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
36956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
37056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _SPLIT_ARCHITECTURE
37156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_FRAME_BUFFER_HANDLE pFrameBuffer;
37256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
37356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
37456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if defined(_SECONDARY_SYNTH) || defined(EAS_SPLIT_WT_SYNTH)
37556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16                 maxPolyphonyPrimary;
37656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16                 maxPolyphonySecondary;
37756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
37856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
37956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32                 workload;
38056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32                 maxWorkLoad;
38156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
38256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16                 activeVoices;
38356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16                 maxPolyphony;
38456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
38556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16                 age;
38656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
38756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* limits the number of voice starts in a frame for split architecture */
38856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef MAX_VOICE_STARTS
38956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U16                 numVoiceStarts;
39056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
39156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_VOICE_MGR;
39256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
39356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif /* #ifdef _EAS_SYNTH_H */
39456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
39556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
396