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