mirror of
https://github.com/id-Software/DOOM-IOS2.git
synced 2026-03-19 16:39:26 +01:00
161 lines
4.7 KiB
C
Executable File
161 lines
4.7 KiB
C
Executable File
/*----------------------------------------------------------------------------
|
|
*
|
|
* 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
|
|
*
|
|
*----------------------------------------------------------------------------
|
|
*/
|
|
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:
|
|
*
|
|
*----------------------------------------------------------------------------
|
|
*/
|
|
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
|
|
*----------------------------------------------------------------------------
|
|
*/
|
|
EAS_RESULT ChorusUpdate(S_CHORUS_OBJECT* pChorusData);
|
|
|
|
#endif /* #ifndef _EAS_CHORUSDATA_H */
|
|
|
|
|