-
-
Notifications
You must be signed in to change notification settings - Fork 160
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
Project related news (was: Gathering interested people) #1
Comments
Update: the makefile builds now. |
Being able to use VCV Rack as an LV2 plug-in would put it on my map. I could actually start using it in my work. |
Also: "CVC" = "Control Voltage Craze"? ;) |
highly interested ;) |
CVCRack reads as "CV Crack", for those addicts on CV. Hopefully everyone finds it funny and not problematic 😅 One initial question is knowing which plugin IO variants are useful, because not all hosts are alike and allow placing FX on sequence tracks or synths on the mixer.
At least for FL Studio and Renoise we need a basic synth and fx versions. |
CV Crack Rack takes the cake for me :D I think the variants listed make perfect sense. If there's someeon who'll need an insane thig like 32x32 audio ports then it's probably not a huge deal todo it. I doubt anyone will want it though. |
The VCV Rack code to run as plugin in sync with a host is not public. Even in v2, there is only code available for the GUI version that renders async, not rt-safe (using locks) and uses modules for I/O: https://github.com/VCVRack/Rack/blob/042a9ce026d253700ea14e340182900162ab4653/src/engine/Engine.cpp#L404 A plugin version processing must run in sync (with the host). This is a major task and will require a complete engine rewrite... Which is what Andrew has been busy with over the last years. So you will have to re-implement the engine in a rt-safe way (without locks and globals), notably |
Tech issues aside, have you considered that upstream might not like this, and stop releasing any GPL code in the future? |
Yeah, this has always been the case. But anyway, getting this to build correctly is a good first challenge already 😂 |
That is a good question... But also, it sucks that if for that reason we cannot try to make a plugin version ourselves.. |
PS. check out VeeSeeVSTRack. That has a vst2-process-callback: as well as VST2 and VSTi wrappers. It is not entirely rt-safe, but a lot better than upstream, based on Rack 0.6 though. |
Mixxx would need just a stereo input and stereo output. This would be good motivation to implement LV2 GUI support in Mixxx.
My understanding was that Andrew was going to publish the code of that complete engine rewrite. I see the v2 branch in the VCV Rack repository which has recent commits but no 2.0 version has been released as far as I can tell. It may be wise to wait for Andrew to release 2.0 before doing much work on this. I have not been following VCV Rack closely and have no idea how far that branch is from a release. I recall an old GitHub Issue on the VCV Rack repo several years ago discussing this which @falkTX participated in as well. Unfortunately VCV Rack no longer has a public bug tracker and archive.org did not archive that issue. My understanding from that conversation was that @AndrewBelt planned to do a major rewrite to support running VCV Rack as a plugin with the core code published with a GPL license but the VST part would be proprietary. He said he was not interested enough to work on LV2 support himself and would not accept a pull request for that but we could implement LV2 support in a fork. |
We haven't gotten many requests for an LV2 version of VCV Rack Studio Edition, but I can add it to our feature request list! |
Thanks for chiming in @AndrewBelt. Could you clarify if that LV2 support would be published with the GPL source code? If not, I don't know if it would satisfy anyone who has shown interest here (speaking for myself, I wouldn't use it). As long as the GPL source code doesn't require a major rewrite, I think there's sufficient interest here to maintain a fork for a GPL LV2 plugin version. AFAIK there is only one proprietary DAW that supports LV2 (Reaper) so I don't think the availability of a free GPL LV2 plugin would have much if any of an impact on sales of the proprietary VST (and AU? not sure if you're planning to support that plugin format) version. |
The v2 code is already public, but no release is official yet.
As great as that sounds, my main issue is that such a plugin is not going to be open-source. For one, VCV still only officially supports 1 single architecture on Linux. And not just ARM, RISC-V is slowly rising in popularity. I would love to have this working on HaikuOS too at some point. This is just not possible without it being open-source in the first place.. Perhaps a special license deal could be possible to those who buy a commercial license, so we get access to code for personal use but under very limited conditions or something..? |
We've gotten many feature requests for ARM on Mac/Windows/Linux, so it is definitely on our feature request list. If you have other questions/requests, our most reliable channel is https://vcvrack.com/support. |
@AndrewBelt can you clarify what is the state of the v2 branch and what your plans are for it? I see now that you published a promotional teaser video a few weeks ago but I didn't see any indication how close the v2 branch is to completion. Is there still a lot of work you plan to do before is usable for a plugin? Or is the current state of the v2 branch close to release ready? |
First test: can we get the VCV window embed into the host? Which one is better? I am testing high-dpi on macOS to make sure that is possible to work well too. The background is missing, but that is my fault quickly hacking around the code just to get this to build so I could test the embed approach. So, still ask anyway... embed or external? |
Checking VeeSeeVSTRack it uses https://github.com/bsp2/lglw, which allows to embed its window into the host and follows the same API as glfw. |
For the sake of transparency, I am quoting contents of an email I just received from Andrew:
And my reply:
|
A few more details, seem that passing events from DPF to VCV works well. The SVGs are not loading somehow, dont know why yet. The way VCV manages the "active context" is a bit weird for plugin usage, but should still be doable. Since VeeSeeVSTRack had a working audio plugin engine, I assume this part is doable too. The hard part is going to be dealing with VCV plugins, VeeSeeVSTRack went a bit overboard with its approach even though long-term it is/was the more stable one. Audio plugins should be self-contained, in theory, but in practice VCV already fails due to its heavy use of global state. So perhaps not worth bothering too too much on this side of things...? Oh and yes this needs a new name. I am often bad at those, so suggestions welcome. |
How about "Cardinal"? |
I am quite neutral about this one, what is the reason for it? |
Thinking about "Rack", I associated Monty Python's Spanish Inquisition: "Cardinal, [bring forth] the Rack", |
I dont see why not, thanks. It actually sounds cool but still generic and simple enough. And not all projects start with C, you know DISTRHO itself is already an exception right? 😉 |
Success! Embed view and SVG loading, UI interaction seems to work fine from what I can tell.
My custom Window class didnt have a lot of things that GLFW provides, such as frame duration information.. for now putting some dummy values makes the check pass and SVGs are finally drawn on screen 🎉 |
Multiple instance seems to work, at least for UI stuff. This is showing how great it is to build good infrastructure. The next big item I guess is getting the engine to do something, likely I will need help on this. |
Yes of course, each instance of Cardinal is supposed to be self-contained in its own engine, patch and gui.
This is up to discussion.
That is correct. Though VST3 supports this dynamic parameter stuff, it is not something I am interested on adding to DPF. Hosts dont typically support CV as a form of automation, so we will need some special parameter mapping. Nothing about this is done yet, so for now it is just discussion. |
FYI Just did some changes regarding cable values behaviour. I was not aware before, for not having yet dig deep enough into the code, but every cable introduces 1 sample of latency in Rack because of how the engine works. But wait! Now it is! Now this is great but there is still more to do. For example Carla and Ildaeil (plugin hosts) have their own buffering because running regular audio plugins at 1 frame is just unfeasible. I am thinking of making them have the same exact buffer size as Cardinal in the DAW, so in theory they would run in sync with everything else and also have 0 latency, but need to do some tests to make sure of that. Another issue still remaining is the lack of a "graph" context in Rack. Rack's engine simply goes through all modules one by one in the order they were created. So if we add say A, B, C modules and connect C->B->A the zero-latency cable stuff doesnt help at all. In order to have reduced latency the modules would need to be processed in order of their connections, which is what a "graph" entails. Everytime a new connection is made the graph would be rechecked for the most optimal path of processing. Basically how any modular host/patchbay works. In other news, AudioFile and Ildaeil panels got a little reorganized. Also started playing with expanders. The stuff from Ildaeil was split off to create the midi-to-host modules expander. The background color is wrong though, on Cardinal the white layer is supposed to be for outputs, so I will still change it before release. And speaking of releases, it is just 8 days away now :) |
@falkTX That's all nice, but how do you plan to handle the circular feedback loops? It will need some type of graph clustering to be able to process the A->B->C chains if they have a C->A connection. Ability to extract the non-feedbacking chains and run them with 0 cable latency is good to have, but how to make the patch perform consistently when rack operator makes changes is a problem. Maybe it would help to access the archive of the Rack GitHub issues and also to search the community forum for related discussions, it can fire some light on the question. |
that is unsolvable unless there is specific dedicated APIs for those.
There is no archive anywhere that I could find, if you know of a platform that has a copy please tell. |
I mean, sure, that's absolutely acceptable, but for me it feels that it will be a pretty complex algorithm to find 0-sample-latency segments, cluster them and decide where to use the 1-sample-delay cables.
Sadly, I can't find it either.
Ah, I mean, you can use them read-only. However, after quick search I can't find any discussions about cable delays and graphs which would be productive enough. But it's an interesting topic. |
It is not that complex, there are even several known algorithms for it. Maybe with Rack things are a bit harder because the amount of connections will be bigger, but still doable.
Thanks for looking! And sure, I already do see the topics there from time to time. |
It is release day! The releases page https://github.com/DISTRHO/Cardinal/releases has the usual builds attached, they should be downloadable by anyone, even those without a github account. |
The very first piece of media after the tagged release, |
Thanks, @falkTX ! I hope I got all the facts right! This is a wonderful tool, and something I've been waiting to see before I dive into modular synthesis again! The last time I've done any serious work was with ALSA Modular Synth in 2012 or something... |
I didnt hear anything incorrect. Thanks for the quick video! |
You're welcome! I was hoping maybe I can manage to do this yesterday, but I wouldn't have the demo song to show, and I think it was worth the delay. Are there any debugging tips? Maybe I could collect some logs or coredumps after such crashes to help fix the issues? |
The release binaries are quite useless for debugging, as everything is optimized and stripped for the best performance. But I think the best for helping to fix issues is just to get a nice set of reproducible steps more than anything else. |
To keep you all updated on what is going on. Quite a few modules were added thanks to @dromer, with me just helping along the way. We finally have Befaco 🚀 I noticed a macOS issue where the disabling of "update rate limit" breaks a few hosts. Situation is a little weird/unusual. Current plan is to fix up issues related to the new added modules, then a couple of other ones reported, and also do a windows installer. As much as I think copying some folders around is okay, seems not everyone agrees... :/ There is no specific date set, but target is to do a 22.03 release this month with the newly added stuff and fixes. PS: unfa is doing a livestream using Cardinal very soon, in about 10mins from posting this message! https://www.youtube.com/watch?v=Tpd_vZJwGNQ1 🚀 🚀 🚀 |
On something maybe expected, maybe unexpected, I have been testing leveraging JUCE as a way to get a few more plugin formats working. Basically bridging between DPF and JUCE, giving a few more options to DPF plugins. An obvious target is to quickly get an AU plugin without having to do the full implementation on DPF side, as a few DAWs like ProTools only support AU. I dont have a ProTools license, but do have GarageBand that is in a similar situation only support AUs. Got audio, transport information and UI working. Parameters, MIDI and state save/load not yet. But first was just checking if this was doable anyway. |
Some news! On the Windows side, happy times, we got an installer now! Carla is running! 🚀 And speaking of Windows, most of the issues present on the 32bit build were fixed. Some still remain, but way less than before. This will be an on-going effort, as VCV Rack never supported a 32bit OS so we are on our own for this. These changes and the added modules already make it worth to have a new release. |
Spring is here, and so is a new release. Time to party 🎉 |
I'm a Visual C++ dev not much MSYS2 experience but I have a high dpi Windows DAW workstation and would be willing to help with the current high dpi issues on various windows vst hosts (bitwig, reaper, ardour) with cardinal . Stuck at MSYS2 installed, make reports OpenGL not installed. Have read BUILDING.md but it isn't highly detailed for MSYS2 users. a pacman -S list-of-all-the-things-one-wants |
I dont use msys2, that is why :) That said, https://github.com/lv2/pugl is the underlying layer used by DPF (in turn used by Cardinal). So a first step would be to try to reproduce the issue with it. |
Just tagged 22.04 🎉 Note: I will stop writing updates here. PS: builds still going, binaries will be up soon. |
Leave a comment if you want to help.
This does not do anything yet besides building VCV sources, I need to do some experiments for it first to see what is the best approach.
Seems that we only need to create a variant of https://github.com/VCVRack/Rack/blob/v2/adapters/standalone.cpp for plugins, and then add in some hardcoded module for IO (audio, midi and transport sync)
The text was updated successfully, but these errors were encountered: