lmms icon indicating copy to clipboard operation
lmms copied to clipboard

Switch caps to submodule

Open tresf opened this issue 7 years ago • 44 comments

The CAPS LADSPA plugins -- or more commonly known in LMMS as "C*" -- are authored by Tim Goetze and they have changed considerably over the years. The current version as of writing this is 0.9.26.

No upstream VCS exists, but moddevices keeps a viable clone of CAPS that we can safely use as an LADSPA mirror (and eventually for LV2, when we add support).

Since this involves testing presets and projects, help is needed. To compare the mapping of a plugin, export a project as .mmp (without the z) and compare the ladspa sections.

Compatibility

0.4 0.9 coded tested
AmpIII --
AmpIV --
AmpV --
AmpVTS AmpVTS
AutoWah AutoFilter 💡
CabinetI --
CabinetII --
  CabinetIII
  CabinetIV
ChorusI ChorusI
ChorusII --
Clip Saturate 🗯Upgrade broken, see notes 0e14f39
Compress Compress
  CompressX2 -- --
Eq Eq10 ✅ 5bee27c
Eq2x2 Eq10x2
  Eq4p -- --
  EqFA4p -- --
Narrower Narrower
  Noisegate -- --
PhaserI --
PhaserII PhaserII
Plate2x2 PlateX2 ✅ 5bee27c
  Spice -- --
  SpiceX2 -- --
PreampIII --
PreampIV --
SweepVFI --
SweepVFII --
ToneStack ToneStack, model positions switched 9b8e39ff8700fc162b369102b34961677c888a46
ToneStackLT ToneStack: Model 0, See comment f63ec84d698fad297cfe58c8052d1b13c3e8942c

Supercedes #3979

tresf avatar Dec 01 '17 19:12 tresf

FYI, Travis-CI checks are slightly misleading. It's passing for LMMS, but failing for tresf. https://travis-ci.org/LMMS/lmms/builds/366253352. It's just the exprtk submodule on my fork being behind, nothing to worry about.

tresf avatar Apr 13 '18 19:04 tresf

First of all thanks to @tresf for initial work on the effects.

The changes are immense. Here is what I can easily do:

  • [x] Change the effect names, such that for all effects, equivalent effects can be found (according to the table above)
  • [ ] Map those parameters that still exist (~50-70%) to their new values (port numbers changed)
  • [ ] Fix bad minimal and maximal values

What I may not want to do:

  • Fix parameters due to changed algorithms/scales. The algorithms changed a lot, and IMO it would take too much effort to think about correct remappings. In order to avoid clipping, I'd rather suggest doing tests than digging into the large algorithm changes. If anyone really feels fit enough to do that however, this can still be done after my commits, but I recommend to not do it. :stuck_out_tongue_winking_eye:
  • Doing it all immediately. Give me 1 or 2 months.

JohannesLorenz avatar Apr 14 '18 10:04 JohannesLorenz

@tresf The compatibility table tells us which effects are planned to map. What, however, about the following?

  • AmpIII, AmpIV, AmpV -> AmpVTS
  • CabinetI, CabinetII -> CabinettIV
  • ChorusII -> ChorusI
  • PhaserI -> PhaserII
  • ToneStackLT -> ToneStack

JohannesLorenz avatar Oct 03 '18 08:10 JohannesLorenz

@JohannesLorenz we either drop them or do our best to map them. Sorry I realize re-reading the original description that this is not obvious.

Ideally, we'd try to maintain some form of compatibility if possible. Feel free to edit as needed.

tresf avatar Oct 03 '18 14:10 tresf

The current version as of writing this is 0.9.24.

And as of today caps latest release reads Version 0.9.26  ·  October 2018

I believe Eq10x2 is to Eq2x2 what Eq10 is to Eq. So...

0.4 0.9
Eq Eq10 ✅ 5bee27c
Eq2x2 Eq10x2

zonkmachine avatar Oct 31 '19 14:10 zonkmachine

@tresf I think we have no other chance than finishing this PR :smiley:

I'll try to rebase this to master and try to get the code finished now.

JohannesLorenz avatar Sep 05 '20 13:09 JohannesLorenz

Marking as TODO: Master commit ea98ba4daefd4055ca98f05d31dbdd3522792a01 needs to go into CAPS.

JohannesLorenz avatar Sep 05 '20 14:09 JohannesLorenz

@mrkline Can you please open a PR of your changes of ea98ba4 against moddevices/caps-lv2?

JohannesLorenz avatar Sep 05 '20 14:09 JohannesLorenz

sorry, accidentally closed

JohannesLorenz avatar Sep 05 '20 19:09 JohannesLorenz

:robot: Hey, I'm @LmmsBot from github.com/lmms/bot and I made downloads for this pull request, click me to make them magically appear! :tophat:

Linux

Windows

macOS

:robot:
{"platform_name_to_artifacts": {"Linux": [{"artifact": {"title": {"title": "(AppImage)", "platform_name": "Linux"}, "link": {"link": "https://13638-15778896-gh.circle-artifacts.com/0/lmms-1.3.0-alpha.1.120%2Bg49eed33-linux-x86_64.AppImage"}}, "build_link": "https://circleci.com/gh/LMMS/lmms/13638?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link"}], "Windows": [{"artifact": {"title": {"title": "64-bit", "platform_name": "Windows"}, "link": {"link": "https://13637-15778896-gh.circle-artifacts.com/0/lmms-1.3.0-alpha.1.120%2Bg49eed332e-mingw-win64.exe"}}, "build_link": "https://circleci.com/gh/LMMS/lmms/13637?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link"}, {"artifact": {"title": {"title": "32-bit", "platform_name": "Windows"}, "link": {"link": "https://ci.appveyor.com/api/buildjobs/29d85jm07u474gsq/artifacts/build/lmms-1.3.0-alpha-msvc2017-win32.exe"}}, "build_link": "https://ci.appveyor.com/project/Lukas-W/lmms/builds/38849977"}, {"artifact": {"title": {"title": "64-bit", "platform_name": "Windows"}, "link": {"link": "https://ci.appveyor.com/api/buildjobs/wfqelsgs72la7smi/artifacts/build/lmms-1.3.0-alpha-msvc2017-win64.exe"}}, "build_link": "https://ci.appveyor.com/project/Lukas-W/lmms/builds/38849977"}], "macOS": [{"artifact": {"title": {"title": "", "platform_name": "macOS"}, "link": {"link": "https://13639-15778896-gh.circle-artifacts.com/0/lmms-1.3.0-alpha.1.120%2Bg49eed332e-mac10.14.dmg"}}, "build_link": "https://circleci.com/gh/LMMS/lmms/13639?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link"}]}, "commit_sha": "da9e6b1401a974781af6a2e28b0e8db71fbe8aac"}

LmmsBot avatar Sep 05 '20 19:09 LmmsBot

I'll try to rebase this to master and try to get the code finished now.

Thanks. Note, at some point we'll need to merge unfinished and just handle the upgrade issues as "I'm sorry" in support/Discord. Thanks for putting some time to this. I'm sure it's obvious, but I'm no longer actively maintaining my branches and PRs so please do as you need (push, close, clone, etc).

tresf avatar Sep 08 '20 15:09 tresf

@mrkline I submitted the patch for you now.

JohannesLorenz avatar Sep 12 '20 07:09 JohannesLorenz

I propose to find out the knob mappings by testing (as it's too complicated to analyze from the code). This is now handled in a new sub issue #5680 .

JohannesLorenz avatar Sep 12 '20 09:09 JohannesLorenz

I propose to find out the port mappings by testing (as it's too complicated to analyze from the code).

Could we first ask the developer via the Contact information on this page if they happen to know how the ports have changed? (Assuming no one has done this yet). If they do, that would save a lot of effort.

The CAPS Version Query section also seems relevant.

Spekular avatar Sep 12 '20 09:09 Spekular

Could we first ask the developer via the Contact information

OK, I sent and e-mail now. The project seemed pretty dead to me, but let's still try.

JohannesLorenz avatar Sep 12 '20 09:09 JohannesLorenz

The project seemed pretty dead to me, but let's still try.

Which project? Tim Goetze -- the author -- has always replied to my emails in the past. Quoting one from 2017:

Tres wrote: As we prepared our application for the latest CAPS version, we're hitting some upgrade issues from previous versions [...] is "Clip", now "Saturate" ?

Tim wrote: [Yes ...] "clip" mode the Saturate plugin is identical to the old Clip plugin, save for a small change in output volume. [...] you'll probably also have to turn off the DC-blocking filter and set the bias control to zero to achieve identical operation.

He replied in 1 day.

Of course, we don't use his source code directly from tarball but instead use a submodule managed by the moddevices team, but that shouldn't necessarily influence how "dead" the project is perceived.

tresf avatar Sep 16 '20 19:09 tresf

In regards to submitting patches upstream, this is what Tim says:

[I'm] definitely interested [in patches], and unified diff preferred (although so far, such changes have been sparse and small enough for manual management; after all, caps is quite a small project).

His email is tim<at>quitte.de

tresf avatar Sep 16 '20 19:09 tresf

@tresf I was under that impression CAPS was mostly dead because we had submitted CAPS PRs (small ones that were really important) which took around 1 year to get merged.

Anyways, Tim also replied to a mail I wrote to him. He said there's nothing like a mapping, it would be too complicated to find out a good mapping that fits the complex algorithm changes. When I asked how Ardour would have done it, he did not know exactly, but was thinking they don't have such a mapping. Which could mean this PR is more luxury than most users might expect (which does not mean that I dislike the idea of this PR).

JohannesLorenz avatar Sep 16 '20 20:09 JohannesLorenz

this PR is more luxury than most users might expect (which does not mean that I dislike the idea of this PR).

I agree with this statement wholeheartedly but what I think we'll find as a result of merging this is the fact that the CAPS we ship is the CAPS our users use. This means that projects have no upgrade path to the latest LMMS without performing surgery on the LMMS installation. As a CAPS user myself, this means that I'll likely downgrade LMMS to open old projects. This isn't isolated to CAPS (we introduce a lot of breaking changes) but it'll be something we'll be seeing more and more in #support on Discord once the new builds go up.

My vote is to just merge this and watch people complain, tackle as needed however you also have a separate issue you created "Find out CAPS port mappings by testing #5680" to help fix the long list of plugins affected so is it OK if I leave this decision up to you @JohannesLorenz?

tresf avatar Oct 16 '20 17:10 tresf

you also have a separate issue you created "Find out CAPS port mappings by testing #5680" to help fix the long list of plugins affected

I once again asked in #testing in discord, and there is no interest to test anything now.

My vote is to just merge this and watch people complain, tackle as needed

Agreed that we can hope that it works good enough and fix things later if required. If someone complains, at least we can ask them to test the switches.

What should we do now? Should we send this PR into a testing phase (as most PRs do), or just merge now?

JohannesLorenz avatar Oct 20 '20 17:10 JohannesLorenz

What should we do now? Should we send this PR into a testing phase (as most PRs do), or just merge now?

I'm fine with either. You and I tested this quite a bit so we know it works. Most of the code is just upgrade routines anyway. It also appears the master branch of the submodule hasn't changed, so we don't have to fast-forward that either.

tresf avatar Oct 20 '20 18:10 tresf

If someone discovers issues during testing, they will need to analyze what's wrong. Which was why I opened that "Find out CAPS port mappings by testing #5680" issue, which no one wanted to work on. So if we only discover issues that no one wants to fix, I'm for merging this without testing :smiley: If that makes sense.

JohannesLorenz avatar Oct 20 '20 18:10 JohannesLorenz

I'm for merging this without testing 😃 If that makes sense.

Ok. I just realized that @zonkmachine had pointed out the following:

I believe Eq10x2 is to Eq2x2 what Eq10 is to Eq. So...

0.4 0.9
Eq Eq10 ✅ 5bee27c
Eq2x2 Eq10x2

I've updated the table to reflect this (sorry for the delay), and the mapping is probably very similar to the Eq commit, but I'm not sure whether or not this task is worth holding the entire PR up. I could probably tackle it in a few hours, but I'm not sure it's worth the time.

tresf avatar Oct 20 '20 18:10 tresf

Note that the register keyword should be removed in CAPS for C++17 support, as in #6133.

PhysSong avatar Aug 17 '21 01:08 PhysSong

Note that the register keyword should be removed in CAPS for C++17 support, as in #6133.

Thanks for the info. I mailed the CAPS author (Tim Goetze) and asked him to remove it in the next CAPS version.

JohannesLorenz avatar Aug 17 '21 17:08 JohannesLorenz

The current version as of writing this is 0.9.24.

The current version is now 0.9.26 though the latest release if more of a nudge of 0.9.25 Maybe we just provide upgrade routines where we easily can and then simply leave the user with a dummy effect.

zonkmachine avatar Apr 16 '24 13:04 zonkmachine

Since this PR contains lots of fixes, would it make sense to merge untested and fix issues as they come by.

Or we can just fix using the demo projects as reference. If everything loads, merge.

Rossmaxx avatar Apr 16 '24 13:04 Rossmaxx

ToneStackLT

0.4 ToneStackLT is pretty much (se release note from caps 0.9.1 below) the same as 0.4 ToneStack with Model value:0 . Same controls. The values are hard coded here: https://github.com/LMMS/lmms/blob/32fe3e50e7d951a456764dc1692b83f812bb2a87/plugins/LadspaEffect/caps/dsp/ToneStack.h#L214 Same as the first element for ToneStack: https://github.com/LMMS/lmms/blob/32fe3e50e7d951a456764dc1692b83f812bb2a87/plugins/LadspaEffect/caps/ToneStack.cc#L44-L46

ToneStack wasn't removed until after 0.9 was released.

https://github.com/moddevices/caps-lv2/blob/master/CHANGES 0.9.24 * dropped 44.1 kHz ToneStackLT 0.9.1 * ToneStackLT rolled into ToneStack and eliminated

Finally the modpeople have something to add https://pedalboards.moddevices.com/plugins/aHR0cDovL21vZGRldmljZXMuY29tL3BsdWdpbnMvY2Fwcy9Ub25lU3RhY2s=

The "5F6-A LT" model is using the lattice filter implementation mentioned in [yeh06], operating on
precomputed simulation data for 44.1 kHz.

So, apart from the similar data there may also be a different method used for this setting and it seem to have been baked into the 0.9.1 version of ToneStack . Apparently it's hard coded for 44.1 kHz. Edit:I did a quick test with a drum loop and it looks like 0.4 ToneStackLT does really change output depending on export frequency, while ToneStack Model 0 does not.

zonkmachine avatar May 21 '24 19:05 zonkmachine

ToneStackLT upgrades to ToneStack:model 0 in f63ec84d698fad297cfe58c8052d1b13c3e8942c

zonkmachine avatar May 27 '24 12:05 zonkmachine

Thanks so far @zonkmachine . Just for my understanding, why did you force-push the first commit? ("Turn CAPS into submodule (#4027)")

JohannesLorenz avatar May 27 '24 13:05 JohannesLorenz