Home | History | Annotate | Download | only in lib_src
      1 /*----------------------------------------------------------------------------
      2  *
      3  * File:
      4  * eas_fmsynth.h
      5  *
      6  * Contents and purpose:
      7  * Implements the FM synthesizer functions.
      8  *
      9  * Copyright Sonic Network Inc. 2004
     10 
     11  * Licensed under the Apache License, Version 2.0 (the "License");
     12  * you may not use this file except in compliance with the License.
     13  * You may obtain a copy of the License at
     14  *
     15  *      http://www.apache.org/licenses/LICENSE-2.0
     16  *
     17  * Unless required by applicable law or agreed to in writing, software
     18  * distributed under the License is distributed on an "AS IS" BASIS,
     19  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     20  * See the License for the specific language governing permissions and
     21  * limitations under the License.
     22  *
     23  *----------------------------------------------------------------------------
     24  * Revision Control:
     25  *   $Revision: 90 $
     26  *   $Date: 2006-07-11 20:18:13 -0700 (Tue, 11 Jul 2006) $
     27  *----------------------------------------------------------------------------
     28 */
     29 
     30 #ifndef fmsynthH
     31 #define fmsynthH
     32 
     33 #include "eas_data.h"
     34 
     35 #if defined (_FM_SYNTH)
     36 
     37 /* FM envelope state */
     38 typedef enum {
     39     eFMEnvelopeStateAttack = 0,
     40     eFMEnvelopeStateDecay,
     41     eFMEnvelopeStateSustain,
     42     eFMEnvelopeStateRelease,
     43     eFMEnvelopeStateMuted,
     44     eFMEnvelopeStateInvalid         /* should never be in this state! */
     45 } E_FM_ENVELOPE_STATE;
     46 
     47 /*------------------------------------
     48  * S_OPERATOR data structure
     49  *------------------------------------
     50 */
     51 typedef struct s_operator_tag
     52 {
     53     EAS_I16     pitch;              /* operator pitch in cents */
     54     EAS_U16     envGain;            /* envelope target */
     55     EAS_I16     baseGain;           /* patch gain (inc. vel & key scale) */
     56     EAS_U16     outputGain;         /* current output gain */
     57     EAS_U16     envRate;            /* calculated envelope rate */
     58     EAS_U8      envState;           /* envelope state */
     59     EAS_U8      pad;                /* pad to 16-bits */
     60 } S_OPERATOR;
     61 #endif
     62 
     63 typedef struct s_fm_voice_tag
     64 {
     65     S_OPERATOR          oper[4];        /* operator data */
     66     EAS_I16             voiceGain;      /* LFO + channel parameters */
     67     EAS_U16             lfoPhase;       /* LFO current phase */
     68     EAS_I16             lfoValue;       /* LFO current value */
     69     EAS_U16             lfoDelay;       /* keeps track of elapsed delay time */
     70     EAS_I8              pan;            /* stereo pan value (-64 to +64) */
     71     EAS_I8              pad;            /* reserved to maintain alignment */
     72 } S_FM_VOICE;
     73 
     74 #ifdef _FM_EDITOR
     75 extern S_FM_REGION newPatch;
     76 extern S_FM_REGION OriginalPatch;
     77 #endif
     78 
     79 extern EAS_U32 freqTable[];
     80 
     81 #endif
     82