From a8c89077d78769bf4840fa91609edc51fe2fa02d Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Queru Date: Thu, 12 Nov 2009 18:45:37 -0800 Subject: eclair snapshot --- arm-hybrid-22k/lib_src/eas_wtengine.h | 318 +++++++++++++++++----------------- 1 file changed, 159 insertions(+), 159 deletions(-) (limited to 'arm-hybrid-22k/lib_src/eas_wtengine.h') diff --git a/arm-hybrid-22k/lib_src/eas_wtengine.h b/arm-hybrid-22k/lib_src/eas_wtengine.h index 6401322..bba7a5e 100644 --- a/arm-hybrid-22k/lib_src/eas_wtengine.h +++ b/arm-hybrid-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 -- cgit v1.2.3