19f011fed92c4982819f78c7cfb4c07b27adf7651rago/* 29f011fed92c4982819f78c7cfb4c07b27adf7651rago * Copyright (C) 2018 The Android Open Source Project 39f011fed92c4982819f78c7cfb4c07b27adf7651rago * 49f011fed92c4982819f78c7cfb4c07b27adf7651rago * Licensed under the Apache License, Version 2.0 (the "License"); 59f011fed92c4982819f78c7cfb4c07b27adf7651rago * you may not use this file except in compliance with the License. 69f011fed92c4982819f78c7cfb4c07b27adf7651rago * You may obtain a copy of the License at 79f011fed92c4982819f78c7cfb4c07b27adf7651rago * 89f011fed92c4982819f78c7cfb4c07b27adf7651rago * http://www.apache.org/licenses/LICENSE-2.0 99f011fed92c4982819f78c7cfb4c07b27adf7651rago * 109f011fed92c4982819f78c7cfb4c07b27adf7651rago * Unless required by applicable law or agreed to in writing, software 119f011fed92c4982819f78c7cfb4c07b27adf7651rago * distributed under the License is distributed on an "AS IS" BASIS, 129f011fed92c4982819f78c7cfb4c07b27adf7651rago * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139f011fed92c4982819f78c7cfb4c07b27adf7651rago * See the License for the specific language governing permissions and 149f011fed92c4982819f78c7cfb4c07b27adf7651rago * limitations under the License. 159f011fed92c4982819f78c7cfb4c07b27adf7651rago */ 169f011fed92c4982819f78c7cfb4c07b27adf7651rago 17ff0a51f978a6307153cc752b8071144d642b54acrago#ifndef DPBASE_H_ 18ff0a51f978a6307153cc752b8071144d642b54acrago#define DPBASE_H_ 19ff0a51f978a6307153cc752b8071144d642b54acrago 20ff0a51f978a6307153cc752b8071144d642b54acrago 219f011fed92c4982819f78c7cfb4c07b27adf7651rago#include <stdint.h> 229f011fed92c4982819f78c7cfb4c07b27adf7651rago#include <cmath> 239f011fed92c4982819f78c7cfb4c07b27adf7651rago#include <vector> 249f011fed92c4982819f78c7cfb4c07b27adf7651rago#include <android/log.h> 259f011fed92c4982819f78c7cfb4c07b27adf7651rago 269f011fed92c4982819f78c7cfb4c07b27adf7651ragonamespace dp_fx { 279f011fed92c4982819f78c7cfb4c07b27adf7651rago 289f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_BAND_ENABLED false 299f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_BAND_CUTOFF_FREQUENCY_HZ 1000 309f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_ATTACK_TIME_MS 50 319f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_RELEASE_TIME_MS 120 329f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_RATIO 2 339f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_THRESHOLD_DB -30 349f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_KNEE_WIDTH_DB 0 359f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_NOISE_GATE_THRESHOLD_DB -90 369f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_EXPANDER_RATIO 1 379f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_GAIN_DB 0 389f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_STAGE_INUSE false 399f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_STAGE_ENABLED false 409f011fed92c4982819f78c7cfb4c07b27adf7651rago#define DP_DEFAULT_LINK_GROUP 0 419f011fed92c4982819f78c7cfb4c07b27adf7651rago 429f011fed92c4982819f78c7cfb4c07b27adf7651rago 439f011fed92c4982819f78c7cfb4c07b27adf7651rago 449f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPStage { 459f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 469f011fed92c4982819f78c7cfb4c07b27adf7651rago DPStage(); 479f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPStage() = default; 489f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool inUse, bool enabled); 499f011fed92c4982819f78c7cfb4c07b27adf7651rago bool isInUse() const { 509f011fed92c4982819f78c7cfb4c07b27adf7651rago return mInUse; 519f011fed92c4982819f78c7cfb4c07b27adf7651rago } 529f011fed92c4982819f78c7cfb4c07b27adf7651rago bool isEnabled() const { 539f011fed92c4982819f78c7cfb4c07b27adf7651rago return mEnabled; 549f011fed92c4982819f78c7cfb4c07b27adf7651rago } 559f011fed92c4982819f78c7cfb4c07b27adf7651rago void setEnabled(bool enabled) { 569f011fed92c4982819f78c7cfb4c07b27adf7651rago mEnabled = enabled; 579f011fed92c4982819f78c7cfb4c07b27adf7651rago } 589f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 599f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mInUse; 609f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mEnabled; 619f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 629f011fed92c4982819f78c7cfb4c07b27adf7651rago 639f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPBandStage : public DPStage { 649f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 659f011fed92c4982819f78c7cfb4c07b27adf7651rago DPBandStage(); 669f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPBandStage() = default; 679f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool inUse, bool enabled, int bandCount); 689f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t getBandCount() const { 699f011fed92c4982819f78c7cfb4c07b27adf7651rago return mBandCount; 709f011fed92c4982819f78c7cfb4c07b27adf7651rago } 719f011fed92c4982819f78c7cfb4c07b27adf7651rago void setBandCount(uint32_t bandCount) { 729f011fed92c4982819f78c7cfb4c07b27adf7651rago mBandCount = bandCount; 739f011fed92c4982819f78c7cfb4c07b27adf7651rago } 749f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 759f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t mBandCount; 769f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 779f011fed92c4982819f78c7cfb4c07b27adf7651rago 789f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPBandBase { 799f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 809f011fed92c4982819f78c7cfb4c07b27adf7651rago DPBandBase(); 819f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPBandBase() = default; 829f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool enabled, float cutoffFrequency); 839f011fed92c4982819f78c7cfb4c07b27adf7651rago bool isEnabled() const { 849f011fed92c4982819f78c7cfb4c07b27adf7651rago return mEnabled; 859f011fed92c4982819f78c7cfb4c07b27adf7651rago } 869f011fed92c4982819f78c7cfb4c07b27adf7651rago void setEnabled(bool enabled) { 879f011fed92c4982819f78c7cfb4c07b27adf7651rago mEnabled = enabled; 889f011fed92c4982819f78c7cfb4c07b27adf7651rago } 899f011fed92c4982819f78c7cfb4c07b27adf7651rago float getCutoffFrequency() const { 909f011fed92c4982819f78c7cfb4c07b27adf7651rago return mCutoofFrequencyHz; 919f011fed92c4982819f78c7cfb4c07b27adf7651rago } 929f011fed92c4982819f78c7cfb4c07b27adf7651rago void setCutoffFrequency(float cutoffFrequency) { 939f011fed92c4982819f78c7cfb4c07b27adf7651rago mCutoofFrequencyHz = cutoffFrequency; 949f011fed92c4982819f78c7cfb4c07b27adf7651rago } 959f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 969f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mEnabled; 979f011fed92c4982819f78c7cfb4c07b27adf7651rago float mCutoofFrequencyHz; 989f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 999f011fed92c4982819f78c7cfb4c07b27adf7651rago 1009f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPEqBand : public DPBandBase { 1019f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 1029f011fed92c4982819f78c7cfb4c07b27adf7651rago DPEqBand(); 1039f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPEqBand() = default; 1049f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool enabled, float cutoffFrequency, float gain); 1059f011fed92c4982819f78c7cfb4c07b27adf7651rago float getGain() const; 1069f011fed92c4982819f78c7cfb4c07b27adf7651rago void setGain(float gain); 1079f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 1089f011fed92c4982819f78c7cfb4c07b27adf7651rago float mGainDb; 1099f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 1109f011fed92c4982819f78c7cfb4c07b27adf7651rago 1119f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPMbcBand : public DPBandBase { 1129f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 1139f011fed92c4982819f78c7cfb4c07b27adf7651rago DPMbcBand(); 1149f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPMbcBand() = default; 1159f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool enabled, float cutoffFrequency, float attackTime, float releaseTime, 1169f011fed92c4982819f78c7cfb4c07b27adf7651rago float ratio, float threshold, float kneeWidth, float noiseGateThreshold, 1179f011fed92c4982819f78c7cfb4c07b27adf7651rago float expanderRatio, float preGain, float postGain); 1189f011fed92c4982819f78c7cfb4c07b27adf7651rago float getAttackTime() const { 1199f011fed92c4982819f78c7cfb4c07b27adf7651rago return mAttackTimeMs; 1209f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1219f011fed92c4982819f78c7cfb4c07b27adf7651rago void setAttackTime(float attackTime) { 1229f011fed92c4982819f78c7cfb4c07b27adf7651rago mAttackTimeMs = attackTime; 1239f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1249f011fed92c4982819f78c7cfb4c07b27adf7651rago float getReleaseTime() const { 1259f011fed92c4982819f78c7cfb4c07b27adf7651rago return mReleaseTimeMs; 1269f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1279f011fed92c4982819f78c7cfb4c07b27adf7651rago void setReleaseTime(float releaseTime) { 1289f011fed92c4982819f78c7cfb4c07b27adf7651rago mReleaseTimeMs = releaseTime; 1299f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1309f011fed92c4982819f78c7cfb4c07b27adf7651rago float getRatio() const { 1319f011fed92c4982819f78c7cfb4c07b27adf7651rago return mRatio; 1329f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1339f011fed92c4982819f78c7cfb4c07b27adf7651rago void setRatio(float ratio) { 1349f011fed92c4982819f78c7cfb4c07b27adf7651rago mRatio = ratio; 1359f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1369f011fed92c4982819f78c7cfb4c07b27adf7651rago float getThreshold() const { 1379f011fed92c4982819f78c7cfb4c07b27adf7651rago return mThresholdDb; 1389f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1399f011fed92c4982819f78c7cfb4c07b27adf7651rago void setThreshold(float threshold) { 1409f011fed92c4982819f78c7cfb4c07b27adf7651rago mThresholdDb = threshold; 1419f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1429f011fed92c4982819f78c7cfb4c07b27adf7651rago float getKneeWidth() const { 1439f011fed92c4982819f78c7cfb4c07b27adf7651rago return mKneeWidthDb; 1449f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1459f011fed92c4982819f78c7cfb4c07b27adf7651rago void setKneeWidth(float kneeWidth) { 1469f011fed92c4982819f78c7cfb4c07b27adf7651rago mKneeWidthDb = kneeWidth; 1479f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1489f011fed92c4982819f78c7cfb4c07b27adf7651rago float getNoiseGateThreshold() const { 1499f011fed92c4982819f78c7cfb4c07b27adf7651rago return mNoiseGateThresholdDb; 1509f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1519f011fed92c4982819f78c7cfb4c07b27adf7651rago void setNoiseGateThreshold(float noiseGateThreshold) { 1529f011fed92c4982819f78c7cfb4c07b27adf7651rago mNoiseGateThresholdDb = noiseGateThreshold; 1539f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1549f011fed92c4982819f78c7cfb4c07b27adf7651rago float getExpanderRatio() const { 1559f011fed92c4982819f78c7cfb4c07b27adf7651rago return mExpanderRatio; 1569f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1579f011fed92c4982819f78c7cfb4c07b27adf7651rago void setExpanderRatio(float expanderRatio) { 1589f011fed92c4982819f78c7cfb4c07b27adf7651rago mExpanderRatio = expanderRatio; 1599f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1609f011fed92c4982819f78c7cfb4c07b27adf7651rago float getPreGain() const { 1619f011fed92c4982819f78c7cfb4c07b27adf7651rago return mPreGainDb; 1629f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1639f011fed92c4982819f78c7cfb4c07b27adf7651rago void setPreGain(float preGain) { 1649f011fed92c4982819f78c7cfb4c07b27adf7651rago mPreGainDb = preGain; 1659f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1669f011fed92c4982819f78c7cfb4c07b27adf7651rago float getPostGain() const { 1679f011fed92c4982819f78c7cfb4c07b27adf7651rago return mPostGainDb; 1689f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1699f011fed92c4982819f78c7cfb4c07b27adf7651rago void setPostGain(float postGain) { 1709f011fed92c4982819f78c7cfb4c07b27adf7651rago mPostGainDb = postGain; 1719f011fed92c4982819f78c7cfb4c07b27adf7651rago } 1729f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 1739f011fed92c4982819f78c7cfb4c07b27adf7651rago float mAttackTimeMs; 1749f011fed92c4982819f78c7cfb4c07b27adf7651rago float mReleaseTimeMs; 1759f011fed92c4982819f78c7cfb4c07b27adf7651rago float mRatio; 1769f011fed92c4982819f78c7cfb4c07b27adf7651rago float mThresholdDb; 1779f011fed92c4982819f78c7cfb4c07b27adf7651rago float mKneeWidthDb; 1789f011fed92c4982819f78c7cfb4c07b27adf7651rago float mNoiseGateThresholdDb; 1799f011fed92c4982819f78c7cfb4c07b27adf7651rago float mExpanderRatio; 1809f011fed92c4982819f78c7cfb4c07b27adf7651rago float mPreGainDb; 1819f011fed92c4982819f78c7cfb4c07b27adf7651rago float mPostGainDb; 1829f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 1839f011fed92c4982819f78c7cfb4c07b27adf7651rago 1849f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPEq : public DPBandStage { 1859f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 1869f011fed92c4982819f78c7cfb4c07b27adf7651rago DPEq(); 1879f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPEq() = default; 1889f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool inUse, bool enabled, uint32_t bandCount); 1899f011fed92c4982819f78c7cfb4c07b27adf7651rago DPEqBand * getBand(uint32_t band); 1909f011fed92c4982819f78c7cfb4c07b27adf7651rago void setBand(uint32_t band, DPEqBand &src); 1919f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 1929f011fed92c4982819f78c7cfb4c07b27adf7651rago std::vector<DPEqBand> mBands; 1939f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 1949f011fed92c4982819f78c7cfb4c07b27adf7651rago 1959f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPMbc : public DPBandStage { 1969f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 1979f011fed92c4982819f78c7cfb4c07b27adf7651rago DPMbc(); 1989f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPMbc() = default; 1999f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool inUse, bool enabled, uint32_t bandCount); 2009f011fed92c4982819f78c7cfb4c07b27adf7651rago DPMbcBand * getBand(uint32_t band); 2019f011fed92c4982819f78c7cfb4c07b27adf7651rago void setBand(uint32_t band, DPMbcBand &src); 2029f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 2039f011fed92c4982819f78c7cfb4c07b27adf7651rago std::vector<DPMbcBand> mBands; 2049f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 2059f011fed92c4982819f78c7cfb4c07b27adf7651rago 2069f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPLimiter : public DPStage { 2079f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 2089f011fed92c4982819f78c7cfb4c07b27adf7651rago DPLimiter(); 2099f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPLimiter() = default; 2109f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(bool inUse, bool enabled, uint32_t linkGroup, float attackTime, float releaseTime, 2119f011fed92c4982819f78c7cfb4c07b27adf7651rago float ratio, float threshold, float postGain); 2129f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t getLinkGroup() const { 2139f011fed92c4982819f78c7cfb4c07b27adf7651rago return mLinkGroup; 2149f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2159f011fed92c4982819f78c7cfb4c07b27adf7651rago void setLinkGroup(uint32_t linkGroup) { 2169f011fed92c4982819f78c7cfb4c07b27adf7651rago mLinkGroup = linkGroup; 2179f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2189f011fed92c4982819f78c7cfb4c07b27adf7651rago float getAttackTime() const { 2199f011fed92c4982819f78c7cfb4c07b27adf7651rago return mAttackTimeMs; 2209f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2219f011fed92c4982819f78c7cfb4c07b27adf7651rago void setAttackTime(float attackTime) { 2229f011fed92c4982819f78c7cfb4c07b27adf7651rago mAttackTimeMs = attackTime; 2239f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2249f011fed92c4982819f78c7cfb4c07b27adf7651rago float getReleaseTime() const { 2259f011fed92c4982819f78c7cfb4c07b27adf7651rago return mReleaseTimeMs; 2269f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2279f011fed92c4982819f78c7cfb4c07b27adf7651rago void setReleaseTime(float releaseTime) { 2289f011fed92c4982819f78c7cfb4c07b27adf7651rago mReleaseTimeMs = releaseTime; 2299f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2309f011fed92c4982819f78c7cfb4c07b27adf7651rago float getRatio() const { 2319f011fed92c4982819f78c7cfb4c07b27adf7651rago return mRatio; 2329f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2339f011fed92c4982819f78c7cfb4c07b27adf7651rago void setRatio(float ratio) { 2349f011fed92c4982819f78c7cfb4c07b27adf7651rago mRatio = ratio; 2359f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2369f011fed92c4982819f78c7cfb4c07b27adf7651rago float getThreshold() const { 2379f011fed92c4982819f78c7cfb4c07b27adf7651rago return mThresholdDb; 2389f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2399f011fed92c4982819f78c7cfb4c07b27adf7651rago void setThreshold(float threshold) { 2409f011fed92c4982819f78c7cfb4c07b27adf7651rago mThresholdDb = threshold; 2419f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2429f011fed92c4982819f78c7cfb4c07b27adf7651rago float getPostGain() const { 2439f011fed92c4982819f78c7cfb4c07b27adf7651rago return mPostGainDb; 2449f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2459f011fed92c4982819f78c7cfb4c07b27adf7651rago void setPostGain(float postGain) { 2469f011fed92c4982819f78c7cfb4c07b27adf7651rago mPostGainDb = postGain; 2479f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2489f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 2499f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t mLinkGroup; 2509f011fed92c4982819f78c7cfb4c07b27adf7651rago float mAttackTimeMs; 2519f011fed92c4982819f78c7cfb4c07b27adf7651rago float mReleaseTimeMs; 2529f011fed92c4982819f78c7cfb4c07b27adf7651rago float mRatio; 2539f011fed92c4982819f78c7cfb4c07b27adf7651rago float mThresholdDb; 2549f011fed92c4982819f78c7cfb4c07b27adf7651rago float mPostGainDb; 2559f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 2569f011fed92c4982819f78c7cfb4c07b27adf7651rago 2579f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPChannel { 2589f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 2599f011fed92c4982819f78c7cfb4c07b27adf7651rago DPChannel(); 2609f011fed92c4982819f78c7cfb4c07b27adf7651rago ~DPChannel() = default; 2619f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(float inputGain, bool preEqInUse, uint32_t preEqBandCount, 2629f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mbcInUse, uint32_t mbcBandCount, bool postEqInUse, uint32_t postEqBandCount, 2639f011fed92c4982819f78c7cfb4c07b27adf7651rago bool limiterInUse); 2649f011fed92c4982819f78c7cfb4c07b27adf7651rago 2659f011fed92c4982819f78c7cfb4c07b27adf7651rago float getInputGain() const { 2669f011fed92c4982819f78c7cfb4c07b27adf7651rago if (!mInitialized) { 2679f011fed92c4982819f78c7cfb4c07b27adf7651rago return 0; 2689f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2699f011fed92c4982819f78c7cfb4c07b27adf7651rago return mInputGainDb; 2709f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2719f011fed92c4982819f78c7cfb4c07b27adf7651rago void setInputGain(float gain) { 2729f011fed92c4982819f78c7cfb4c07b27adf7651rago mInputGainDb = gain; 2739f011fed92c4982819f78c7cfb4c07b27adf7651rago } 2749f011fed92c4982819f78c7cfb4c07b27adf7651rago 275d24e983ec1ff00ef82e3accc042d160f4fca6435rago float getOutputGain() const { 276d24e983ec1ff00ef82e3accc042d160f4fca6435rago if (!mInitialized) { 277d24e983ec1ff00ef82e3accc042d160f4fca6435rago return 0; 278d24e983ec1ff00ef82e3accc042d160f4fca6435rago } 279d24e983ec1ff00ef82e3accc042d160f4fca6435rago return mOutputGainDb; 280d24e983ec1ff00ef82e3accc042d160f4fca6435rago } 281d24e983ec1ff00ef82e3accc042d160f4fca6435rago void setOutputGain(float gain) { 282d24e983ec1ff00ef82e3accc042d160f4fca6435rago mOutputGainDb = gain; 283d24e983ec1ff00ef82e3accc042d160f4fca6435rago } 284d24e983ec1ff00ef82e3accc042d160f4fca6435rago 2859f011fed92c4982819f78c7cfb4c07b27adf7651rago DPEq* getPreEq(); 2869f011fed92c4982819f78c7cfb4c07b27adf7651rago DPMbc* getMbc(); 2879f011fed92c4982819f78c7cfb4c07b27adf7651rago DPEq* getPostEq(); 2889f011fed92c4982819f78c7cfb4c07b27adf7651rago DPLimiter *getLimiter(); 2899f011fed92c4982819f78c7cfb4c07b27adf7651rago void setLimiter(DPLimiter &limiter); 2909f011fed92c4982819f78c7cfb4c07b27adf7651rago 2919f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 2929f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mInitialized; 2939f011fed92c4982819f78c7cfb4c07b27adf7651rago float mInputGainDb; 294d24e983ec1ff00ef82e3accc042d160f4fca6435rago float mOutputGainDb; 2959f011fed92c4982819f78c7cfb4c07b27adf7651rago 2969f011fed92c4982819f78c7cfb4c07b27adf7651rago DPEq mPreEq; 2979f011fed92c4982819f78c7cfb4c07b27adf7651rago DPMbc mMbc; 2989f011fed92c4982819f78c7cfb4c07b27adf7651rago DPEq mPostEq; 2999f011fed92c4982819f78c7cfb4c07b27adf7651rago DPLimiter mLimiter; 3009f011fed92c4982819f78c7cfb4c07b27adf7651rago 3019f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mPreEqInUse; 3029f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mMbcInUse; 3039f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mPostEqInUse; 3049f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mLimiterInUse; 3059f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 3069f011fed92c4982819f78c7cfb4c07b27adf7651rago 3079f011fed92c4982819f78c7cfb4c07b27adf7651ragoclass DPBase { 3089f011fed92c4982819f78c7cfb4c07b27adf7651ragopublic: 3099f011fed92c4982819f78c7cfb4c07b27adf7651rago DPBase(); 3109f011fed92c4982819f78c7cfb4c07b27adf7651rago virtual ~DPBase() = default; 3119f011fed92c4982819f78c7cfb4c07b27adf7651rago 3129f011fed92c4982819f78c7cfb4c07b27adf7651rago void init(uint32_t channelCount, bool preEqInUse, uint32_t preEqBandCount, 3139f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mbcInUse, uint32_t mbcBandCount, bool postEqInUse, uint32_t postEqBandCount, 3149f011fed92c4982819f78c7cfb4c07b27adf7651rago bool limiterInUse); 315ff0a51f978a6307153cc752b8071144d642b54acrago virtual size_t processSamples(const float *in, float *out, size_t samples) = 0; 316ff0a51f978a6307153cc752b8071144d642b54acrago virtual void reset() = 0; 3179f011fed92c4982819f78c7cfb4c07b27adf7651rago 3189f011fed92c4982819f78c7cfb4c07b27adf7651rago DPChannel* getChannel(uint32_t channelIndex); 3199f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t getChannelCount() const { 3209f011fed92c4982819f78c7cfb4c07b27adf7651rago return mChannelCount; 3219f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3229f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t getPreEqBandCount() const { 3239f011fed92c4982819f78c7cfb4c07b27adf7651rago return mPreEqBandCount; 3249f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3259f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t getMbcBandCount() const { 3269f011fed92c4982819f78c7cfb4c07b27adf7651rago return mMbcBandCount; 3279f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3289f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t getPostEqBandCount() const { 3299f011fed92c4982819f78c7cfb4c07b27adf7651rago return mPostEqBandCount; 3309f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3319f011fed92c4982819f78c7cfb4c07b27adf7651rago bool isPreEQInUse() const { 3329f011fed92c4982819f78c7cfb4c07b27adf7651rago return mPreEqInUse; 3339f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3349f011fed92c4982819f78c7cfb4c07b27adf7651rago bool isMbcInUse() const { 3359f011fed92c4982819f78c7cfb4c07b27adf7651rago return mMbcInUse; 3369f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3379f011fed92c4982819f78c7cfb4c07b27adf7651rago bool isPostEqInUse() const { 3389f011fed92c4982819f78c7cfb4c07b27adf7651rago return mPostEqInUse; 3399f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3409f011fed92c4982819f78c7cfb4c07b27adf7651rago bool isLimiterInUse() const { 3419f011fed92c4982819f78c7cfb4c07b27adf7651rago return mLimiterInUse; 3429f011fed92c4982819f78c7cfb4c07b27adf7651rago } 3439f011fed92c4982819f78c7cfb4c07b27adf7651rago 3449f011fed92c4982819f78c7cfb4c07b27adf7651ragoprivate: 3459f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mInitialized; 3469f011fed92c4982819f78c7cfb4c07b27adf7651rago //general 3479f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t mChannelCount; 3489f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mPreEqInUse; 3499f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t mPreEqBandCount; 3509f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mMbcInUse; 3519f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t mMbcBandCount; 3529f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mPostEqInUse; 3539f011fed92c4982819f78c7cfb4c07b27adf7651rago uint32_t mPostEqBandCount; 3549f011fed92c4982819f78c7cfb4c07b27adf7651rago bool mLimiterInUse; 3559f011fed92c4982819f78c7cfb4c07b27adf7651rago 3569f011fed92c4982819f78c7cfb4c07b27adf7651rago std::vector<DPChannel> mChannel; 3579f011fed92c4982819f78c7cfb4c07b27adf7651rago}; 3589f011fed92c4982819f78c7cfb4c07b27adf7651rago 3599f011fed92c4982819f78c7cfb4c07b27adf7651rago} //namespace dp_fx 360ff0a51f978a6307153cc752b8071144d642b54acrago 361ff0a51f978a6307153cc752b8071144d642b54acrago 362ff0a51f978a6307153cc752b8071144d642b54acrago#endif // DPBASE_H_ 363