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)