LMMS
Loading...
Searching...
No Matches
ls_filter.h
Go to the documentation of this file.
1#ifndef LS_FILTER_H
2#define LS_FILTER_H
3
4#include <util/biquad.h>
5
6#define FILT_MIDI_2_FREQ(m) (m * 80.0f + 10.0f)
7#define FILT_MIDI_2_RESO(m) (m * 0.00787f)
8
9#define LSF_BW 0.9
10#define LSF_FB 0.9f
11
18
24
25static inline void ls_filt_init(ls_filt *f)
26{
27 biquad_init(&(f->filt));
28 biquad_init(&(f->bp_filt));
29}
30
31static inline void ls_filt_setup(ls_filt *f, ls_filt_type t, bq_t cutoff,
32 bq_t resonance, bq_t fs)
33{
34 bp_set_params(&(f->bp_filt), cutoff, 0.7, fs);
35
36 switch(t) {
37 case LS_FILT_TYPE_LP:
38 lp_set_params(&(f->filt), cutoff, 1.0 - resonance * LSF_BW, fs);
39 break;
40 case LS_FILT_TYPE_BP:
41 bp_set_params(&(f->filt), cutoff, 1.0 - resonance * LSF_BW, fs);
42 break;
43 case LS_FILT_TYPE_HP:
44 hp_set_params(&(f->filt), cutoff, 1.0 - resonance * LSF_BW, fs);
45 break;
46 default:
47 /* oops, its not a known type - should really happen, but
48 lets make the output silent just in case */
49 lp_set_params(&(f->filt), 1.0, 1.0, fs);
50 break;
51 }
52
53 f->scale = 1.0f - resonance * 0.7f;
54 f->resonance = resonance;
55}
56
57static inline bq_t ls_filt_run(ls_filt *f, bq_t in)
58{
59 return biquad_run(&(f->filt), in) * f->scale +
60 biquad_run_fb(&(f->bp_filt), in, f->resonance * LSF_FB) *
61 f->resonance;
62}
63
64#endif
struct huft * t
Definition inflate.c:943
unsigned f
Definition inflate.c:1572
float in
Definition lilv_test.c:1460
static void ls_filt_init(ls_filt *f)
Definition ls_filter.h:25
static bq_t ls_filt_run(ls_filt *f, bq_t in)
Definition ls_filter.h:57
#define LSF_FB
Definition ls_filter.h:10
ls_filt_type
Definition ls_filter.h:19
@ LS_FILT_TYPE_HP
Definition ls_filter.h:22
@ LS_FILT_TYPE_LP
Definition ls_filter.h:20
@ LS_FILT_TYPE_BP
Definition ls_filter.h:21
static void ls_filt_setup(ls_filt *f, ls_filt_type t, bq_t cutoff, bq_t resonance, bq_t fs)
Definition ls_filter.h:31
#define LSF_BW
Definition ls_filter.h:9
Definition biquad.h:21
Definition ls_filter.h:12
bq_t scale
Definition ls_filter.h:15
bq_t resonance
Definition ls_filter.h:16
biquad bp_filt
Definition ls_filter.h:14
biquad filt
Definition ls_filter.h:13
static bq_t biquad_run_fb(biquad *f, bq_t x, const bq_t fb)
Definition biquad.h:164
static void biquad_init(biquad *f)
Definition biquad.h:33
static void lp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs)
Definition biquad.h:105
static void hp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs)
Definition biquad.h:120
static void bp_set_params(biquad *f, bq_t fc, bq_t bw, bq_t fs)
Definition biquad.h:135
static bq_t biquad_run(biquad *f, const bq_t x)
Definition biquad.h:150
BIQUAD_TYPE bq_t
Definition biquad.h:16