kobodl/sound/a_filters.h
Ville Lindholm dbc223eb84
Initial commit
Import existing source tree; original VCS history is no longer available.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-28 16:35:31 +03:00

111 lines
3.6 KiB
C

/*(LGPL)
---------------------------------------------------------------------------
a_filters.h - Various Audio Signal Filters
---------------------------------------------------------------------------
* Copyright (C) 2001, 2002, David Olofson
*
* 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 2.1 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, write to the Free Software Foundation,
* Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _A_FILTERS_H_
#define _A_FILTERS_H_
/*--------------------------------------------------------------------
f6_t - Simple mono 6 dB/oct state variable filter
--------------------------------------------------------------------*/
typedef struct f6_t
{
int rate;
int d;
int f;
} f6_t;
void f6_init(f6_t *fil, int fs);
void f6_set_f(f6_t *fil, int f);
void f6_process_lp(f6_t *fil, int *buf, unsigned frames);
void f6_process_hp(f6_t *fil, int *buf, unsigned frames);
/*--------------------------------------------------------------------
f6s_t - Simple stereo 6 dB/oct state variable filter
--------------------------------------------------------------------*/
typedef struct f6s_t
{
int rate;
int f;
int dl, dr;
} f6s_t;
void f6s_init(f6s_t *fil, int fs);
void f6s_set_f(f6s_t *fil, int f);
void f6s_process_lp(f6s_t *fil, int *buf, unsigned frames);
void f6s_process_hp(f6s_t *fil, int *buf, unsigned frames);
/*--------------------------------------------------------------------
dcf6s_t - Fast stereo 6 dB/oct HPF for DC suppression
--------------------------------------------------------------------*/
typedef struct dcf6s_t
{
int rate;
int f;
int dl, dr;
} dcf6s_t;
void dcf6s_init(dcf6s_t *fil, int fs);
void dcf6s_set_f(dcf6s_t *fil, int f);
void dcf6s_process(dcf6s_t *fil, int *buf, unsigned frames);
int dcf6s_silent(dcf6s_t *fil);
/*--------------------------------------------------------------------
resof12_t - Resonant mono 12 dB/oct state variable filter
--------------------------------------------------------------------*/
typedef struct resof12_t
{
int rate;
int d1, d2;
int f;
int q;
} resof12_t;
void resof12_init(resof12_t *rf, int fs);
void resof12_set_f(resof12_t *rf, int f);
void resof12_set_q(resof12_t *rf, int q);
void resof12_process_lp(resof12_t *rf, int *buf, unsigned frames); /*In-place LP*/
void resof12_process_hp(resof12_t *rf, int *buf, unsigned frames); /*In-place HP*/
void resof12_process_bp(resof12_t *rf, int *buf, unsigned frames); /*In-place BP*/
/*
* LP filter the 'buf' buffer, while separating off
* the HP part into buffer 'out'.
*/
void resof12_process_split(resof12_t *rf, int *buf, int *out, unsigned frames);
/*--------------------------------------------------------------------
resof12s_t - Resonant stereo 12 dB/oct state variable filter
--------------------------------------------------------------------*/
typedef struct resof12s_t
{
int rate;
int d1l, d2l;
int d1r, d2r;
int f;
int q;
} resof12s_t;
void resof12s_init(resof12s_t *rf, int fs);
void resof12s_set_f(resof12s_t *rf, int f);
void resof12s_set_q(resof12s_t *rf, int q);
void resof12s_process_lp(resof12s_t *rf, int *buf, unsigned frames); /*In-place LP*/
#endif /*_A_FILTERS_H_*/