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

Fx by @jnonis #765

Draft
wants to merge 2 commits into
base: old-baseline
Choose a base branch
from
Draft

Fx by @jnonis #765

wants to merge 2 commits into from

Conversation

probonopd
Copy link
Owner

@probonopd probonopd commented Nov 17, 2024

Do not merge this PR. We need a PR against master that has no conflicts.

Looks like @jnonis has done a great job with effects. Unfortunately it was not opened as a pull request back then and our code has deviated since, to his changes don't cleanly apply to master. Hence, applying them against an old baseline to get builds for testing in this PR.

This has:

  • A Juno style chorus (Chorus I, Chorus II,...)
  • Delay
  • LP Filter
  • DS1
  • Big Muff
  • TalRvrb3
  • Reverb
  • MVerb
  • 3Band EQ
  • Phaser
  • A Phaser
  • Flanger
  • Saving effects in performance files (@Banana71 might like this)

Aapparently one effect can be active at a time for each TG ("insert effect") and one global ("send effect").

Every TG also has MIDI effects, currently a simple "Arp".
It also has a new global "Tempo" option, which is used by the Arp.

probonopd and others added 2 commits November 17, 2024 17:14
* Added Insert FX and Juno Chorus

* Added lock to inser FXs to avoid crashes.
Code clean up.

* Added delay implementation

* Added LP Filter Effect

* Added generic fx paramters handling

* Save Insert FX parameters into performance

* Fix for Insert FX paramters ui

* Added Bypass to FX Parameters

* Fix for Bypass and Removed Logs

* Added Mod Distortions DS1 and BigMuff

* Fix for distortions

* Added Tal Reverb 3

* Process TG in stereo

* Insert FX UI improvements

* Added Ping Pong Mode and Mix control to Delay FX

* Fixes for Tal Reverb 3 paramteres

* Code clean up

* WIP: Added Send FX

* Save Send FX configuration in performance

* Adapted Plate Reverb as AudioEffect

* Added Backward compatibility for performances

* Handle Midi clock and resolve BPM

* Fix for FX Params

* Delay FX: Support for tempo sync

* Not working Arp

* Almost working Arp

* Removed log from Arp

* Added Arp to TG menu

* Arp fixes

* Handle Arp as a Midi FX

* Store Midi FX settings into performance

* Save Tempo into Performance

* UI fix for Tempo display

* Added MVerb effect

* Added 3 Band EQ

* Refactor Effect directory

* Fix for MVerb

* Added RKR / Zynaddsubfx Phasers

* Fix missing Send FX setup for Phasers

* AudioEffect refactor

* Fix for A Phaser parameters

* Fix for Reverb backward compatibility

* Fix for MVerb port

* Fix for RPi 1 Stereo output

* Fix for FX UI

* UI improvements

* Added Flanger

* Fix for Midi Clock Sync

---------

Co-authored-by: jnonis <[email protected]>
Co-authored-by: Javier Nonis <[email protected]>
@probonopd probonopd marked this pull request as draft November 17, 2024 16:22
Copy link

Build for testing:
MiniDexed_2024-11-17-062671a
Use at your own risk.

@probonopd
Copy link
Owner Author

@diyelectromusic maybe you'd like to have a look at this?

@diyelectromusic
Copy link
Collaborator

@diyelectromusic maybe you'd like to have a look at this?

I'm not sure what you want me to say. That is an awful lot of code changes with implications it is almost impossible to anticipate.

Considering how many times in the past you've resisted some of my changes on the basis of not making the code too complex, seeing this and all the network additions - well, to be honest, I just think they will make the codebase significant less maintainable than it already is - and maintaining it as it is right now is already pretty tough.

Will these people be responsible for maintaining these huge changes if accepted? There is certainly no way I can get my head around the code that is being proposed and it is almost impossible to anticipate the impact on the real-time performance of the system across all Pis with so much additional processing being added as part of the run-time scheduling itself.

In short, I'm afraid I just don't know where to start thinking about the ramifications of all this new code...

Kevin

@jnonis
Copy link

jnonis commented Nov 19, 2024

Hi, I've started that branch trying to add a chorus and a delay effects to Minidexed, but then I tried to port other LV2 effects and make them to load dynamically.
My main testing platform is Raspberry Pi Zero 2w so I think it should worked fine in RPi 3, 4 and 5.
I've also enabled these effects for only one TG in an original Raspberry Pi model B and it works fine using the chorus and the massive TAL reverb 3.
If you have some stress test that I can use to check performance, like a particular patch or midi file, let me know.
The only effect that is given some problems is the MVerb port.

Now the FXs and Mix structure looks like this:
Mididexed FX1

But I'm planing to change it to something like this:
Mididexed FX2

I think the main issue with the current base code is related with the 8 output support, because the insert FXs are stereo, if I change the insert FXs to be Mono I guess all the changes will fit.

@probonopd
Copy link
Owner Author

probonopd commented Nov 19, 2024

Hi @jnonis welcome to MiniDexed. I tried your branch and I really like it. And to address @diyelectromusic's concerns, we need to

  • Make it possible via an option in minidexed.ini to entirely disable the FX feature, so that the signal chain stays unchanged when disabled (needed for testing and debugging)
  • Heavily stress test it on various Pi models (I don't have a systematic MIDI file for this yet but really anything with fast-playing notes and heavy polyphony should do)

Thanks for the diagrams, these are really helpful. One could think that the insert FX should be mono since the TGs are mono. But don't some FX take mono as an input and produce audible stereo on the output? Or would you move all such FX to chain FX?

Maybe another option would be to just disable FX altogether when an 8 outputs configuration is detected. My assumption is that the (likely very small) user group who uses 8 outputs is clearly doing so in order to do further postprocessing outside of MiniDexed, and hence probably is not interested in built-in FX. So personally I'd not worry about this use case in the context of FX. @diyelectromusic what do you think?

My line of thinking is that if I have 2 instruments, say E. Piano and Bass, and I want to have a (stereo) chorus on only one of them (E. Piano but not Bass). Isn't that a typical application?

I know that some of our users really like the idea of sends, but I am unsure how this is done for chain FX without overboarding complexity and on the low-spec CPUs we are dealing with.

And wouldn't the Arp typically come after the seq/loop?

All of this is not exactly my area of expertise. Maybe @Banana71 would like to add to this discussion?

@diyelectromusic
Copy link
Collaborator

Maybe another option would be to just disable FX altogether when an 8 outputs configuration is detected. My assumption is that the (likely very small) user group who uses 8 outputs is clearly doing so in order to do further postprocessing outside of MiniDexed, and hence probably is not interested in built-in FX. So personally I'd not worry about this use case in the context of FX. @diyelectromusic what do you think?

That is essentially the assumption when I implemented it - yes. IIRC if 8-output mode is selected then all the existing stereo, pan, FX processing is skipped, so I'd say do the same here - basically just add to what is already there fx wise and not worry about 8-ch output.

Kevin

@Banana71
Copy link

Build for testing: MiniDexed_2024-11-17-062671a Use at your own risk.

My Raspberry Pi 4 doesn't work at all. The display remains dark and no sound is produced. Since I can't easily access my HDMI port, I can't see the log. When I find time, I'll try a different Raspberry Pi.

@Banana71
Copy link

I finally built a new miniDexed (Raspberry Pi 3 Model A+) and can now test the effects.

@jnonis did a good job.

  • The miniDexed runs stable and without crashes.

  • The sound is clear, no noise, crackling or anything like that.

  • The integration in the Performance.ini is excellent and does not bloat the ini files.

  • The Arp. enhances the miniDexed. Unfortunately, it only processes fixed velocity values ​​and therefore sounds a bit static.

  • The Chorus and the TalReverb3 are of very good quality.

  • I am still testing the other effects and will go into them in more detail later.

@jnonis
Copy link

jnonis commented Dec 26, 2024

Hi,
I've created a new branch based on current main of Minidexed with FX changes.
https://github.com/jnonis/MiniDexed/tree/fx-updated

@Banana71 I've also added support for "As Played" velocity to the Arp, just set the velocity at 0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants