aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClyne <clyne@bitgloo.com>2024-07-23 12:28:33 -0400
committerClyne <clyne@bitgloo.com>2024-07-23 12:28:33 -0400
commit6125e0c4f078a995bbac8082d509206ab1b941db (patch)
treee8f3331fa4b0ce3c95dd8b09aa2bebd69620d3a0
parent318497398bf78242b2dda309b5b70a153a75f8f7 (diff)
Add 'aweight.h'
-rw-r--r--aweight.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/aweight.h b/aweight.h
new file mode 100644
index 0000000..2f4df71
--- /dev/null
+++ b/aweight.h
@@ -0,0 +1,43 @@
+/**
+ * aweight.h - Efficient A-weighting algorithm
+ * Copyright (C) 2024 Clyne Sullivan <clyne@bitgloo.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+#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