| /*---------------------------------------------------------------------------- |
| * |
| * 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 */ |
| |
| |