/** * aweight.h - Efficient A-weighting algorithm * Copyright (C) 2024 Clyne Sullivan * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License along * with this program. If not, see . */ #ifndef AWEIGHT_H #define AWEIGHT_H /** * Applies A-weighting to the given audio sample. * @param in_div4 The audio sample divided by four * @return The filtered (A-weighted) sample */ inline float process(float in_div4) { static float z1 = 0, z2 = 0, z3 = 0, z5 = 0; float out1 = in_div4 + z1; z1 = 1.062f * out1 + z2; z2 = -0.14f * out1 - in_div4; float out2 = out1 + z3; z3 = out1; float out3 = out2 + z5; z5 = 0.985f * out3 - out2; return out3; } #endif // AWEIGHT_H