• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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