Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Filter Overhaul #105

Closed
5 of 6 tasks
m-m-adams opened this issue Jun 25, 2023 · 9 comments
Closed
5 of 6 tasks

Filter Overhaul #105

m-m-adams opened this issue Jun 25, 2023 · 9 comments
Labels
enhancement New feature or request refactor Refactoring (but not necessarily functional change) of codebase

Comments

@m-m-adams
Copy link
Collaborator

m-m-adams commented Jun 25, 2023

The existing deluge filters have a fixed configuration of a low pass ladder filter into a high pass ladder filter. The goal of this issue is to switch it to something more like the hydrasynth, where the LPF would have a variety of models to choose from and the HPF is replaced by an SVF that's continuously variable from LP to band or notch to HP. This opens up a ton of possibilities for sound design by

Main goals:

  • Augment HPF ladder filter with a morphable (low-band/notch-high) SVF. Maintain a classic switch to use the existing HPF
  • Enable series/parallel switching of the two filters
  • Enable oscillator routing separately into each filter not feasible without overhauling oscillators
  • Add additional filter types to LPF slot (SVF, vocal, BPF bank, maybe more)

Side goals:

  • Refactor filter code to separate ladder filter code from filter configuration Improve filter processing and clean up API #304
  • Refactor filter menu and configuration code so that a single list of filters can be maintained and automatically populate menus and configuration (mostly)

I'm transferring the progress tracker from my PR to this issue so that PRs can be incorporated when usable before the entire issue is complete.

@m-m-adams m-m-adams mentioned this issue Jun 25, 2023
@m-m-adams
Copy link
Collaborator Author

PR #103 adds a lowpass SVF to the low pass filters, accessible through the existing filter selection button

@bfredl
Copy link
Contributor

bfredl commented Jun 25, 2023

The goal of this issue is to switch it to something more like the hydrasynth,

While I like the filters on the hydra and agree it is a good inspiration, I wonder if it not be simpler for us and more flexible to treat the two filter slots as symmetric and allow to pick any filter model in either slot?

The hydra has a static voice count and a fixed DSP budget per filter, while the deluge is dynamic and more complex voices vs more polyphony is a tradeoff which is exposed to the user.

@m-m-adams
Copy link
Collaborator Author

Yeah that's a great point, I was mostly thinking about what the UI would look like. If the HPF slot is always an SVF then the HPF db/oct pad can become the morph control

On the other hand there are the two unused pads below the current filter controls that we could expand too, but I think that would need a broader discussion on how we're handling UI changes

@sichtbeton
Copy link
Contributor

sichtbeton commented Jun 30, 2023

Edit : has been resolved.

As already stated on the discord, there is a strange behaviour when using the filter for a complete kit. steps to replicate the bug:

  • have one item or more in a kit
  • enable "affect all"
  • turn lpf to "svf"
  • play a longer sound to hear the filter actually working
  • turn the filter down.

what happens is that the moment the filter is engaged, there is an audible click coming from the filter and there is a very sudden jump in cutoff.

@m-m-adams
Copy link
Collaborator Author

m-m-adams commented Jul 1, 2023

I'm currently looking at building a filter interface with three methods, init, setup and filter, plus a name

  • Init - construct a new filter with cleared internal state
  • Setup - take in cutoff, resonance, drive/morph, return gain compensation, configure filter parameters
  • filter - run filter on a buffer and keep internal state
  • name - string for display

HPF and LPF filters will be separated. Init will be called when the filter type is changed in the UI routine, and all filter type checks in the audio engine can be skipped as it just calls setup and filter on the currently initialized filter.

The filter selection code will be updated to iterate through a list of possible filters, initialize the selected filter, and display the result of its name method. This will allow new filters to be built by simply implementing the three methods and adding to the filter list.

I have a couple possible thoughts on UI:

  • HPF is always an SVF with db/Oct morphing between low/notch/high, LPF UI unchanged; or
  • The currently empty pad below db/Oct controls drive (which could be treated as morph where it makes sense). Db/oct can then iterate through the HPF/lpf filters respectively

@sapphire-arches
Copy link
Collaborator

sapphire-arches commented Jul 1, 2023 via email

@sichtbeton
Copy link
Contributor

sichtbeton commented Jul 1, 2023

Having a routing mechanism to send either both oscillators to one filter or having two separate filters in varying order would be nice.

Maybe (as you already stated) using the two unused pads below hp and lp for this? So for each osc would have these states:

  1. filters off
  2. filter 1
  3. filter 2
  4. filter 1 + 2
  5. filter 2 + 1

The left pad would be for osc 1 and the right for osc 2.

The drive knob could be the one above (from left 10/ from top 3) that currently only says "SOON".

image

@sichtbeton
Copy link
Contributor

this could be closed also because there are a couple of PRs already?

@m-m-adams
Copy link
Collaborator Author

largely implemented by #336, one remaining

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request refactor Refactoring (but not necessarily functional change) of codebase
Projects
None yet
Development

No branches or pull requests

4 participants