summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/sound/flt_biquad.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/sound/flt_biquad.h')
-rw-r--r--src/devices/sound/flt_biquad.h38
1 files changed, 34 insertions, 4 deletions
diff --git a/src/devices/sound/flt_biquad.h b/src/devices/sound/flt_biquad.h
index 17050c75017..e565aa6da8a 100644
--- a/src/devices/sound/flt_biquad.h
+++ b/src/devices/sound/flt_biquad.h
@@ -24,24 +24,49 @@ public:
NOTCH,
PEAK,
LOWSHELF,
- HIGHSHELF
+ HIGHSHELF,
+ RAWPARAMS
+ };
+
+ struct biquad_params
+ {
+ biquad_type type;
+ double fc;
+ double q;
+ double gain;
};
filter_biquad_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// set up the filter with the specified filter parameters and return a pointer to the new device
filter_biquad_device& setup(biquad_type type, double fc, double q, double gain);
- // update an existing instance with new filter parameters
- void update_params(biquad_type type, double fc, double q, double gain);
+ filter_biquad_device& setup(biquad_params p);
+ // modify an existing instance with new filter parameters
+ void modify(biquad_type type, double fc, double q, double gain);
+ void modify(biquad_params p);
+
+ // set up the filter with raw biquad coefficients
+ filter_biquad_device& setup_raw(double a1, double a2, double b0, double b1, double b2);
+ void modify_raw(double a1, double a2, double b0, double b1, double b2);
+
+ // Helper setup functions to create common filters representable by biquad filters:
+ // (and, as needed, modify/update/recalc helpers)
- // helper setup functions to create common filters representable by biquad filters
// Sallen-Key low-pass
filter_biquad_device& opamp_sk_lowpass_setup(double r1, double r2, double r3, double r4, double c1, double c2);
+ void opamp_sk_lowpass_modify(double r1, double r2, double r3, double r4, double c1, double c2);
+ biquad_params opamp_sk_lowpass_calc(double r1, double r2, double r3, double r4, double c1, double c2);
+
// TODO when needed: Sallen-Key band-pass
+
+ // TODO when needed: Sallen-Key band-reject
+
// TODO when needed: Sallen-Key high-pass
// Multiple-Feedback low-pass
filter_biquad_device& opamp_mfb_lowpass_setup(double r1, double r2, double r3, double c1, double c2);
+ void opamp_mfb_lowpass_modify(double r1, double r2, double r3, double c1, double c2);
+ biquad_params opamp_mfb_lowpass_calc(double r1, double r2, double r3, double c1, double c2);
// Multiple-Feedback band-pass
filter_biquad_device& opamp_mfb_bandpass_setup(double r1, double r2, double r3, double c1, double c2);
@@ -49,6 +74,11 @@ public:
// Multiple-Feedback high-pass
filter_biquad_device& opamp_mfb_highpass_setup(double r1, double r2, double c1, double c2, double c3);
+ // Differentiator band-pass
+ filter_biquad_device& opamp_diff_bandpass_setup(double r1, double r2, double c1, double c2);
+ void opamp_diff_bandpass_modify(double r1, double r2, double c1, double c2);
+ biquad_params opamp_diff_bandpass_calc(double r1, double r2, double c1, double c2);
+
protected:
// device-level overrides