eas_fmsynth.h revision 7df30109963092559d3760c0661a020f9daf1030
13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)/*----------------------------------------------------------------------------
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * File:
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * eas_fmsynth.h
53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) *
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Contents and purpose:
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Implements the FM synthesizer functions.
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Copyright Sonic Network Inc. 2004
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License");
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * you may not use this file except in compliance with the License.
133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * You may obtain a copy of the License at
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) *      http://www.apache.org/licenses/LICENSE-2.0
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS,
193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * See the License for the specific language governing permissions and
213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * limitations under the License.
223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) *
233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) *----------------------------------------------------------------------------
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Revision Control:
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   $Revision: 90 $
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   $Date: 2006-07-11 20:18:13 -0700 (Tue, 11 Jul 2006) $
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *----------------------------------------------------------------------------
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef fmsynthH
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define fmsynthH
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "eas_data.h"
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined (_FM_SYNTH)
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/* FM envelope state */
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef enum {
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	eFMEnvelopeStateAttack = 0,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	eFMEnvelopeStateDecay,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	eFMEnvelopeStateSustain,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	eFMEnvelopeStateRelease,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	eFMEnvelopeStateMuted,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	eFMEnvelopeStateInvalid			/* should never be in this state! */
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} E_FM_ENVELOPE_STATE;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*------------------------------------
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * S_OPERATOR data structure
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *------------------------------------
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct s_operator_tag
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	EAS_I16		pitch;				/* operator pitch in cents */
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EAS_U16		envGain;			/* envelope target */
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EAS_I16		baseGain;			/* patch gain (inc. vel & key scale) */
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EAS_U16		outputGain;			/* current output gain */
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EAS_U16		envRate;			/* calculated envelope rate */
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EAS_U8		envState;			/* envelope state */
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EAS_U8		pad;				/* pad to 16-bits */
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} S_OPERATOR;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct s_fm_voice_tag
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	S_OPERATOR			oper[4];		/* operator data */
6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    EAS_I16				voiceGain;		/* LFO + channel parameters */
6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)	EAS_U16				lfoPhase;		/* LFO current phase */
6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)	EAS_I16				lfoValue;		/* LFO current value */
6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)	EAS_U16				lfoDelay;		/* keeps track of elapsed delay time */
7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)	EAS_I8				pan;			/* stereo pan value (-64 to +64) */
7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)	EAS_I8				pad;			/* reserved to maintain alignment */
7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} S_FM_VOICE;
7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifdef _FM_EDITOR
7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)extern S_FM_REGION newPatch;
7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)extern S_FM_REGION OriginalPatch;
7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif
7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)extern EAS_U32 freqTable[];
8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif
8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)