From 52ef66da4d785414e7ae5a60dd44a01727514169 Mon Sep 17 00:00:00 2001 From: Joerg Mueller Date: Sun, 1 Aug 2010 22:33:50 +0000 Subject: Audaspace: * Created awesome filter classes :) * Made all filter effects use the filter classes instead of having the same implementation everywhere. * Added a Python API for LTI IIR filters. * Fixed a warning in creator.c that was introduced when adding game autoplay. --- intern/audaspace/FX/AUD_IIRFilterReader.cpp | 50 +++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 intern/audaspace/FX/AUD_IIRFilterReader.cpp (limited to 'intern/audaspace/FX/AUD_IIRFilterReader.cpp') diff --git a/intern/audaspace/FX/AUD_IIRFilterReader.cpp b/intern/audaspace/FX/AUD_IIRFilterReader.cpp new file mode 100644 index 00000000000..120c9f8d0ae --- /dev/null +++ b/intern/audaspace/FX/AUD_IIRFilterReader.cpp @@ -0,0 +1,50 @@ +/* + * $Id$ + * + * ***** BEGIN LGPL LICENSE BLOCK ***** + * + * Copyright 2009 Jörg Hermann Müller + * + * This file is part of AudaSpace. + * + * AudaSpace 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. + * + * AudaSpace 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 AudaSpace. If not, see . + * + * ***** END LGPL LICENSE BLOCK ***** + */ + +#include "AUD_IIRFilterReader.h" + +AUD_IIRFilterReader::AUD_IIRFilterReader(AUD_IReader* reader, + std::vector b, + std::vector a) : + AUD_BaseIIRFilterReader(reader, b.size(), a.size()), m_a(a), m_b(b) +{ + for(int i = 1; i < m_a.size(); i++) + m_a[i] /= m_a[0]; + for(int i = 0; i < m_b.size(); i++) + m_b[i] /= m_a[0]; + m_a[0] = 1; +} + +sample_t AUD_IIRFilterReader::filter() +{ + sample_t out = 0; + + for(int i = 1; i < m_a.size(); i++) + out -= y(-i) * m_a[i]; + for(int i = 0; i < m_b.size(); i++) + out += x(-i) * m_b[i]; + + return out; +} -- cgit v1.2.3