xref: /aosp_15_r20/external/sonivox/arm-wt-22k/lib_src/eas_synth.h (revision f81fb7c475c4b71ff83bdcc517de2a8c174e4e5c)
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