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