/*---------------------------------------------------------------------------- * * 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