mirror of
https://github.com/id-Software/DOOM-IOS2.git
synced 2026-03-20 08:59:35 +01:00
Initial Commit
This commit is contained in:
160
common/embeddedaudiosynthesis/arm-fm-22k/lib_src/eas_chorusdata.h
Executable file
160
common/embeddedaudiosynthesis/arm-fm-22k/lib_src/eas_chorusdata.h
Executable file
@@ -0,0 +1,160 @@
|
||||
/*----------------------------------------------------------------------------
|
||||
*
|
||||
* 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 */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user