-
Notifications
You must be signed in to change notification settings - Fork 270
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
Plugin with different number of input and output channels #138
Comments
Unfortunately not, at the moment: Pedalboard assumes that all audio plugins output the same shape of audio (i.e.: the same length of audio and the same number of channels). It tries to "ask" each plugin to reconfigure itself to match the number of channels provided, but not all plugins comply with that request. Out of curiosity, which plugin takes 2 channels and returns 7 channels? I've never seen a configuration like that and it could be useful to test with. |
This kind of configuration is typical of upmixer/downmixer plugins. In this case I'm trying to load an upmixer (developed in-house at my company for a research project) that takes in stereo Left/Right, does a bunch of processing and then outputs Left/Right/Center/SideLeft/SideRight/RearLeft/RearRight. |
Good to know, thanks! It wouldn't be very hard to add support for different input and output channel counts in Pedalboard, now that I think about it; the hardest part might actually be finding plugins to test with. |
That's great to hear, I think it would definitely be a worthwhile addition. If you need something for testing I could create a simple upmixer plugin in JUCE that takes stereo L/R and outputs L=L, R=R and C=(L+R)*0.5. I'll share it when it's ready. |
@psobot I created a basic upmixer VST3 plugin using JUCE - it takes in stereo and outputs left/right/centre. Code can be found here - https://github.com/my1e5/audio-plugins Also under Releases you can find a copy of the |
|
Just lifting this for a use-case that we have at Darkglass We develop VSTs for in-house DSP validation and testing, and we're creating regression tests that use some of our intermediate audio streams for checking success criteria. For these cases we are exposing a lot of channels of output audio (mono in, mono out, and a dozen debug audio channels out). I thought of Pedalboard for automating the collection of this data since I like writing tests in Python. For this purpose I'd like to run Pedalboard with 1 channel in and a dozen out. It might be easier to just write my own standalone executable DSP wrappers, but if you have a hint on where to start with the Pedalboard implementation, I'd be interested on extending those capabilities of the library |
There are a number of things to consider when changing Pedalboard to support this feature. Pedalboard currently passes a single mutable I/O buffer to all plugins in a There are two main paths forward that I can see:
There may be other ways to implement this functionality without major changes to Pedalboard's API or internals, but these are the simplest two approaches I've been able to think through so far. Happy to review code and accept pull requests that implement either of these solutions (or any solution that meets these constraints, really). |
I've recently encountered this with Waves RVerb Mono/Stereo and was wondering if anyone has attempted #1 suggested by @psobot above? I'm thinking if Pedalboard can allow num_input_channels != num_output_channels, then whenever my code detects that case (something I'd have to add to Pedalboard I think) then I could create multiple boards and feed the output from one into the next, possibly squashing or duplicating channels in between. The juce::AudioBuffer only has a single parameter for channel count so I think this isn't just as simple as making the setNumChannels call in ExternalPlugin::detectReloadType survivable. |
Is it possible to use plugins with different numbers of input and output channels? I just tried to load a VST3 plugin and I got this error:
The text was updated successfully, but these errors were encountered: