1*f81fb7c4SAndroid Build Coastguard Worker /*---------------------------------------------------------------------------- 2*f81fb7c4SAndroid Build Coastguard Worker * 3*f81fb7c4SAndroid Build Coastguard Worker * File: 4*f81fb7c4SAndroid Build Coastguard Worker * eas_synth.h 5*f81fb7c4SAndroid Build Coastguard Worker * 6*f81fb7c4SAndroid Build Coastguard Worker * Contents and purpose: 7*f81fb7c4SAndroid Build Coastguard Worker * Declarations, interfaces, and prototypes for synth. 8*f81fb7c4SAndroid Build Coastguard Worker * 9*f81fb7c4SAndroid Build Coastguard Worker * Copyright Sonic Network Inc. 2004, 2005 10*f81fb7c4SAndroid Build Coastguard Worker 11*f81fb7c4SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 12*f81fb7c4SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 13*f81fb7c4SAndroid Build Coastguard Worker * You may obtain a copy of the License at 14*f81fb7c4SAndroid Build Coastguard Worker * 15*f81fb7c4SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 16*f81fb7c4SAndroid Build Coastguard Worker * 17*f81fb7c4SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 18*f81fb7c4SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 19*f81fb7c4SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 20*f81fb7c4SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 21*f81fb7c4SAndroid Build Coastguard Worker * limitations under the License. 22*f81fb7c4SAndroid Build Coastguard Worker * 23*f81fb7c4SAndroid Build Coastguard Worker *---------------------------------------------------------------------------- 24*f81fb7c4SAndroid Build Coastguard Worker * Revision Control: 25*f81fb7c4SAndroid Build Coastguard Worker * $Revision: 718 $ 26*f81fb7c4SAndroid Build Coastguard Worker * $Date: 2007-06-08 16:43:16 -0700 (Fri, 08 Jun 2007) $ 27*f81fb7c4SAndroid Build Coastguard Worker *---------------------------------------------------------------------------- 28*f81fb7c4SAndroid Build Coastguard Worker */ 29*f81fb7c4SAndroid Build Coastguard Worker 30*f81fb7c4SAndroid Build Coastguard Worker #ifndef _EAS_SYNTH_H 31*f81fb7c4SAndroid Build Coastguard Worker #define _EAS_SYNTH_H 32*f81fb7c4SAndroid Build Coastguard Worker 33*f81fb7c4SAndroid Build Coastguard Worker #include "eas_types.h" 34*f81fb7c4SAndroid Build Coastguard Worker #include "eas_sndlib.h" 35*f81fb7c4SAndroid Build Coastguard Worker 36*f81fb7c4SAndroid Build Coastguard Worker #ifdef _WT_SYNTH 37*f81fb7c4SAndroid Build Coastguard Worker #include "eas_wtsynth.h" 38*f81fb7c4SAndroid Build Coastguard Worker #endif 39*f81fb7c4SAndroid Build Coastguard Worker 40*f81fb7c4SAndroid Build Coastguard Worker #ifdef _FM_SYNTH 41*f81fb7c4SAndroid Build Coastguard Worker #include "eas_fmsynth.h" 42*f81fb7c4SAndroid Build Coastguard Worker #endif 43*f81fb7c4SAndroid Build Coastguard Worker 44*f81fb7c4SAndroid Build Coastguard Worker #ifndef NUM_OUTPUT_CHANNELS 45*f81fb7c4SAndroid Build Coastguard Worker #define NUM_OUTPUT_CHANNELS 2 46*f81fb7c4SAndroid Build Coastguard Worker #endif 47*f81fb7c4SAndroid Build Coastguard Worker 48*f81fb7c4SAndroid Build Coastguard Worker #ifndef MAX_SYNTH_VOICES 49*f81fb7c4SAndroid Build Coastguard Worker #define MAX_SYNTH_VOICES 64 50*f81fb7c4SAndroid Build Coastguard Worker #endif 51*f81fb7c4SAndroid Build Coastguard Worker 52*f81fb7c4SAndroid Build Coastguard Worker #ifndef MAX_VIRTUAL_SYNTHESIZERS 53*f81fb7c4SAndroid Build Coastguard Worker #define MAX_VIRTUAL_SYNTHESIZERS 4 54*f81fb7c4SAndroid Build Coastguard Worker #endif 55*f81fb7c4SAndroid Build Coastguard Worker 56*f81fb7c4SAndroid Build Coastguard Worker /* defines */ 57*f81fb7c4SAndroid Build Coastguard Worker #ifndef NUM_PRIMARY_VOICES 58*f81fb7c4SAndroid Build Coastguard Worker #define NUM_PRIMARY_VOICES MAX_SYNTH_VOICES 59*f81fb7c4SAndroid Build Coastguard Worker #elif !defined(NUM_SECONDARY_VOICES) 60*f81fb7c4SAndroid Build Coastguard Worker #define NUM_SECONDARY_VOICES (MAX_SYNTH_VOICES - NUM_PRIMARY_VOICES) 61*f81fb7c4SAndroid Build Coastguard Worker #endif 62*f81fb7c4SAndroid Build Coastguard Worker 63*f81fb7c4SAndroid Build Coastguard Worker #if defined(EAS_WT_SYNTH) 64*f81fb7c4SAndroid Build Coastguard Worker #define NUM_WT_VOICES MAX_SYNTH_VOICES 65*f81fb7c4SAndroid Build Coastguard Worker 66*f81fb7c4SAndroid Build Coastguard Worker /* FM on MCU */ 67*f81fb7c4SAndroid Build Coastguard Worker #elif defined(EAS_FM_SYNTH) 68*f81fb7c4SAndroid Build Coastguard Worker #define NUM_FM_VOICES MAX_SYNTH_VOICES 69*f81fb7c4SAndroid Build Coastguard Worker 70*f81fb7c4SAndroid Build Coastguard Worker /* wavetable drums on MCU, wavetable melodic on DSP */ 71*f81fb7c4SAndroid Build Coastguard Worker #elif defined(EAS_SPLIT_WT_SYNTH) 72*f81fb7c4SAndroid Build Coastguard Worker #define NUM_WT_VOICES MAX_SYNTH_VOICES 73*f81fb7c4SAndroid Build Coastguard Worker 74*f81fb7c4SAndroid Build Coastguard Worker /* wavetable drums and FM melodic on MCU */ 75*f81fb7c4SAndroid Build Coastguard Worker #elif defined(EAS_HYBRID_SYNTH) 76*f81fb7c4SAndroid Build Coastguard Worker #define NUM_WT_VOICES NUM_PRIMARY_VOICES 77*f81fb7c4SAndroid Build Coastguard Worker #define NUM_FM_VOICES NUM_SECONDARY_VOICES 78*f81fb7c4SAndroid Build Coastguard Worker 79*f81fb7c4SAndroid Build Coastguard Worker /* wavetable drums on MCU, FM melodic on DSP */ 80*f81fb7c4SAndroid Build Coastguard Worker #elif defined(EAS_SPLIT_HYBRID_SYNTH) 81*f81fb7c4SAndroid Build Coastguard Worker #define NUM_WT_VOICES NUM_PRIMARY_VOICES 82*f81fb7c4SAndroid Build Coastguard Worker #define NUM_FM_VOICES NUM_SECONDARY_VOICES 83*f81fb7c4SAndroid Build Coastguard Worker 84*f81fb7c4SAndroid Build Coastguard Worker /* FM synth on DSP */ 85*f81fb7c4SAndroid Build Coastguard Worker #elif defined(EAS_SPLIT_FM_SYNTH) 86*f81fb7c4SAndroid Build Coastguard Worker #define NUM_FM_VOICES MAX_SYNTH_VOICES 87*f81fb7c4SAndroid Build Coastguard Worker 88*f81fb7c4SAndroid Build Coastguard Worker #else 89*f81fb7c4SAndroid Build Coastguard Worker #error "Unrecognized architecture option" 90*f81fb7c4SAndroid Build Coastguard Worker #endif 91*f81fb7c4SAndroid Build Coastguard Worker 92*f81fb7c4SAndroid Build Coastguard Worker #define NUM_SYNTH_CHANNELS 16 93*f81fb7c4SAndroid Build Coastguard Worker 94*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_SYNTH_VOICES MAX_SYNTH_VOICES 95*f81fb7c4SAndroid Build Coastguard Worker 96*f81fb7c4SAndroid Build Coastguard Worker /* use the following values to specify unassigned channels or voices */ 97*f81fb7c4SAndroid Build Coastguard Worker #define UNASSIGNED_SYNTH_CHANNEL NUM_SYNTH_CHANNELS 98*f81fb7c4SAndroid Build Coastguard Worker #define UNASSIGNED_SYNTH_VOICE MAX_SYNTH_VOICES 99*f81fb7c4SAndroid Build Coastguard Worker 100*f81fb7c4SAndroid Build Coastguard Worker 101*f81fb7c4SAndroid Build Coastguard Worker /* synth parameters are updated every SYNTH_UPDATE_PERIOD_IN_SAMPLES */ 102*f81fb7c4SAndroid Build Coastguard Worker #define SYNTH_UPDATE_PERIOD_IN_SAMPLES (EAS_I32)(0x1L << SYNTH_UPDATE_PERIOD_IN_BITS) 103*f81fb7c4SAndroid Build Coastguard Worker 104*f81fb7c4SAndroid Build Coastguard Worker /* stealing weighting factors */ 105*f81fb7c4SAndroid Build Coastguard Worker #define NOTE_AGE_STEAL_WEIGHT 1 106*f81fb7c4SAndroid Build Coastguard Worker #define NOTE_GAIN_STEAL_WEIGHT 4 107*f81fb7c4SAndroid Build Coastguard Worker #define CHANNEL_POLY_STEAL_WEIGHT 12 108*f81fb7c4SAndroid Build Coastguard Worker #define CHANNEL_PRIORITY_STEAL_WEIGHT 2 109*f81fb7c4SAndroid Build Coastguard Worker #define NOTE_MATCH_PENALTY 128 110*f81fb7c4SAndroid Build Coastguard Worker #define SYNTH_PRIORITY_WEIGHT 8 111*f81fb7c4SAndroid Build Coastguard Worker 112*f81fb7c4SAndroid Build Coastguard Worker /* default synth master volume */ 113*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_SYNTH_MASTER_VOLUME 0x7fff 114*f81fb7c4SAndroid Build Coastguard Worker 115*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_SYNTH_PRIORITY 5 116*f81fb7c4SAndroid Build Coastguard Worker 117*f81fb7c4SAndroid Build Coastguard Worker /* default tuning values */ 118*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_PITCH_BEND_SENSITIVITY 200 /* 2 semitones */ 119*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_FINE_PITCH 0 /* 0 cents */ 120*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_COARSE_PITCH 0 /* 0 semitones */ 121*f81fb7c4SAndroid Build Coastguard Worker 122*f81fb7c4SAndroid Build Coastguard Worker /* default drum channel is 10, but is internally 9 due to unit offset */ 123*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_DRUM_CHANNEL 9 124*f81fb7c4SAndroid Build Coastguard Worker 125*f81fb7c4SAndroid Build Coastguard Worker /* drum channel can simultaneously play this many voices at most */ 126*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_CHANNEL_POLYPHONY_LIMIT 2 127*f81fb7c4SAndroid Build Coastguard Worker 128*f81fb7c4SAndroid Build Coastguard Worker /* default instrument is acoustic piano */ 129*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_MELODY_BANK_MSB 0x79 130*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_RHYTHM_BANK_MSB 0x78 131*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_MELODY_BANK_NUMBER (DEFAULT_MELODY_BANK_MSB << 8) 132*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_RHYTHM_BANK_NUMBER (DEFAULT_RHYTHM_BANK_MSB << 8) 133*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_SYNTH_PROGRAM_NUMBER 0 134*f81fb7c4SAndroid Build Coastguard Worker 135*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_PITCH_BEND 0x2000 /* 0x2000 == (0x40 << 7) | 0x00 */ 136*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_MOD_WHEEL 0 137*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_CHANNEL_VOLUME 0x64 138*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_PAN 0x40 /* decimal 64, center */ 139*f81fb7c4SAndroid Build Coastguard Worker 140*f81fb7c4SAndroid Build Coastguard Worker #ifdef _REVERB 141*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_REVERB_SEND 40 /* some reverb */ 142*f81fb7c4SAndroid Build Coastguard Worker #endif 143*f81fb7c4SAndroid Build Coastguard Worker 144*f81fb7c4SAndroid Build Coastguard Worker #ifdef _CHORUS 145*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_CHORUS_SEND 0 /* no chorus */ 146*f81fb7c4SAndroid Build Coastguard Worker #endif 147*f81fb7c4SAndroid Build Coastguard Worker 148*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_EAS_FILTER_CUTOFF_FREQUENCY 0 /* EAS synth uses a different default */ 149*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_FILTER_RESONANCE 0 150*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_EXPRESSION 0x7F 151*f81fb7c4SAndroid Build Coastguard Worker 152*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_CHANNEL_PRESSURE 0 153*f81fb7c4SAndroid Build Coastguard Worker 154*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_REGISTERED_PARAM 0x3FFF 155*f81fb7c4SAndroid Build Coastguard Worker 156*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_CHANNEL_STATIC_GAIN 0 157*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_CHANNEL_STATIC_PITCH 0 158*f81fb7c4SAndroid Build Coastguard Worker 159*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_LFO_MOD_WHEEL_TO_PITCH_CENTS 50 160*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_LFO_CHANNEL_PRESSURE_TO_PITCH_CENTS 50 161*f81fb7c4SAndroid Build Coastguard Worker 162*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_KEY_NUMBER 0x69 163*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_VELOCITY 0x64 164*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_REGION_INDEX 0 165*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_ARTICULATION_INDEX 0 166*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_VOICE_GAIN 0 167*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_AGE 0 168*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_SP_MIDI_PRIORITY 16 169*f81fb7c4SAndroid Build Coastguard Worker 170*f81fb7c4SAndroid Build Coastguard Worker 171*f81fb7c4SAndroid Build Coastguard Worker /* filter defines */ 172*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_FILTER_ZERO 0 173*f81fb7c4SAndroid Build Coastguard Worker #define FILTER_CUTOFF_MAX_PITCH_CENTS 1919 174*f81fb7c4SAndroid Build Coastguard Worker #define FILTER_CUTOFF_MIN_PITCH_CENTS -4467 175*f81fb7c4SAndroid Build Coastguard Worker #define A5_PITCH_OFFSET_IN_CENTS 6900 176*f81fb7c4SAndroid Build Coastguard Worker 177*f81fb7c4SAndroid Build Coastguard Worker /*------------------------------------ 178*f81fb7c4SAndroid Build Coastguard Worker * S_SYNTH_CHANNEL data structure 179*f81fb7c4SAndroid Build Coastguard Worker *------------------------------------ 180*f81fb7c4SAndroid Build Coastguard Worker */ 181*f81fb7c4SAndroid Build Coastguard Worker 182*f81fb7c4SAndroid Build Coastguard Worker /* S_SYNTH_CHANNEL.m_nFlags */ 183*f81fb7c4SAndroid Build Coastguard Worker #define CHANNEL_FLAG_SUSTAIN_PEDAL 0x01 184*f81fb7c4SAndroid Build Coastguard Worker #define CHANNEL_FLAG_MUTE 0x02 185*f81fb7c4SAndroid Build Coastguard Worker #define CHANNEL_FLAG_UPDATE_CHANNEL_PARAMETERS 0x04 186*f81fb7c4SAndroid Build Coastguard Worker #define CHANNEL_FLAG_RHYTHM_CHANNEL 0x08 187*f81fb7c4SAndroid Build Coastguard Worker #define CHANNEL_FLAG_EXTERNAL_AUDIO 0x10 188*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_CHANNEL_FLAGS 0 189*f81fb7c4SAndroid Build Coastguard Worker 190*f81fb7c4SAndroid Build Coastguard Worker /* macros for extracting virtual synth and channel numbers */ 191*f81fb7c4SAndroid Build Coastguard Worker #define GET_VSYNTH(a) ((a) >> 4) 192*f81fb7c4SAndroid Build Coastguard Worker #define GET_CHANNEL(a) ((a) & 15) 193*f81fb7c4SAndroid Build Coastguard Worker 194*f81fb7c4SAndroid Build Coastguard Worker typedef struct s_synth_channel_tag 195*f81fb7c4SAndroid Build Coastguard Worker { 196*f81fb7c4SAndroid Build Coastguard Worker /* use static channel parameters to reduce MIPs */ 197*f81fb7c4SAndroid Build Coastguard Worker /* parameters shared by multiple voices assigned to same channel */ 198*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 staticPitch; /* (pitch bend * pitch sens) + fine pitch */ 199*f81fb7c4SAndroid Build Coastguard Worker EAS_I16 staticGain; /* (CC7 * CC11 * master vol)^2 */ 200*f81fb7c4SAndroid Build Coastguard Worker 201*f81fb7c4SAndroid Build Coastguard Worker EAS_U16 regionIndex; /* index of first region in program */ 202*f81fb7c4SAndroid Build Coastguard Worker 203*f81fb7c4SAndroid Build Coastguard Worker EAS_U16 bankNum; /* play programs from this bank */ 204*f81fb7c4SAndroid Build Coastguard Worker EAS_I16 pitchBend; /* pitch wheel value */ 205*f81fb7c4SAndroid Build Coastguard Worker EAS_I16 pitchBendSensitivity; 206*f81fb7c4SAndroid Build Coastguard Worker EAS_I16 registeredParam; /* currently selected registered param */ 207*f81fb7c4SAndroid Build Coastguard Worker 208*f81fb7c4SAndroid Build Coastguard Worker 209*f81fb7c4SAndroid Build Coastguard Worker #if defined(_FM_SYNTH) 210*f81fb7c4SAndroid Build Coastguard Worker EAS_I16 lfoAmt; /* amount of LFO to apply to voice */ 211*f81fb7c4SAndroid Build Coastguard Worker #endif 212*f81fb7c4SAndroid Build Coastguard Worker 213*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 programNum; /* play this instrument number */ 214*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 modWheel; /* CC1 */ 215*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 volume; /* CC7 */ 216*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 pan; /* CC10 */ 217*f81fb7c4SAndroid Build Coastguard Worker 218*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 expression; /* CC11 */ 219*f81fb7c4SAndroid Build Coastguard Worker 220*f81fb7c4SAndroid Build Coastguard Worker /* the following parameters are controlled by RPNs */ 221*f81fb7c4SAndroid Build Coastguard Worker EAS_I8 finePitch; 222*f81fb7c4SAndroid Build Coastguard Worker EAS_I8 coarsePitch; 223*f81fb7c4SAndroid Build Coastguard Worker 224*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 channelPressure; /* applied to all voices on a given channel */ 225*f81fb7c4SAndroid Build Coastguard Worker 226*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 channelFlags; /* bit field channelFlags for */ 227*f81fb7c4SAndroid Build Coastguard Worker /* CC64, SP-MIDI channel masking */ 228*f81fb7c4SAndroid Build Coastguard Worker 229*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 pool; /* SPMIDI channel voice pool */ 230*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 mip; /* SPMIDI MIP setting */ 231*f81fb7c4SAndroid Build Coastguard Worker 232*f81fb7c4SAndroid Build Coastguard Worker #ifdef _REVERB 233*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 reverbSend; /* CC91 */ 234*f81fb7c4SAndroid Build Coastguard Worker #endif 235*f81fb7c4SAndroid Build Coastguard Worker 236*f81fb7c4SAndroid Build Coastguard Worker #ifdef _CHORUS 237*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 chorusSend; /* CC93 */ 238*f81fb7c4SAndroid Build Coastguard Worker #endif 239*f81fb7c4SAndroid Build Coastguard Worker } S_SYNTH_CHANNEL; 240*f81fb7c4SAndroid Build Coastguard Worker 241*f81fb7c4SAndroid Build Coastguard Worker /*------------------------------------ 242*f81fb7c4SAndroid Build Coastguard Worker * S_SYNTH_VOICE data structure 243*f81fb7c4SAndroid Build Coastguard Worker *------------------------------------ 244*f81fb7c4SAndroid Build Coastguard Worker */ 245*f81fb7c4SAndroid Build Coastguard Worker 246*f81fb7c4SAndroid Build Coastguard Worker /* S_SYNTH_VOICE.m_nFlags */ 247*f81fb7c4SAndroid Build Coastguard Worker #define VOICE_FLAG_UPDATE_VOICE_PARAMETERS 0x01 248*f81fb7c4SAndroid Build Coastguard Worker #define VOICE_FLAG_SUSTAIN_PEDAL_DEFER_NOTE_OFF 0x02 249*f81fb7c4SAndroid Build Coastguard Worker #define VOICE_FLAG_DEFER_MIDI_NOTE_OFF 0x04 250*f81fb7c4SAndroid Build Coastguard Worker #define VOICE_FLAG_NO_SAMPLES_SYNTHESIZED_YET 0x08 251*f81fb7c4SAndroid Build Coastguard Worker #define VOICE_FLAG_DEFER_MUTE 0x40 252*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_VOICE_FLAGS 0 253*f81fb7c4SAndroid Build Coastguard Worker 254*f81fb7c4SAndroid Build Coastguard Worker /* S_SYNTH_VOICE.m_eState */ 255*f81fb7c4SAndroid Build Coastguard Worker typedef enum { 256*f81fb7c4SAndroid Build Coastguard Worker 257*f81fb7c4SAndroid Build Coastguard Worker eVoiceStateFree = 0, 258*f81fb7c4SAndroid Build Coastguard Worker eVoiceStateStart, 259*f81fb7c4SAndroid Build Coastguard Worker eVoiceStatePlay, 260*f81fb7c4SAndroid Build Coastguard Worker eVoiceStateRelease, 261*f81fb7c4SAndroid Build Coastguard Worker eVoiceStateMuting, 262*f81fb7c4SAndroid Build Coastguard Worker eVoiceStateStolen, 263*f81fb7c4SAndroid Build Coastguard Worker eVoiceStateInvalid /* should never be in this state! */ 264*f81fb7c4SAndroid Build Coastguard Worker 265*f81fb7c4SAndroid Build Coastguard Worker } E_VOICE_STATE; 266*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_VOICE_STATE eVoiceStateFree 267*f81fb7c4SAndroid Build Coastguard Worker 268*f81fb7c4SAndroid Build Coastguard Worker typedef struct s_synth_voice_tag 269*f81fb7c4SAndroid Build Coastguard Worker { 270*f81fb7c4SAndroid Build Coastguard Worker 271*f81fb7c4SAndroid Build Coastguard Worker /* These parameters are common to both wavetable and FM 272*f81fb7c4SAndroid Build Coastguard Worker * synthesizers. The voice manager should only access this data. 273*f81fb7c4SAndroid Build Coastguard Worker * Any other data should be manipulated by the code that is 274*f81fb7c4SAndroid Build Coastguard Worker * specific to that synthesizer and reflected back through the 275*f81fb7c4SAndroid Build Coastguard Worker * common state data available here. 276*f81fb7c4SAndroid Build Coastguard Worker */ 277*f81fb7c4SAndroid Build Coastguard Worker EAS_U16 regionIndex; /* index to wave and playback params */ 278*f81fb7c4SAndroid Build Coastguard Worker EAS_I16 gain; /* current gain */ 279*f81fb7c4SAndroid Build Coastguard Worker EAS_U16 age; /* large value means old note */ 280*f81fb7c4SAndroid Build Coastguard Worker EAS_U16 nextRegionIndex; /* index to wave and playback params */ 281*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 voiceState; /* current voice state */ 282*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 voiceFlags; /* misc flags/bit fields */ 283*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 channel; /* this voice plays on this synth channel */ 284*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 note; /* 12 <= key number <= 108 */ 285*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 velocity; /* 0 <= velocity <= 127 */ 286*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 nextChannel; /* play stolen voice on this channel */ 287*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 nextNote; /* 12 <= key number <= 108 */ 288*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 nextVelocity; /* 0 <= velocity <= 127 */ 289*f81fb7c4SAndroid Build Coastguard Worker } S_SYNTH_VOICE; 290*f81fb7c4SAndroid Build Coastguard Worker 291*f81fb7c4SAndroid Build Coastguard Worker /*------------------------------------ 292*f81fb7c4SAndroid Build Coastguard Worker * S_SYNTH data structure 293*f81fb7c4SAndroid Build Coastguard Worker * 294*f81fb7c4SAndroid Build Coastguard Worker * One instance for each MIDI stream 295*f81fb7c4SAndroid Build Coastguard Worker *------------------------------------ 296*f81fb7c4SAndroid Build Coastguard Worker */ 297*f81fb7c4SAndroid Build Coastguard Worker 298*f81fb7c4SAndroid Build Coastguard Worker /* S_SYNTH.m_nFlags */ 299*f81fb7c4SAndroid Build Coastguard Worker #define SYNTH_FLAG_RESET_IS_REQUESTED 0x01 300*f81fb7c4SAndroid Build Coastguard Worker #define SYNTH_FLAG_SP_MIDI_ON 0x02 301*f81fb7c4SAndroid Build Coastguard Worker #define SYNTH_FLAG_UPDATE_ALL_CHANNEL_PARAMETERS 0x04 302*f81fb7c4SAndroid Build Coastguard Worker #define SYNTH_FLAG_DEFERRED_MIDI_NOTE_OFF_PENDING 0x08 303*f81fb7c4SAndroid Build Coastguard Worker #define DEFAULT_SYNTH_FLAGS SYNTH_FLAG_UPDATE_ALL_CHANNEL_PARAMETERS 304*f81fb7c4SAndroid Build Coastguard Worker 305*f81fb7c4SAndroid Build Coastguard Worker typedef struct s_synth_tag 306*f81fb7c4SAndroid Build Coastguard Worker { 307*f81fb7c4SAndroid Build Coastguard Worker struct s_eas_data_tag *pEASData; 308*f81fb7c4SAndroid Build Coastguard Worker const S_EAS *pEAS; 309*f81fb7c4SAndroid Build Coastguard Worker 310*f81fb7c4SAndroid Build Coastguard Worker #ifdef DLS_SYNTHESIZER 311*f81fb7c4SAndroid Build Coastguard Worker S_DLS *pDLS; 312*f81fb7c4SAndroid Build Coastguard Worker #endif 313*f81fb7c4SAndroid Build Coastguard Worker 314*f81fb7c4SAndroid Build Coastguard Worker #ifdef EXTERNAL_AUDIO 315*f81fb7c4SAndroid Build Coastguard Worker EAS_EXT_PRG_CHG_FUNC cbProgChgFunc; 316*f81fb7c4SAndroid Build Coastguard Worker EAS_EXT_EVENT_FUNC cbEventFunc; 317*f81fb7c4SAndroid Build Coastguard Worker EAS_VOID_PTR *pExtAudioInstData; 318*f81fb7c4SAndroid Build Coastguard Worker #endif 319*f81fb7c4SAndroid Build Coastguard Worker 320*f81fb7c4SAndroid Build Coastguard Worker S_SYNTH_CHANNEL channels[NUM_SYNTH_CHANNELS]; 321*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 totalNoteCount; 322*f81fb7c4SAndroid Build Coastguard Worker EAS_U16 maxPolyphony; 323*f81fb7c4SAndroid Build Coastguard Worker EAS_U16 numActiveVoices; 324*f81fb7c4SAndroid Build Coastguard Worker EAS_U16 masterVolume; 325*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 channelsByPriority[NUM_SYNTH_CHANNELS]; 326*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 poolCount[NUM_SYNTH_CHANNELS]; 327*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 poolAlloc[NUM_SYNTH_CHANNELS]; 328*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 synthFlags; 329*f81fb7c4SAndroid Build Coastguard Worker EAS_I8 globalTranspose; 330*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 vSynthNum; 331*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 refCount; 332*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 priority; 333*f81fb7c4SAndroid Build Coastguard Worker } S_SYNTH; 334*f81fb7c4SAndroid Build Coastguard Worker 335*f81fb7c4SAndroid Build Coastguard Worker /*------------------------------------ 336*f81fb7c4SAndroid Build Coastguard Worker * S_VOICE_MGR data structure 337*f81fb7c4SAndroid Build Coastguard Worker * 338*f81fb7c4SAndroid Build Coastguard Worker * One instance for each EAS library instance 339*f81fb7c4SAndroid Build Coastguard Worker *------------------------------------ 340*f81fb7c4SAndroid Build Coastguard Worker */ 341*f81fb7c4SAndroid Build Coastguard Worker typedef struct s_voice_mgr_tag 342*f81fb7c4SAndroid Build Coastguard Worker { 343*f81fb7c4SAndroid Build Coastguard Worker S_SYNTH *pSynth[MAX_VIRTUAL_SYNTHESIZERS]; 344*f81fb7c4SAndroid Build Coastguard Worker EAS_PCM voiceBuffer[SYNTH_UPDATE_PERIOD_IN_SAMPLES]; 345*f81fb7c4SAndroid Build Coastguard Worker 346*f81fb7c4SAndroid Build Coastguard Worker #ifdef _FM_SYNTH 347*f81fb7c4SAndroid Build Coastguard Worker EAS_PCM operMixBuffer[SYNTH_UPDATE_PERIOD_IN_SAMPLES]; 348*f81fb7c4SAndroid Build Coastguard Worker S_FM_VOICE fmVoices[NUM_FM_VOICES]; 349*f81fb7c4SAndroid Build Coastguard Worker #endif 350*f81fb7c4SAndroid Build Coastguard Worker 351*f81fb7c4SAndroid Build Coastguard Worker #ifdef _WT_SYNTH 352*f81fb7c4SAndroid Build Coastguard Worker S_WT_VOICE wtVoices[NUM_WT_VOICES]; 353*f81fb7c4SAndroid Build Coastguard Worker #endif 354*f81fb7c4SAndroid Build Coastguard Worker 355*f81fb7c4SAndroid Build Coastguard Worker #ifdef _REVERB 356*f81fb7c4SAndroid Build Coastguard Worker EAS_PCM reverbSendBuffer[NUM_OUTPUT_CHANNELS * SYNTH_UPDATE_PERIOD_IN_SAMPLES]; 357*f81fb7c4SAndroid Build Coastguard Worker #endif 358*f81fb7c4SAndroid Build Coastguard Worker 359*f81fb7c4SAndroid Build Coastguard Worker #ifdef _CHORUS 360*f81fb7c4SAndroid Build Coastguard Worker EAS_PCM chorusSendBuffer[NUM_OUTPUT_CHANNELS * SYNTH_UPDATE_PERIOD_IN_SAMPLES]; 361*f81fb7c4SAndroid Build Coastguard Worker #endif 362*f81fb7c4SAndroid Build Coastguard Worker S_SYNTH_VOICE voices[MAX_SYNTH_VOICES]; 363*f81fb7c4SAndroid Build Coastguard Worker 364*f81fb7c4SAndroid Build Coastguard Worker EAS_SNDLIB_HANDLE pGlobalEAS; 365*f81fb7c4SAndroid Build Coastguard Worker 366*f81fb7c4SAndroid Build Coastguard Worker #ifdef DLS_SYNTHESIZER 367*f81fb7c4SAndroid Build Coastguard Worker S_DLS *pGlobalDLS; 368*f81fb7c4SAndroid Build Coastguard Worker #endif 369*f81fb7c4SAndroid Build Coastguard Worker 370*f81fb7c4SAndroid Build Coastguard Worker #ifdef _SPLIT_ARCHITECTURE 371*f81fb7c4SAndroid Build Coastguard Worker EAS_FRAME_BUFFER_HANDLE pFrameBuffer; 372*f81fb7c4SAndroid Build Coastguard Worker #endif 373*f81fb7c4SAndroid Build Coastguard Worker 374*f81fb7c4SAndroid Build Coastguard Worker #if defined(_SECONDARY_SYNTH) || defined(EAS_SPLIT_WT_SYNTH) 375*f81fb7c4SAndroid Build Coastguard Worker EAS_U16 maxPolyphonyPrimary; 376*f81fb7c4SAndroid Build Coastguard Worker EAS_U16 maxPolyphonySecondary; 377*f81fb7c4SAndroid Build Coastguard Worker #endif 378*f81fb7c4SAndroid Build Coastguard Worker 379*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 workload; 380*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 maxWorkLoad; 381*f81fb7c4SAndroid Build Coastguard Worker 382*f81fb7c4SAndroid Build Coastguard Worker EAS_U16 activeVoices; 383*f81fb7c4SAndroid Build Coastguard Worker EAS_U16 maxPolyphony; 384*f81fb7c4SAndroid Build Coastguard Worker 385*f81fb7c4SAndroid Build Coastguard Worker EAS_U16 age; 386*f81fb7c4SAndroid Build Coastguard Worker 387*f81fb7c4SAndroid Build Coastguard Worker /* limits the number of voice starts in a frame for split architecture */ 388*f81fb7c4SAndroid Build Coastguard Worker #ifdef MAX_VOICE_STARTS 389*f81fb7c4SAndroid Build Coastguard Worker EAS_U16 numVoiceStarts; 390*f81fb7c4SAndroid Build Coastguard Worker #endif 391*f81fb7c4SAndroid Build Coastguard Worker } S_VOICE_MGR; 392*f81fb7c4SAndroid Build Coastguard Worker 393*f81fb7c4SAndroid Build Coastguard Worker #endif /* #ifdef _EAS_SYNTH_H */ 394*f81fb7c4SAndroid Build Coastguard Worker 395*f81fb7c4SAndroid Build Coastguard Worker 396