| /*---------------------------------------------------------------------------- |
| * |
| * File: |
| * eas_fmsynth.h |
| * |
| * Contents and purpose: |
| * Implements the FM synthesizer functions. |
| * |
| * Copyright Sonic Network Inc. 2004 |
| |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| *---------------------------------------------------------------------------- |
| * Revision Control: |
| * $Revision: 90 $ |
| * $Date: 2006-07-11 20:18:13 -0700 (Tue, 11 Jul 2006) $ |
| *---------------------------------------------------------------------------- |
| */ |
| |
| #ifndef fmsynthH |
| #define fmsynthH |
| |
| #include "eas_data.h" |
| |
| #if defined (_FM_SYNTH) |
| |
| /* FM envelope state */ |
| typedef enum { |
| eFMEnvelopeStateAttack = 0, |
| eFMEnvelopeStateDecay, |
| eFMEnvelopeStateSustain, |
| eFMEnvelopeStateRelease, |
| eFMEnvelopeStateMuted, |
| eFMEnvelopeStateInvalid /* should never be in this state! */ |
| } E_FM_ENVELOPE_STATE; |
| |
| /*------------------------------------ |
| * S_OPERATOR data structure |
| *------------------------------------ |
| */ |
| typedef struct s_operator_tag |
| { |
| EAS_I16 pitch; /* operator pitch in cents */ |
| EAS_U16 envGain; /* envelope target */ |
| EAS_I16 baseGain; /* patch gain (inc. vel & key scale) */ |
| EAS_U16 outputGain; /* current output gain */ |
| EAS_U16 envRate; /* calculated envelope rate */ |
| EAS_U8 envState; /* envelope state */ |
| EAS_U8 pad; /* pad to 16-bits */ |
| } S_OPERATOR; |
| #endif |
| |
| typedef struct s_fm_voice_tag |
| { |
| S_OPERATOR oper[4]; /* operator data */ |
| EAS_I16 voiceGain; /* LFO + channel parameters */ |
| EAS_U16 lfoPhase; /* LFO current phase */ |
| EAS_I16 lfoValue; /* LFO current value */ |
| EAS_U16 lfoDelay; /* keeps track of elapsed delay time */ |
| EAS_I8 pan; /* stereo pan value (-64 to +64) */ |
| EAS_I8 pad; /* reserved to maintain alignment */ |
| } S_FM_VOICE; |
| |
| #ifdef _FM_EDITOR |
| extern S_FM_REGION newPatch; |
| extern S_FM_REGION OriginalPatch; |
| #endif |
| |
| extern EAS_U32 freqTable[]; |
| |
| #endif |