eas_fmsynth.h revision 7df30109963092559d3760c0661a020f9daf1030
1f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com/*----------------------------------------------------------------------------
23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org *
33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org * File:
43a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org * eas_fmsynth.h
5ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org *
6ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org * Contents and purpose:
73a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org * Implements the FM synthesizer functions.
83a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org *
93a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org * Copyright Sonic Network Inc. 2004
103a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org
113a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org * Licensed under the Apache License, Version 2.0 (the "License");
123a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org * you may not use this file except in compliance with the License.
13f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org * You may obtain a copy of the License at
14f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org *
15f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org *      http://www.apache.org/licenses/LICENSE-2.0
16f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org *
17f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org * Unless required by applicable law or agreed to in writing, software
18f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org * distributed under the License is distributed on an "AS IS" BASIS,
19f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org * See the License for the specific language governing permissions and
21f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org * limitations under the License.
223a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org *
233a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org *----------------------------------------------------------------------------
247028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org * Revision Control:
25f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org *   $Revision: 90 $
26f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org *   $Date: 2006-07-11 20:18:13 -0700 (Tue, 11 Jul 2006) $
27f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org *----------------------------------------------------------------------------
28f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org*/
293a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org
303a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org#ifndef fmsynthH
313a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org#define fmsynthH
323a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org
333a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org#include "eas_data.h"
343a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org
353a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org#if defined (_FM_SYNTH)
363a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org
373a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org/* FM envelope state */
383a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.orgtypedef enum {
393a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org	eFMEnvelopeStateAttack = 0,
403a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org	eFMEnvelopeStateDecay,
413a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org	eFMEnvelopeStateSustain,
423a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org	eFMEnvelopeStateRelease,
433a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org	eFMEnvelopeStateMuted,
443a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org	eFMEnvelopeStateInvalid			/* should never be in this state! */
453a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org} E_FM_ENVELOPE_STATE;
463a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org
473a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org/*------------------------------------
483a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org * S_OPERATOR data structure
493a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org *------------------------------------
503a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org*/
513a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.orgtypedef struct s_operator_tag
523a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org{
533a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org	EAS_I16		pitch;				/* operator pitch in cents */
543a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org    EAS_U16		envGain;			/* envelope target */
553a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org    EAS_I16		baseGain;			/* patch gain (inc. vel & key scale) */
563a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org    EAS_U16		outputGain;			/* current output gain */
573a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org    EAS_U16		envRate;			/* calculated envelope rate */
58f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org    EAS_U8		envState;			/* envelope state */
59f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org    EAS_U8		pad;				/* pad to 16-bits */
60f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org} S_OPERATOR;
61f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org#endif
62f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.org
63f05311f128ad22c89cfb6063d9375945c02239b5machenbach@chromium.orgtypedef struct s_fm_voice_tag
643a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org{
653a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org	S_OPERATOR			oper[4];		/* operator data */
663a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org    EAS_I16				voiceGain;		/* LFO + channel parameters */
673a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org	EAS_U16				lfoPhase;		/* LFO current phase */
683a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org	EAS_I16				lfoValue;		/* LFO current value */
693a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org	EAS_U16				lfoDelay;		/* keeps track of elapsed delay time */
703a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org	EAS_I8				pan;			/* stereo pan value (-64 to +64) */
713a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org	EAS_I8				pad;			/* reserved to maintain alignment */
723a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org} S_FM_VOICE;
733a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org
743a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org#ifdef _FM_EDITOR
753a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.orgextern S_FM_REGION newPatch;
767028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgextern S_FM_REGION OriginalPatch;
773a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org#endif
783a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org
793a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.orgextern EAS_U32 freqTable[];
803a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org
813a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org#endif
823a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org