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

[FEATURE] VCV Rack port for AnalogTapeModel #60

Closed
Eurikon opened this issue Jul 25, 2020 · 4 comments
Closed

[FEATURE] VCV Rack port for AnalogTapeModel #60

Eurikon opened this issue Jul 25, 2020 · 4 comments
Assignees
Labels
enhancement New feature or request help wanted Extra attention is needed

Comments

@Eurikon
Copy link

Eurikon commented Jul 25, 2020

Hi, i love this plugin!
Thanks for making it.

Would it be feasible for you to port this plugin to the VCV Rack module format, so that it can be used as a native VCV module?

some information from the VCV site:
https://vcvrack.com/manual/PluginDevelopmentTutorial
&
https://vcvrack.com/manual/PluginLicensing

Regards,
Latif

@Eurikon Eurikon added the enhancement New feature or request label Jul 25, 2020
@jatinchowdhury18
Copy link
Owner

Thanks Latif!

So this is something that I've been thinking about for a few days, and I think it would be pretty cool to have this plugin available as a Rack module. At the moment I don't have much experience working with the Rack SDK, or using VCV Rack to make music (which is unfortunate since it seems like a really great tool, I just haven't fully been able to wrap my head around it).

I think for now, I'll leave this on the back-burner while I try to get more familiar with Rack, and the process of creating Rack modules. That said, in case other developers who are more familiar with Rack want to help out with this, I'll leave some notes here, on what I think the process might look like:

1. Hysteresis Engine

I think it might be wise (at least at first) to limit a Rack module to only contain the hysteresis engine of CHOW Tape (maybe other sections could be their own modules...?). So this would mainly consist of the Bias, Saturation, and Drive parameters. To implement this processing, really all you would need to do would be to link to an instance of the HysteresisProcessing class. This class processes single samples rather than blocks of samples, and uses little to no JUCE functionality, so porting that part to VCV shouldn't be too difficult.

2. Plugin GUI

Something that threw me off in my first attempts to use the Rack SDK was that I needed to create a GUI for a new module (I think in Inkscape?) before I could start working on the DSP. I'm not really familiar with Inkscape, and I almost always prefer to prototype my DSP code before setting up any kind of GUI. If anyone wants to help me get started, even just with creating a simple 3-knob GUI for the engine described above, that would be great!

3. Oversampling

The current hysteresis processing in the plugin uses optional oversampling, which I think is very important for reducing aliasing. This would be somewhat difficult to implement by hand in a VCV module, especially considering that the modules use 1-sample buffers. I know that Rack allows you to choose the sample rate for your overall Rack session, but I don't think it allows you to set different sample rates for different modules...

4. Buffers

Using single-sample buffers would also mean that I need to update the parameters of the hysteresis module every sample, which would be computationally expensive. As I understand it, this is just a direct consequence of the way Rack works, and there's not really a way around it.

5. Testing

Whenever I make changes to the CHOW Tape plugin, I try using it in a couple of plugin hosts, on a couple of mixes, to make sure that it's working correctly, and is sounding as expected. Since I'm relatively unfamiliar with making music in VCV Rack, I'm worried that I'll have difficulty testing the module, leading to users have issues on their end when trying to use the module.

Anyway, these are just a few thoughts about what the porting process might look like, and what some challenges might be. I'm still getting familiar with the Rack SDK, so hopefully I'll soon be comfortable enough to take a shot at porting this plugin. In the meantime, if other developers want to contribute to make this happen, I'm more than happy to be a part of a team effort!

Thanks,
Jatin

@jatinchowdhury18 jatinchowdhury18 added the help wanted Extra attention is needed label Jul 26, 2020
@Eurikon
Copy link
Author

Eurikon commented Jul 26, 2020

Hi Jatin, thank you very much for detailed reaction :)

I will share this thread around and hopefully get someone interested in helping out.
The VCV Rack community is very helpful and many great things already have happened due to joint effort!

Cheers,
Latif

@jatinchowdhury18
Copy link
Owner

jatinchowdhury18 commented Jul 26, 2020

Hi Latif,

Actually just took some time to play around with the Rack SDK, and it's progressed considerably since the last time I looked at it (probably 1.5 years ago). Still having some trouble with GUI-related things, and some of the other issues I outlined above, but I was able to get something to build, and from my brief testing with pure sine waves it seems to sound okay. Still plenty of work to be done, but it seems like a promising start!

Since the VCV Rack plugin build process is very different from the JUCE build process I'm using in this repo (and since I may want to add modules in the future that might not be tape-related), I've set up a separate repo for this and future VCV Rack modules. Feel free to check it out (and try the plugin) here.

Thanks for motivating this exploration! I look forward to continue working on this.

@jatinchowdhury18
Copy link
Owner

Closing this for now, for all future questions regarding CHOW Tape for VCV, see ChowDSP-VCV

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants