summaryrefslogtreecommitdiffstats
path: root/arm-fm-22k/lib_src/eas_fmsynth.h
diff options
context:
space:
mode:
Diffstat (limited to 'arm-fm-22k/lib_src/eas_fmsynth.h')
-rw-r--r--arm-fm-22k/lib_src/eas_fmsynth.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/arm-fm-22k/lib_src/eas_fmsynth.h b/arm-fm-22k/lib_src/eas_fmsynth.h
new file mode 100644
index 0000000..76f8adc
--- /dev/null
+++ b/arm-fm-22k/lib_src/eas_fmsynth.h
@@ -0,0 +1,81 @@
+/*----------------------------------------------------------------------------
+ *
+ * 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