dual scsynth instances #630
Comments
|
One suggestion regarding the Faust based effects. Could you not recompile them as Jack clients and then run them outside of SuperCollider. I can't say I'm an expert on anything Faust related, but there are some Might be an alternative route to spreading the CPU load, and it would also allow reverb tails to survive (Also, would it be a good idea to add the Faust source for the 3 effects into the repo?) edit: For a socket controllable LV2 host see: https://github.com/moddevices/mod-host |
|
thanks sam. we are actually looking at those very things right now. in the short term it's not any easier to run mod-host or jalv than it is to run another scsynth, but we will likely support those things in the future. embarassingly, i actually lost the .dsp files for (BTW: for our purposes it might be best to make a minimal architecture file instead of relying on the faust2foo scripts, which tend to be, i dunno... opinionated.) |
|
we're moving forward on our plan to take effects and routing out of SC entirely. currently this is a simple custom jack client with hardcoded effect blocks, but in future maybe we will end up forking PR #650 tracking progress on that. closing this since it is basically covered by issue #296 |
while
supernovais great for polysynths, it actually has poor performance with:(at least, this is what we're seeing with 3.9, 3.10-beta versions on ARM/NEON.)
so alternatively we should try two (or more?) instances of
scsynthconnected through jack.this is pretty straightforward. the big drawback is doubling the process latency by running through a jack connection.
opening this issue mostly to discuss and document requirements and a few gotchas discovered in initial tests. apologies for its length and rambling nature...
details could change, but overall the scheme could go something like this:
in bash / matron:
scsynthprocess for engines (call this instanceengine), say on port 57111scsynthprocess for effects. (call this instancefx), say on port 57112note that these have to be created with extra arguments to increase audio I/O channel count (see below.)
in sclang:
CroneEffectswill need minor refactor to useSoundIninstead ofAudioContextbusses.(NB:
.doWhenBootedis the equivalent of.waitForBootfor remote servers;.initTreeis necessary, or there is no root node and you can't create more nodes. this was non-obvious to me.)somewhere (matron?):
SC_JackDriver::ConnectPorts()isn't being called, or is failing silently.)open questions:
not clear to me how the jack client names are assigned. in this case they always seem to be
SuperColliderandSuperCollider-01.need to dig into jack API to see how to list clients / ports. this seems like a simple project to look at: https://sourceforge.net/projects/njconnect/
there are different options for routing:
enginecan have 4 output channels; 2 connected to DAC, 2 tofx. change engine->FX routing by modulating the send levels here.enginecan just have 2 outputs and always go throughfxserver; change engine->FX routing by modulating mix levels onfxserver.in either case i think it makes sense for
fxserver to grab ADC inputs directly for monitoring and processing, minimizing latency there. sofxserver needs 4 input channels, 2 outputs.option 1 minimizes latency for engine output without fx. but option 2 makes it simpler to monitor levels; it would also prevent comb-filtering artifacts from blending dry and wet engine signal. so, i dunno.
in future,
matroncould run its own audio process as a jack client, and take over routing / metering / recording duties.The text was updated successfully, but these errors were encountered: