1135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/* 2135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Copyright (C) 2008 The Android Open Source Project 3135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 4135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 5135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * you may not use this file except in compliance with the License. 6135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * You may obtain a copy of the License at 7135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 8135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * http://www.apache.org/licenses/LICENSE-2.0 9135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 10135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Unless required by applicable law or agreed to in writing, software 11135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 12135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * See the License for the specific language governing permissions and 14135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * limitations under the License. 15135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent */ 16135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 17135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#ifndef ANDROID_EFFECTREVERB_H_ 18135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define ANDROID_EFFECTREVERB_H_ 19135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 206d8b694d999e9be7d5dcc336535832a80fb6f61fEric Laurent#include <audio_effects/effect_environmentalreverb.h> 216d8b694d999e9be7d5dcc336535832a80fb6f61fEric Laurent#include <audio_effects/effect_presetreverb.h> 22135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 23135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 24135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/*------------------------------------ 25135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * defines 26135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *------------------------------------ 27135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent*/ 28135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 29135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/* 30135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric LaurentCIRCULAR() calculates the array index using modulo arithmetic. 31135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric LaurentThe "trick" is that modulo arithmetic is simplified by masking 32135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentthe effective address where the mask is (2^n)-1. This only works 33135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentif the buffer size is a power of two. 34135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent*/ 35135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define CIRCULAR(base,offset,size) (uint32_t)( \ 36135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent ( \ 37135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent ((int32_t)(base)) + ((int32_t)(offset)) \ 38135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent ) \ 39135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent & size \ 40135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent ) 41135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 42135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define NUM_OUTPUT_CHANNELS 2 43e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurent#define OUTPUT_CHANNELS AUDIO_CHANNEL_OUT_STEREO 44135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 45135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define REVERB_BUFFER_SIZE_IN_SAMPLES_MAX 16384 46135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 47cb28102ad3976339ec445afbcb4130f2991b38d7Eric Laurent#define REVERB_NUM_PRESETS REVERB_PRESET_PLATE // REVERB_PRESET_NONE is not included 48135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define REVERB_MAX_NUM_REFLECTIONS 5 // max num reflections per channel 49135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 50135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 51135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// xfade parameters 52135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define REVERB_XFADE_PERIOD_IN_SECONDS (double) (100.0 / 1000.0) // xfade once every this many seconds 53135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 54135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 55135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/**********/ 56135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/* the entire synth uses various flags in a bit field */ 57135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 58135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/* if flag is set, synth reset has been requested */ 59135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define REVERB_FLAG_RESET_IS_REQUESTED 0x01 /* bit 0 */ 60135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define MASK_REVERB_RESET_IS_REQUESTED 0x01 61135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define MASK_REVERB_RESET_IS_NOT_REQUESTED (uint32_t)(~MASK_REVERB_RESET_IS_REQUESTED) 62135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 63135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/* 64135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentby default, we always want to update ALL channel parameters 65135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentwhen we reset the synth (e.g., during GM ON) 66135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent*/ 67135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define DEFAULT_REVERB_FLAGS 0x0 68135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 69135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/* coefficients for generating sin, cos */ 70135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define REVERB_PAN_G2 4294940151 /* -0.82842712474619 = 2 - 4/sqrt(2) */ 71135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/* 72135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentint32_t nPanG1 = +1.0 for sin 73135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentint32_t nPanG1 = -1.0 for cos 74135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent*/ 75135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define REVERB_PAN_G0 23170 /* 0.707106781186547 = 1/sqrt(2) */ 76135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 77135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/*************************************************************/ 78135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// define the input injection points 79135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define GUARD 5 // safety guard of this many samples 80135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 81135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define MAX_AP_TIME (int) ((20*65536)/1000) // delay time in time units (65536th of sec) 82135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define MAX_DELAY_TIME (int) ((65*65536)/1000) // delay time in time units 83135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define MAX_EARLY_TIME (int) ((65*65536)/1000) // delay time in time units 84135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 85135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define AP0_IN 0 86135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 87135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 88135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define REVERB_DEFAULT_ROOM_NUMBER 1 // default preset number 89135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define DEFAULT_AP0_GAIN 19400 90135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define DEFAULT_AP1_GAIN -19400 91135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 92135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define REVERB_DEFAULT_WET 32767 93135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define REVERB_DEFAULT_DRY 0 94135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 95135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define REVERB_WET_MAX 32767 96135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define REVERB_WET_MIN 0 97135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define REVERB_DRY_MAX 32767 98135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define REVERB_DRY_MIN 0 99135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 100135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// constants for reverb density 101135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// The density expressed in permilles changes the Allpass delay in a linear manner in the range defined by 102135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// AP0_TIME_BASE to AP0_TIME_BASE + AP0_TIME_RANGE 103135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define AP0_TIME_BASE (int)((9*65536)/1000) 104135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define AP0_TIME_RANGE (int)((4*65536)/1000) 105135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define AP1_TIME_BASE (int)((12*65536)/1000) 106135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define AP1_TIME_RANGE (int)((8*65536)/1000) 107135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 108135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// constants for reverb diffusion 109135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// The diffusion expressed in permilles changes the Allpass gain in a linear manner in the range defined by 110135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// AP0_GAIN_BASE to AP0_GAIN_BASE + AP0_GAIN_RANGE 111135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define AP0_GAIN_BASE (int)(9830) 112135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define AP0_GAIN_RANGE (int)(19660-9830) 113135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define AP1_GAIN_BASE (int)(6553) 114135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define AP1_GAIN_RANGE (int)(22936-6553) 115135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 116135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 117e44b1efb293f878d4af8e824a6b3d070167bf2d6Eric Laurentenum reverb_state_e { 118e44b1efb293f878d4af8e824a6b3d070167bf2d6Eric Laurent REVERB_STATE_UNINITIALIZED, 119e44b1efb293f878d4af8e824a6b3d070167bf2d6Eric Laurent REVERB_STATE_INITIALIZED, 120e44b1efb293f878d4af8e824a6b3d070167bf2d6Eric Laurent REVERB_STATE_ACTIVE, 121e44b1efb293f878d4af8e824a6b3d070167bf2d6Eric Laurent}; 122e44b1efb293f878d4af8e824a6b3d070167bf2d6Eric Laurent 123135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/* parameters for each allpass */ 124135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurenttypedef struct 125135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent{ 126135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_zApOut; // delay offset for ap out 127135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 128135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nApGain; // gain for ap 129135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 130135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_zApIn; // delay offset for ap in 131135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 132135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent} allpass_object_t; 133135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 134135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 135135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/* parameters for early reflections */ 136135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurenttypedef struct 137135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent{ 138135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_zDelay[REVERB_MAX_NUM_REFLECTIONS]; // delay offset for ap out 139135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 140135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nGain[REVERB_MAX_NUM_REFLECTIONS]; // gain for ap 141135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 142135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent} early_reflection_object_t; 143135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 144135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent//demo 145135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurenttypedef struct 146135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent{ 147135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nRvbLpfFbk; 148135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nRvbLpfFwd; 149135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nRoomLpfFbk; 150135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nRoomLpfFwd; 151135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 152135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nEarlyGain; 153135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nEarlyDelay; 154135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nLateGain; 155135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nLateDelay; 156135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 157135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent early_reflection_object_t m_sEarlyL; 158135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent early_reflection_object_t m_sEarlyR; 159135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 160135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_nMaxExcursion; //28 161135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nXfadeInterval; 162135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 163135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nAp0_ApGain; //30 164135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nAp0_ApOut; 165135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nAp1_ApGain; 166135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nAp1_ApOut; 167135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nDiffusion; 168135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 169135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_rfu4; 170135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_rfu5; 171135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_rfu6; 172135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_rfu7; 173135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_rfu8; 174135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_rfu9; 175135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_rfu10; //43 176135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 177135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent} reverb_preset_t; 178135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 179135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurenttypedef struct 180135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent{ 181cb28102ad3976339ec445afbcb4130f2991b38d7Eric Laurent reverb_preset_t m_sPreset[REVERB_NUM_PRESETS]; // array of presets(does not include REVERB_PRESET_NONE) 182135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 183135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent} reverb_preset_bank_t; 184135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 185135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 186135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/* parameters for each reverb */ 187135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurenttypedef struct 188135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent{ 189135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent /* update counter keeps track of when synth params need updating */ 190135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent /* only needs to be as large as REVERB_UPDATE_PERIOD_IN_SAMPLES */ 191135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nUpdateCounter; 192135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 193135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_nBaseIndex; // base index for circular buffer 194135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 195135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // reverb delay line offsets, allpass parameters, etc: 196135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 197135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent short m_nRevFbkR; // combine feedback reverb right out with dry left in 198135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent short m_zOutLpfL; // left reverb output 199135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 200135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent allpass_object_t m_sAp0; // allpass 0 (left channel) 201135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 202135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_zD0In; // delay offset for delay line D0 in 203135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 204135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent short m_nRevFbkL; // combine feedback reverb left out with dry right in 205135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent short m_zOutLpfR; // right reverb output 206135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 207135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent allpass_object_t m_sAp1; // allpass 1 (right channel) 208135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 209135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_zD1In; // delay offset for delay line D1 in 210135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 211135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // delay output taps, notice criss cross order 212135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_zD0Self; // self feeds forward d0 --> d0 213135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 214135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_zD1Cross; // cross feeds across d1 --> d0 215135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 216135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_zD1Self; // self feeds forward d1 --> d1 217135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 218135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_zD0Cross; // cross feeds across d0 --> d1 219135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 220135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nSin; // gain for self taps 221135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 222135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nCos; // gain for cross taps 223135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 224135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nSinIncrement; // increment for gain 225135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 226135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nCosIncrement; // increment for gain 227135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 228135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nRvbLpfFwd; // reverb feedback lpf forward gain (includes scaling for mixer) 229135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 230135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nRvbLpfFbk; // reverb feedback lpf feedback gain 231135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 232135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nRoomLpfFwd; // room lpf forward gain (includes scaling for mixer) 233135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 234135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nRoomLpfFbk; // room lpf feedback gain 235135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 236135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_nXfadeInterval; // update/xfade after this many samples 237135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 238135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_nXfadeCounter; // keep track of when to xfade 239135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 240135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nPhase; // -1 <= m_nPhase < 1 241135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // but during sin,cos calculations 242135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // use m_nPhase/2 243135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 244135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nPhaseIncrement; // add this to m_nPhase each frame 245135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 246135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nNoise; // random noise sample 247135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 248135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_nMaxExcursion; // the taps can excurse +/- this amount 249135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 250135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_bUseNoise; // if TRUE, use noise as input signal 251135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 252135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_bBypass; // if TRUE, then bypass reverb and copy input to output 253135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 254135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nCurrentRoom; // preset number for current room 255135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 256135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nNextRoom; // preset number for next room 257135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 258135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nEarlyGain; // gain for early (widen) signal 259135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nEarlyDelay; // initial dealy for early (widen) signal 260135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nEarly0in; 261135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nEarly1in; 262135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nLateGain; // gain for late reverb 263135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nLateDelay; 264135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 265135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nDiffusion; 266135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 267135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent early_reflection_object_t m_sEarlyL; // left channel early reflections 268135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent early_reflection_object_t m_sEarlyR; // right channel early reflections 269135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 270135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent short m_nDelayLine[REVERB_BUFFER_SIZE_IN_SAMPLES_MAX]; // one large delay line for all reverb elements 271135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 272135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent reverb_preset_t pPreset; 273135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 274135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent reverb_preset_bank_t m_sPreset; 275135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 276135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent //int8_t preset; 277135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint32_t m_nSamplingRate; 278135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int32_t m_nUpdatePeriodInBits; 279135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int32_t m_nBufferMask; 280135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int32_t m_nUpdatePeriodInSamples; 281135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int32_t m_nDelay0Out; 282135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int32_t m_nDelay1Out; 283135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int16_t m_nCosWT_5KHz; 284135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 285135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_Aux; // if TRUE, is connected as auxiliary effect 286135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint16_t m_Preset; // if TRUE, expose preset revert interface 287135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 288e44b1efb293f878d4af8e824a6b3d070167bf2d6Eric Laurent uint32_t mState; 289135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent} reverb_object_t; 290135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 291135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 292135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 293135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurenttypedef struct reverb_module_s { 294135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent const struct effect_interface_s *itfe; 295135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent effect_config_t config; 296135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent reverb_object_t context; 297135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent} reverb_module_t; 298135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 299135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/*------------------------------------ 300135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Effect API 301135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *------------------------------------ 302135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent*/ 3035e92a7861196ddae14638d4b7a63fc4892b7ef59Glenn Kastenint EffectCreate(const effect_uuid_t *effectUID, 30425f4395b932fa9859a6e91ba77c5d20d009da64aEric Laurent int32_t sessionId, 30525f4395b932fa9859a6e91ba77c5d20d009da64aEric Laurent int32_t ioId, 306e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurent effect_handle_t *pHandle); 307e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurentint EffectRelease(effect_handle_t handle); 3085e92a7861196ddae14638d4b7a63fc4892b7ef59Glenn Kastenint EffectGetDescriptor(const effect_uuid_t *uuid, 309e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurent effect_descriptor_t *pDescriptor); 310135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 311e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurentstatic int Reverb_Process(effect_handle_t self, 31225f4395b932fa9859a6e91ba77c5d20d009da64aEric Laurent audio_buffer_t *inBuffer, 31325f4395b932fa9859a6e91ba77c5d20d009da64aEric Laurent audio_buffer_t *outBuffer); 314e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurentstatic int Reverb_Command(effect_handle_t self, 31525f4395b932fa9859a6e91ba77c5d20d009da64aEric Laurent uint32_t cmdCode, 31625f4395b932fa9859a6e91ba77c5d20d009da64aEric Laurent uint32_t cmdSize, 31725f4395b932fa9859a6e91ba77c5d20d009da64aEric Laurent void *pCmdData, 31825f4395b932fa9859a6e91ba77c5d20d009da64aEric Laurent uint32_t *replySize, 31925f4395b932fa9859a6e91ba77c5d20d009da64aEric Laurent void *pReplyData); 320e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurentstatic int Reverb_GetDescriptor(effect_handle_t self, 321e1315cf0b63b4c14a77046519e6b01f6f60d74b0Eric Laurent effect_descriptor_t *pDescriptor); 322135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 323135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/*------------------------------------ 324135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * internal functions 325135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *------------------------------------ 326135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent*/ 327135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 328135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentint Reverb_Init(reverb_module_t *pRvbModule, int aux, int preset); 3293d5188bd6abe55898f10a0edf3c05aff8aa2ef67Eric Laurentint Reverb_setConfig(reverb_module_t *pRvbModule, effect_config_t *pConfig, bool init); 3303d5188bd6abe55898f10a0edf3c05aff8aa2ef67Eric Laurentvoid Reverb_getConfig(reverb_module_t *pRvbModule, effect_config_t *pConfig); 331135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentvoid Reverb_Reset(reverb_object_t *pReverb, bool init); 332135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 333b302bd5d288be2d3363b80053ca2392560b00b25Ashok Bhatint Reverb_setParameter (reverb_object_t *pReverb, int32_t param, uint32_t size, void *pValue); 334b302bd5d288be2d3363b80053ca2392560b00b25Ashok Bhatint Reverb_getParameter(reverb_object_t *pReverb, int32_t param, uint32_t *pSize, void *pValue); 335135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 336135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/*---------------------------------------------------------------------------- 337135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * ReverbUpdateXfade 338135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *---------------------------------------------------------------------------- 339135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Purpose: 340135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Update the xfade parameters as required 341135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 342135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Inputs: 343135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * nNumSamplesToAdd - number of samples to write to buffer 344135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 345135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Outputs: 346135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 347135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 348135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Side Effects: 349135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * - xfade parameters will be changed 350135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 351135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *---------------------------------------------------------------------------- 352135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent*/ 353135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentstatic int ReverbUpdateXfade(reverb_object_t* pReverbData, int nNumSamplesToAdd); 354135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 355135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/*---------------------------------------------------------------------------- 356135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * ReverbCalculateNoise 357135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *---------------------------------------------------------------------------- 358135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Purpose: 359135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Calculate a noise sample and limit its value 360135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 361135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Inputs: 362135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Pointer to reverb context 363135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 364135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Outputs: 365135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * new limited noise value 366135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 367135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Side Effects: 368135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * - pReverbData->m_nNoise value is updated 369135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 370135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *---------------------------------------------------------------------------- 371135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent*/ 372135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentstatic uint16_t ReverbCalculateNoise(reverb_object_t *pReverbData); 373135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 374135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/*---------------------------------------------------------------------------- 375135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * ReverbCalculateSinCos 376135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *---------------------------------------------------------------------------- 377135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Purpose: 378135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Calculate a new sin and cosine value based on the given phase 379135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 380135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Inputs: 381135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * nPhase - phase angle 382135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * pnSin - input old value, output new value 383135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * pnCos - input old value, output new value 384135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 385135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Outputs: 386135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 387135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Side Effects: 388135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * - *pnSin, *pnCos are updated 389135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 390135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *---------------------------------------------------------------------------- 391135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent*/ 392135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentstatic int ReverbCalculateSinCos(int16_t nPhase, int16_t *pnSin, int16_t *pnCos); 393135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 394135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/*---------------------------------------------------------------------------- 395135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Reverb 396135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *---------------------------------------------------------------------------- 397135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Purpose: 398135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * apply reverb to the given signal 399135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 400135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Inputs: 401135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * nNu 402135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * pnSin - input old value, output new value 403135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * pnCos - input old value, output new value 404135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 405135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Outputs: 406135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * number of samples actually reverberated 407135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 408135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Side Effects: 409135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 410135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *---------------------------------------------------------------------------- 411135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent*/ 412135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentstatic int Reverb(reverb_object_t* pReverbData, int nNumSamplesToAdd, short *pOutputBuffer, short *pInputBuffer); 413135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 414135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/*---------------------------------------------------------------------------- 415135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * ReverbReadInPresets() 416135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *---------------------------------------------------------------------------- 417135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Purpose: sets global reverb preset bank to defaults 418135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 419135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Inputs: 420135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 421135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Outputs: 422135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 423135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *---------------------------------------------------------------------------- 424135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent*/ 425135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentstatic int ReverbReadInPresets(reverb_object_t* pReverbData); 426135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 427135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 428135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/*---------------------------------------------------------------------------- 429135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * ReverbUpdateRoom 430135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *---------------------------------------------------------------------------- 431135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Purpose: 432135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Update the room's preset parameters as required 433135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 434135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Inputs: 435135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 436135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Outputs: 437135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 438135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * 439135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Side Effects: 440135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * - reverb paramters (fbk, fwd, etc) will be changed 441135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * - m_nCurrentRoom := m_nNextRoom 442135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent *---------------------------------------------------------------------------- 443135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent*/ 444135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentstatic int ReverbUpdateRoom(reverb_object_t* pReverbData, bool fullUpdate); 445135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 446135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 447135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentstatic int ReverbComputeConstants(reverb_object_t *pReverbData, uint32_t samplingRate); 448135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 449135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#endif /*ANDROID_EFFECTREVERB_H_*/ 450