overte/libraries/audio/src/AudioGain.h
2014-09-08 14:05:47 -07:00

99 lines
2.7 KiB
C++

//
// AudioGain.h
// hifi
//
// Created by Craig Hansen-Sturm on 9/1/14.
// Copyright 2014 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#ifndef hifi_AudioGain_h
#define hifi_AudioGain_h
class AudioGain
{
float32_t _gain;
bool _mute;
public:
AudioGain() {
initialize();
}
~AudioGain() {
finalize();
}
void initialize() {
setParameters(1.0f,0.0f);
}
void finalize() {
}
void reset() {
initialize();
}
void setParameters(const float gain, const float mute) {
_gain = std::min(std::max(gain, 0.0f), 1.0f);
_mute = mute != 0.0f;
}
void getParameters(float& gain, float& mute) {
gain = _gain;
mute = _mute ? 1.0f : 0.0f;
}
void render(AudioBufferFloat32& frameBuffer) {
if (_mute) {
frameBuffer.zeroFrames();
return;
}
float32_t** samples = frameBuffer.getFrameData();
for (uint16_t j = 0; j < frameBuffer.getChannelCount(); ++j) {
for (uint16_t i = 0; i < frameBuffer.getFrameCount(); i += 32) {
samples[j][i + 0] *= _gain;
samples[j][i + 1] *= _gain;
samples[j][i + 2] *= _gain;
samples[j][i + 3] *= _gain;
samples[j][i + 4] *= _gain;
samples[j][i + 5] *= _gain;
samples[j][i + 6] *= _gain;
samples[j][i + 7] *= _gain;
samples[j][i + 8] *= _gain;
samples[j][i + 9] *= _gain;
samples[j][i + 10] *= _gain;
samples[j][i + 11] *= _gain;
samples[j][i + 12] *= _gain;
samples[j][i + 13] *= _gain;
samples[j][i + 14] *= _gain;
samples[j][i + 15] *= _gain;
samples[j][i + 16] *= _gain;
samples[j][i + 17] *= _gain;
samples[j][i + 18] *= _gain;
samples[j][i + 19] *= _gain;
samples[j][i + 20] *= _gain;
samples[j][i + 21] *= _gain;
samples[j][i + 22] *= _gain;
samples[j][i + 23] *= _gain;
samples[j][i + 24] *= _gain;
samples[j][i + 25] *= _gain;
samples[j][i + 26] *= _gain;
samples[j][i + 27] *= _gain;
samples[j][i + 28] *= _gain;
samples[j][i + 29] *= _gain;
samples[j][i + 30] *= _gain;
samples[j][i + 31] *= _gain;
}
}
}
};
#endif // AudioGain_h