1135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent/* 2135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent * Copyright 2009, 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 AUDIOEQUALIZER_H_ 18135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#define AUDIOEQUALIZER_H_ 19135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 20135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#include "AudioCommon.h" 21135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 22135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentnamespace android { 23135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 24135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentclass AudioShelvingFilter; 25135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentclass AudioPeakingFilter; 26135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 27135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// A parametric audio equalizer. Supports an arbitrary number of bands and 28135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// presets. 29135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// The EQ is composed of a low-shelf, zero or more peaking filters and a high 30135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// shelf, where each band has frequency and gain controls, and the peaking 31135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent// filters have an additional bandwidth control. 32135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentclass AudioEqualizer { 33135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentpublic: 34135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Configuration of a single band. 35135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent struct BandConfig { 36135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Gain in millibel. 37135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int32_t gain; 38135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Frequency in millihertz. 39135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint32_t freq; 40135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Bandwidth in cents (ignored on shelving filters). 41135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint32_t bandwidth; 42135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent }; 43135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 44135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Preset configuration. 45135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent struct PresetConfig { 46135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Human-readable name. 47135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent const char * name; 48135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // An array of size nBands where each element is a configuration for the 49135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // corresponding band. 50135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent const BandConfig * bandConfigs; 51135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent }; 52135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 53135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // This value is used when requesting current preset, and EQ is not using a 54135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // preset. 55135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent static const int PRESET_CUSTOM = -1; 56135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 57135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Get the required memory size for an instance of this class. 58135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // nBands Number of bands required in the instance. 59135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent static size_t GetInstanceSize(int nBands); 60135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 61135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Create an instance of this class. 62135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // If succeeds, a respective call is expected to freeInstance(), regardless 63135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // of who owns the context memory. 64135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // pMem A memory buffer of at least the size returned by 65135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // GetInstanceSize(), where the instance context is to be 66135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // stored. If NULL, it will be automatically allocated (using 67135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // malloc). 68135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // nBands Number of bands. Must be >= 2. 69135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // nChannels Number of input/output channels (interlaced). 70135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // sampleRate The input/output sample rate, in Hz. 71135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // presets The presets configuration. May be NULL, but in that case the 72135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // client is required not to call preset-related functions. 73135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // This array is owned by the client and is not copied. It 74135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // must be kept valid by the client as long as the instance is 75135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // alive. 76135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // nPresets Number of elements in the presets array. 77135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // returns The instance if success. NULL if pMem is NULL and allocation 78135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // failed. 79135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent static AudioEqualizer * CreateInstance(void * pMem, int nBands, 80135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int nChannels, 81135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int sampleRate, 82135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent const PresetConfig * presets, 83135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int nPresets); 84135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 85135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Reconfiguration of the filter. Changes input/output format, but does not 86135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // alter current parameter values. Causes reset of the delay lines. 87135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // nChannels Number of input/output channels (interlaced). 88135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // sampleRate The input/output sample rate, in Hz. 89135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent void configure(int nChannels, int sampleRate); 90135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 91135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Resets the filter parameters to the following values: 92135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // frequency: 0 93135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // gain: 0 94135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // bandwidth: 1200 cents. 95135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // It also disables the filter. Does not clear the delay lines. 96135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent void reset(); 97135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 98135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Clears delay lines. Does not alter parameter values. 99135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent void clear(); 100135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 101135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Frees the object. Will free the memory if the object owned it, i.e. if 102135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // a NULL pointer was passed to CreateInstance as pMem. 103135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent void free(); 104135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 105135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Sets gain value. Actual change will only take place upon commit(). 106135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // This value will be remembered even if the filter is in disabled() state. 107135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // band The band to set the gain for. 108135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // millibel Gain value in millibel (1/100 of decibel). 109135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent void setGain(int band, int32_t millibel); 110135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 111135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Gets gain of a certain band. This is always the last value set (or 112135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // default value after reset). 113135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // band The band to get the gain for. 114135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // returns Gain value in millibel (1/100 of decibel). 115135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int32_t getGain(int band) const; 116135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 117135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Sets cutoff frequency value. Actual change will only take place upon 118135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // commit(). 119135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // This value will be remembered even if the filter is in disabled() state. 120135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // band The band to set the frequency for. 121135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // millihertz Frequency value in mHz. 122135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent void setFrequency(int band, uint32_t millihertz); 123135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 124135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Gets frequency of a certain band. This is always the last value set (or 125135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // default value after reset). 126135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // band The band to get the frequency for. 127135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // returns Frequency value in mHz. 128135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint32_t getFrequency(int band) const; 129135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 130135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Sets bandwidth value. Actual change will only take place upon commit(). 131135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // This value will be remembered even if the filter is in disabled() state. 132135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // If called on the first or last band, this call is ignored. 133135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // band The band to set the frequency for. 134135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // cents Bandwidth value in cents (1/1200 octave). 135135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent void setBandwidth(int band, uint32_t cents); 136135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 137135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Gets bandwidth of a certain band. This is always the last value set (or 138135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // default value after reset). For the first and last bands, 0 is always 139135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // returned. 140135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // band The band to get the bandwidth for. 141135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // returns Bandwidth value in cents (1/1200 octave). 142135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent uint32_t getBandwidth(int band) const; 143135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 144135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Gets lower and upper boundaries of a band. 145135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // For the low shelf, the low bound is 0 and the high bound is the band 146135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // frequency. 147135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // For the high shelf, the low bound is the band frequency and the high 148135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // bound is Nyquist. 149135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // For the peaking filters, they are the gain[dB]/2 points. 150135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent void getBandRange(int band, uint32_t & low, uint32_t & high) const; 151135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 152135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Gets a human-readable name for a preset ID. Will return "Custom" if 153135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // PRESET_CUSTOM is passed. 154135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // preset The preset ID. Must be less than number of presets. 155135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent const char * getPresetName(int preset) const; 156135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 157135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Gets the number of presets. 158135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int getNumPresets() const; 159135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 160135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Gets the currently set preset ID. 161135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Will return PRESET_CUSTOM in case the EQ parameters have been modified 162135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // manually since a preset was set. 163135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int getPreset() const; 164135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 165135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Sets the current preset by ID. 166135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // All the band parameters will be overridden. 167135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Change will not be applied until commit() is called. 168135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // preset The preset ID. Must be less than number of presets. 169135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // PRESET_CUSTOM is NOT a valid value here. 170135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent void setPreset(int preset); 171135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 172135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Applies all parameter changes done to this point in time. 173135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // If the filter is disabled, the new parameters will take place when it is 174135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // enabled again. Does not introduce artifacts, unless immediate is set. 175135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // immediate Whether to apply change abruptly (ignored if filter is 176135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // disabled). 177135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent void commit(bool immediate = false); 178135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 179135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Process a buffer of input data. The input and output should contain 180135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // frameCount * nChannels interlaced samples. Processing can be done 181135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // in-place, by passing the same buffer as both arguments. 182135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // pIn Input buffer. 183135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // pOut Output buffer. 184135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // frameCount Number of frames to produce on each call to process(). 185135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent void process(const audio_sample_t * pIn, audio_sample_t * pOut, 186135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int frameCount); 187135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 188135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Enables the filter, so it would start processing input. Does not 189135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // introduce artifacts, unless immediate is set. 190135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // immediate Whether to apply change abruptly. 191135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent void enable(bool immediate = false); 192135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 193135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Disabled (bypasses) the filter. Does not introduce artifacts, unless 194135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // immediate is set. 195135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // immediate Whether to apply change abruptly. 196135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent void disable(bool immediate = false); 197135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 198135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Returns the band with the maximum influence on a given frequency. 199135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Result is unaffected by whether EQ is enabled or not, or by whether 200135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // changes have been committed or not. 201135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // targetFreq The target frequency, in millihertz. 202135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int getMostRelevantBand(uint32_t targetFreq) const; 203135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 204135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurentprivate: 205135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Bottom frequency, in mHz. 206135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent static const int kMinFreq = 20000; 207135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Sample rate, in Hz. 208135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int mSampleRate; 209135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Number of peaking filters. Total number of bands is +2. 210135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int mNumPeaking; 211135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Preset configurations. 212135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent const PresetConfig * mpPresets; 213135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Number of elements in mpPresets; 214135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int mNumPresets; 215135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Current preset. 216135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent int mCurPreset; 217135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 218135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Memory space to free when instance is deleted, or NULL if no memory is 219135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // owned. 220135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent void * mpMem; 221135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // The low-shelving filter. 222135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent AudioShelvingFilter * mpLowShelf; 223135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // The high-shelving filter. 224135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent AudioShelvingFilter * mpHighShelf; 225135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // An array of size mNumPeaking of peaking filters. 226135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent AudioPeakingFilter * mpPeakingFilters; 227135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 228135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // Constructor. Resets the filter (see reset()). Must call init() doing 229135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // anything else. 230135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // pMem Memory buffer for bands. 231135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // nChannels Number of input/output channels (interlaced). 232135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // sampleRate The input/output sample rate, in Hz. 233135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // ownMem Whether pMem is owned by me. 234135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // presets The presets configuration. May be NULL, but in that case the 235135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // client is required not to call preset-related functions. 236135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // This array is owned by the client and is not copied. It 237135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // must be kept valid by the client as long as the instance is 238135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // alive. 239135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent // nPresets Number of elements in the presets array. 240135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent AudioEqualizer(void * pMem, int nBands, int nChannels, int sampleRate, 241135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent bool ownMem, const PresetConfig * presets, int nPresets); 242135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent}; 243135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 244135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent} 245135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent 246135ad07e33d30e5202deb21061a0e3ecf0ffad35Eric Laurent#endif // AUDIOEQUALIZER_H_ 247