156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File: 456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * eas_fmsynth.h 556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Contents and purpose: 756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Implements the FM synthesizer functions. 856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copyright Sonic Network Inc. 2004 107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * you may not use this file except in compliance with the License. 137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * You may obtain a copy of the License at 147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * See the License for the specific language governing permissions and 217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * limitations under the License. 2256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 2356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 2456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Revision Control: 2556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * $Revision: 90 $ 2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * $Date: 2006-07-11 20:18:13 -0700 (Tue, 11 Jul 2006) $ 2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef fmsynthH 3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define fmsynthH 3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_data.h" 3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if defined (_FM_SYNTH) 3656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* FM envelope state */ 3856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef enum { 3956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eFMEnvelopeStateAttack = 0, 4056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eFMEnvelopeStateDecay, 4156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eFMEnvelopeStateSustain, 4256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eFMEnvelopeStateRelease, 4356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eFMEnvelopeStateMuted, 4456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eFMEnvelopeStateInvalid /* should never be in this state! */ 4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} E_FM_ENVELOPE_STATE; 4656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*------------------------------------ 4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * S_OPERATOR data structure 4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *------------------------------------ 5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_operator_tag 5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 pitch; /* operator pitch in cents */ 5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 envGain; /* envelope target */ 5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 baseGain; /* patch gain (inc. vel & key scale) */ 5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 outputGain; /* current output gain */ 5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 envRate; /* calculated envelope rate */ 5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 envState; /* envelope state */ 5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 pad; /* pad to 16-bits */ 6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_OPERATOR; 6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct s_fm_voice_tag 6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_OPERATOR oper[4]; /* operator data */ 6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 voiceGain; /* LFO + channel parameters */ 6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 lfoPhase; /* LFO current phase */ 6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 lfoValue; /* LFO current value */ 6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 lfoDelay; /* keeps track of elapsed delay time */ 7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I8 pan; /* stereo pan value (-64 to +64) */ 7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I8 pad; /* reserved to maintain alignment */ 7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} S_FM_VOICE; 7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _FM_EDITOR 7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksextern S_FM_REGION newPatch; 7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksextern S_FM_REGION OriginalPatch; 7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksextern EAS_U32 freqTable[]; 8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 82