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