Free Electron
splitter.h
1 #ifndef FILTER_SPLITTER_H
2 #define FILTER_SPLITTER_H
3 
4 #include "alMain.h"
5 
6 
7 /* Band splitter. Splits a signal into two phase-matching frequency bands. */
8 typedef struct BandSplitter {
9  ALfloat coeff;
10  ALfloat lp_z1;
11  ALfloat lp_z2;
12  ALfloat hp_z1;
13 } BandSplitter;
14 
15 void bandsplit_init(BandSplitter *splitter, ALfloat f0norm);
16 void bandsplit_clear(BandSplitter *splitter);
17 void bandsplit_process(BandSplitter *splitter, ALfloat *restrict hpout, ALfloat *restrict lpout,
18  const ALfloat *input, ALsizei count);
19 
20 /* The all-pass portion of the band splitter. Applies the same phase shift
21  * without splitting the signal.
22  */
23 typedef struct SplitterAllpass {
24  ALfloat coeff;
25  ALfloat z1;
26 } SplitterAllpass;
27 
28 void splitterap_init(SplitterAllpass *splitter, ALfloat f0norm);
29 void splitterap_clear(SplitterAllpass *splitter);
30 void splitterap_process(SplitterAllpass *splitter, ALfloat *restrict samples, ALsizei count);
31 
32 
33 typedef struct FrontStablizer {
34  SplitterAllpass APFilter[MAX_OUTPUT_CHANNELS];
35  BandSplitter LFilter, RFilter;
36  alignas(16) ALfloat LSplit[2][BUFFERSIZE];
37  alignas(16) ALfloat RSplit[2][BUFFERSIZE];
38 } FrontStablizer;
39 
40 #endif /* FILTER_SPLITTER_H */