/*---------------------------------------------------------------------------- | |
* | |
* File: | |
* eas_chorusdata.h | |
* | |
* Contents and purpose: | |
* Contains the prototypes for the Chorus effect. | |
* | |
* | |
* Copyright Sonic Network Inc. 2006 | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* 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: 309 $ | |
* $Date: 2006-09-12 18:52:45 -0700 (Tue, 12 Sep 2006) $ | |
*---------------------------------------------------------------------------- | |
*/ | |
#ifndef _EAS_CHORUS_H | |
#define _EAS_CHORUS_H | |
#include "eas_types.h" | |
#include "eas_audioconst.h" | |
//defines for chorus | |
#define EAS_CHORUS_BYPASS_DEFAULT 1 | |
#define EAS_CHORUS_PRESET_DEFAULT 0 | |
#define EAS_CHORUS_RATE_DEFAULT 30 | |
#define EAS_CHORUS_DEPTH_DEFAULT 39 | |
#define EAS_CHORUS_LEVEL_DEFAULT 32767 | |
#define EAS_CHORUS_LEVEL_MIN 0 | |
#define EAS_CHORUS_LEVEL_MAX 32767 | |
#define EAS_CHORUS_RATE_MIN 10 | |
#define EAS_CHORUS_RATE_MAX 50 | |
#define EAS_CHORUS_DEPTH_MIN 15 | |
#define EAS_CHORUS_DEPTH_MAX 60 | |
#define CHORUS_SIZE_MS 20 | |
#define CHORUS_L_SIZE ((CHORUS_SIZE_MS*_OUTPUT_SAMPLE_RATE)/1000) | |
#define CHORUS_R_SIZE CHORUS_L_SIZE | |
#define CHORUS_SHAPE_SIZE 128 | |
#define CHORUS_DELAY_MS 10 | |
#define CHORUS_MAX_TYPE 4 // any Chorus numbers larger than this are invalid | |
typedef struct | |
{ | |
EAS_I16 m_nRate; | |
EAS_I16 m_nDepth; | |
EAS_I16 m_nLevel; | |
} S_CHORUS_PRESET; | |
typedef struct | |
{ | |
S_CHORUS_PRESET m_sPreset[CHORUS_MAX_TYPE]; //array of presets | |
} S_CHORUS_PRESET_BANK; | |
/* parameters for each Chorus */ | |
typedef struct | |
{ | |
EAS_I32 lfoLPhase; | |
EAS_I32 lfoRPhase; | |
EAS_I16 chorusIndexL; | |
EAS_I16 chorusIndexR; | |
EAS_U16 chorusTapPosition; | |
EAS_I16 m_nRate; | |
EAS_I16 m_nDepth; | |
EAS_I16 m_nLevel; | |
//delay lines used by the chorus, longer would sound better | |
EAS_PCM chorusDelayL[CHORUS_L_SIZE]; | |
EAS_PCM chorusDelayR[CHORUS_R_SIZE]; | |
EAS_BOOL bypass; | |
EAS_I8 preset; | |
EAS_I16 m_nCurrentChorus; // preset number for current Chorus | |
EAS_I16 m_nNextChorus; // preset number for next Chorus | |
S_CHORUS_PRESET pPreset; | |
S_CHORUS_PRESET_BANK m_sPreset; | |
} S_CHORUS_OBJECT; | |
/*---------------------------------------------------------------------------- | |
* WeightedTap() | |
*---------------------------------------------------------------------------- | |
* Purpose: Does fractional array look-up using linear interpolation | |
* | |
* first convert indexDesired to actual desired index by taking into account indexReference | |
* then do linear interpolation between two actual samples using fractional part | |
* | |
* Inputs: | |
* array: pointer to array of signed 16 bit values, typically either PCM data or control data | |
* indexReference: the circular buffer relative offset | |
* indexDesired: the fractional index we are looking up (16 bits index + 16 bits fraction) | |
* indexLimit: the total size of the array, used to compute buffer wrap | |
* | |
* Outputs: | |
* Value from the input array, linearly interpolated between two actual data values | |
* | |
*---------------------------------------------------------------------------- | |
*/ | |
static EAS_I16 WeightedTap(const EAS_I16 *array, EAS_I16 indexReference, EAS_I32 indexDesired, EAS_I16 indexLimit); | |
/*---------------------------------------------------------------------------- | |
* ChorusReadInPresets() | |
*---------------------------------------------------------------------------- | |
* Purpose: sets global Chorus preset bank to defaults | |
* | |
* Inputs: | |
* | |
* Outputs: | |
* | |
*---------------------------------------------------------------------------- | |
*/ | |
static EAS_RESULT ChorusReadInPresets(S_CHORUS_OBJECT *pChorusData); | |
/*---------------------------------------------------------------------------- | |
* ChorusUpdate | |
*---------------------------------------------------------------------------- | |
* Purpose: | |
* Update the Chorus preset parameters as required | |
* | |
* Inputs: | |
* | |
* Outputs: | |
* | |
* | |
* Side Effects: | |
* - chorus paramters will be changed | |
* - m_nCurrentChorus := m_nNextChorus | |
*---------------------------------------------------------------------------- | |
*/ | |
static EAS_RESULT ChorusUpdate(S_CHORUS_OBJECT* pChorusData); | |
#endif /* #ifndef _EAS_CHORUSDATA_H */ | |