diff options
Diffstat (limited to 'arm-wt-22k/lib_src/eas_wtengine.h')
-rw-r--r-- | arm-wt-22k/lib_src/eas_wtengine.h | 318 |
1 files changed, 159 insertions, 159 deletions
diff --git a/arm-wt-22k/lib_src/eas_wtengine.h b/arm-wt-22k/lib_src/eas_wtengine.h index 6401322..bba7a5e 100644 --- a/arm-wt-22k/lib_src/eas_wtengine.h +++ b/arm-wt-22k/lib_src/eas_wtengine.h @@ -1,12 +1,12 @@ -/*----------------------------------------------------------------------------
- *
- * File:
- * eas_wtengine.h
- *
- * Contents and purpose:
- * This file defines the interface for wavetable synthesis engine
- *
- * Copyright Sonic Network Inc. 2004
+/*---------------------------------------------------------------------------- + * + * File: + * eas_wtengine.h + * + * Contents and purpose: + * This file defines the interface for wavetable synthesis engine + * + * Copyright Sonic Network Inc. 2004 * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,153 +19,153 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - *
- *----------------------------------------------------------------------------
- * Revision Control:
- * $Revision: 818 $
- * $Date: 2007-08-02 15:19:41 -0700 (Thu, 02 Aug 2007) $
- *----------------------------------------------------------------------------
-*/
-
-#ifndef _EAS_WTENGINE_H
-#define _EAS_WTENGINE_H
-
-/* option sanity check */
-#if defined(_OPTIMIZED_MONO) && defined(_FILTER_ENABLED)
-#error "Incompatible build settings: _OPTIMIZED_MONO cannot be used with _FILTER_ENABLED"
-#endif
-
-#if defined(_OPTIMIZED_MONO) && (NUM_OUTPUT_CHANNELS != 1)
-#error "Incompatible build settings: _OPTIMIZED_MONO can only be used with NUM_OUTPUT_CHANNELS = 1"
-#endif
-
-#include "eas_wt_IPC_frame.h"
-
-/*----------------------------------------------------------------------------
- * defines
- *----------------------------------------------------------------------------
-*/
-#define WT_NOISE_GENERATOR 0xffffffff
-
-/*----------------------------------------------------------------------------
- * typedefs
- *----------------------------------------------------------------------------
-*/
-
-/*----------------------------------------------------------------------------
- * S_WT_INT_FRAME
- *
- * This structure includes S_WT_FRAME plus the bus mixing
- * parameters for the internal voices.
- *----------------------------------------------------------------------------
-*/
-typedef struct s_wt_int_frame_tag
-{
- S_WT_FRAME frame;
- EAS_PCM *pAudioBuffer;
- EAS_I32 *pMixBuffer;
- EAS_I32 numSamples;
- EAS_I32 prevGain;
-} S_WT_INT_FRAME;
-
-#if defined(_FILTER_ENABLED)
-/*----------------------------------------------------------------------------
- * S_FILTER_CONTROL data structure
- *----------------------------------------------------------------------------
-*/
-typedef struct s_filter_control_tag
-{
- EAS_I16 z1; /* 1 sample delay state variable */
- EAS_I16 z2; /* 2 sample delay state variable */
-} S_FILTER_CONTROL;
-#endif
-
-/*------------------------------------
- * S_LFO_CONTROL data structure
- *------------------------------------
-*/
-typedef struct s_lfo_control_tag
-{
- EAS_I16 lfoValue; /* LFO current output value */
- EAS_I16 lfoPhase; /* LFO current phase */
-} S_LFO_CONTROL;
-
-/* bit definitions for S_WT_VOICE:flags */
-#define WT_FLAGS_ADPCM_NIBBLE 1 /* high/low nibble flag */
-#define WT_FLAGS_ADPCM_READY 2 /* first 2 samples are decoded */
-#define WT_FLAGS_USE_ADPCM 4 /* sample is ADPCM encoded */
-
-/* eg1State and eg2State */
-typedef enum {
- eEnvelopeStateInit = 0,
- eEnvelopeStateDelay,
- eEnvelopeStateAttack,
- eEnvelopeStateHold,
- eEnvelopeStateDecay,
- eEnvelopeStateSustain,
- eEnvelopeStateRelease,
- eEnvelopeStateMuting,
- eEnvelopeStateMuted,
- eEnvelopeStateInvalid /* should never be in this state! */
-} E_ENVELOPE_STATE;
-
-#define DEFAULT_EG1_STATE eEnvelopeStateAttack
-#define DEFAULT_EG1_VALUE 0
-#define DEFAULT_EG1_INCREMENT 0
-#define DEFAULT_EG2_STATE eEnvelopeStateAttack
-#define DEFAULT_EG2_VALUE 0
-#define DEFAULT_EG2_INCREMENT 0
-
-/*----------------------------------------------------------------------------
- * S_WT_VOICE
- *
- * This structure contains state data for the wavetable engine
- *----------------------------------------------------------------------------
-*/
-typedef struct s_wt_voice_tag
-{
- EAS_U32 loopEnd; /* points to last PCM sample (not 1 beyond last) */
- EAS_U32 loopStart; /* points to first sample at start of loop */
- EAS_U32 phaseAccum; /* current sample, integer portion of phase */
- EAS_U32 phaseFrac; /* fractional portion of phase */
-
-#if (NUM_OUTPUT_CHANNELS == 2)
- EAS_I16 gainLeft; /* current gain, left ch */
- EAS_I16 gainRight; /* current gain, right ch */
-#endif
-
-#if defined(_FILTER_ENABLED)
- S_FILTER_CONTROL filter; /* low pass filter */
-#endif
-
- S_LFO_CONTROL modLFO; /* modulator LFO */
-
-#ifdef DLS_SYNTHESIZER
- S_LFO_CONTROL vibLFO; /* vibrato LFO */
-#endif
-
- /* envelope control */
- EAS_I16 eg1Value;
- EAS_I16 eg2Value;
- EAS_I16 eg1Increment;
- EAS_I16 eg2Increment;
- EAS_U8 eg1State;
- EAS_U8 eg2State;
-
- EAS_U16 artIndex; /* index to articulation params */
-
-} S_WT_VOICE;
-
-/*----------------------------------------------------------------------------
- * prototypes
- *----------------------------------------------------------------------------
-*/
-EAS_BOOL WT_CheckSampleEnd (S_WT_VOICE *pWTVoice, S_WT_INT_FRAME *pWTIntFrame, EAS_BOOL update);
-void WT_ProcessVoice (S_WT_VOICE *pWTVoice, S_WT_INT_FRAME *pWTIntFrame);
-
-#ifdef EAS_SPLIT_WT_SYNTH
-void WTE_ConfigVoice (EAS_I32 voiceNum, S_WT_CONFIG *pWTConfig, EAS_FRAME_BUFFER_HANDLE pFrameBuffer);
-void WTE_ProcessVoice (EAS_I32 voiceNum, S_WT_FRAME *pWTParams, EAS_FRAME_BUFFER_HANDLE pFrameBuffer);
-#endif
-
-#endif
+ * + *---------------------------------------------------------------------------- + * Revision Control: + * $Revision: 818 $ + * $Date: 2007-08-02 15:19:41 -0700 (Thu, 02 Aug 2007) $ + *---------------------------------------------------------------------------- +*/ + +#ifndef _EAS_WTENGINE_H +#define _EAS_WTENGINE_H + +/* option sanity check */ +#if defined(_OPTIMIZED_MONO) && defined(_FILTER_ENABLED) +#error "Incompatible build settings: _OPTIMIZED_MONO cannot be used with _FILTER_ENABLED" +#endif + +#if defined(_OPTIMIZED_MONO) && (NUM_OUTPUT_CHANNELS != 1) +#error "Incompatible build settings: _OPTIMIZED_MONO can only be used with NUM_OUTPUT_CHANNELS = 1" +#endif + +#include "eas_wt_IPC_frame.h" + +/*---------------------------------------------------------------------------- + * defines + *---------------------------------------------------------------------------- +*/ +#define WT_NOISE_GENERATOR 0xffffffff + +/*---------------------------------------------------------------------------- + * typedefs + *---------------------------------------------------------------------------- +*/ + +/*---------------------------------------------------------------------------- + * S_WT_INT_FRAME + * + * This structure includes S_WT_FRAME plus the bus mixing + * parameters for the internal voices. + *---------------------------------------------------------------------------- +*/ +typedef struct s_wt_int_frame_tag +{ + S_WT_FRAME frame; + EAS_PCM *pAudioBuffer; + EAS_I32 *pMixBuffer; + EAS_I32 numSamples; + EAS_I32 prevGain; +} S_WT_INT_FRAME; + +#if defined(_FILTER_ENABLED) +/*---------------------------------------------------------------------------- + * S_FILTER_CONTROL data structure + *---------------------------------------------------------------------------- +*/ +typedef struct s_filter_control_tag +{ + EAS_I16 z1; /* 1 sample delay state variable */ + EAS_I16 z2; /* 2 sample delay state variable */ +} S_FILTER_CONTROL; +#endif + +/*------------------------------------ + * S_LFO_CONTROL data structure + *------------------------------------ +*/ +typedef struct s_lfo_control_tag +{ + EAS_I16 lfoValue; /* LFO current output value */ + EAS_I16 lfoPhase; /* LFO current phase */ +} S_LFO_CONTROL; + +/* bit definitions for S_WT_VOICE:flags */ +#define WT_FLAGS_ADPCM_NIBBLE 1 /* high/low nibble flag */ +#define WT_FLAGS_ADPCM_READY 2 /* first 2 samples are decoded */ +#define WT_FLAGS_USE_ADPCM 4 /* sample is ADPCM encoded */ + +/* eg1State and eg2State */ +typedef enum { + eEnvelopeStateInit = 0, + eEnvelopeStateDelay, + eEnvelopeStateAttack, + eEnvelopeStateHold, + eEnvelopeStateDecay, + eEnvelopeStateSustain, + eEnvelopeStateRelease, + eEnvelopeStateMuting, + eEnvelopeStateMuted, + eEnvelopeStateInvalid /* should never be in this state! */ +} E_ENVELOPE_STATE; + +#define DEFAULT_EG1_STATE eEnvelopeStateAttack +#define DEFAULT_EG1_VALUE 0 +#define DEFAULT_EG1_INCREMENT 0 +#define DEFAULT_EG2_STATE eEnvelopeStateAttack +#define DEFAULT_EG2_VALUE 0 +#define DEFAULT_EG2_INCREMENT 0 + +/*---------------------------------------------------------------------------- + * S_WT_VOICE + * + * This structure contains state data for the wavetable engine + *---------------------------------------------------------------------------- +*/ +typedef struct s_wt_voice_tag +{ + EAS_U32 loopEnd; /* points to last PCM sample (not 1 beyond last) */ + EAS_U32 loopStart; /* points to first sample at start of loop */ + EAS_U32 phaseAccum; /* current sample, integer portion of phase */ + EAS_U32 phaseFrac; /* fractional portion of phase */ + +#if (NUM_OUTPUT_CHANNELS == 2) + EAS_I16 gainLeft; /* current gain, left ch */ + EAS_I16 gainRight; /* current gain, right ch */ +#endif + +#if defined(_FILTER_ENABLED) + S_FILTER_CONTROL filter; /* low pass filter */ +#endif + + S_LFO_CONTROL modLFO; /* modulator LFO */ + +#ifdef DLS_SYNTHESIZER + S_LFO_CONTROL vibLFO; /* vibrato LFO */ +#endif + + /* envelope control */ + EAS_I16 eg1Value; + EAS_I16 eg2Value; + EAS_I16 eg1Increment; + EAS_I16 eg2Increment; + EAS_U8 eg1State; + EAS_U8 eg2State; + + EAS_U16 artIndex; /* index to articulation params */ + +} S_WT_VOICE; + +/*---------------------------------------------------------------------------- + * prototypes + *---------------------------------------------------------------------------- +*/ +EAS_BOOL WT_CheckSampleEnd (S_WT_VOICE *pWTVoice, S_WT_INT_FRAME *pWTIntFrame, EAS_BOOL update); +void WT_ProcessVoice (S_WT_VOICE *pWTVoice, S_WT_INT_FRAME *pWTIntFrame); + +#ifdef EAS_SPLIT_WT_SYNTH +void WTE_ConfigVoice (EAS_I32 voiceNum, S_WT_CONFIG *pWTConfig, EAS_FRAME_BUFFER_HANDLE pFrameBuffer); +void WTE_ProcessVoice (EAS_I32 voiceNum, S_WT_FRAME *pWTParams, EAS_FRAME_BUFFER_HANDLE pFrameBuffer); +#endif + +#endif |