diff options
Diffstat (limited to 'src/devices/sound/flt_biquad.h')
-rw-r--r-- | src/devices/sound/flt_biquad.h | 38 |
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 |