-
Notifications
You must be signed in to change notification settings - Fork 79
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
Problems while adding a custom GlobalDirtEffect #251
Comments
yes, effects run in parallel by default. To replace the audio and not use the effect bus:
not sure if this is what you need. This will not add the sound from the other effects:
For me it does.
No, I just get an instrument not found error in sclang (because I don't have |
Maybe something like this is what you are going after? @ritchse
and then you control by tidal with
|
Wasn't the original problem solved? I understood that my suggestion helped? |
We were further discussing this on discord today and ritchse suggested to post this alternative also here. The limitation with the current logic in SuperDirt is that Global effects can't silence the dry sound, while standard effect modules truncate the sound at the end of the timespan. So it's not possible to have a total wet and not time span dependent sound process. Further processing SuperDirt output with NodeProxies like showed in the Hacks folder seems to me the more straight forward way to achieve this. |
If you write your own effect, I believe you can: // instead of
Out.ar(outBus, signal)
// you can write
ReplaceOut.ar(outBus, signal)
// and if you don't want to replace it completely all the time
ReplaceOut.ar(outBus, signal + (In.ar(outBus) * \prevLevel.kr(1))) Then you can add Routing through the |
tried a dummy example, but it doesn't seem to work: (
SynthDef.new("test" ++ ~dirt.numChannels,
{|dryBus, effectBus, makeup=1 | // makeup being a multiplier for signal
var sound, in, control, chs;
chs = ~dirt.numChannels;
in = In.ar(dryBus, chs);
sound = in*makeup;
ReplaceOut.ar(effectBus, sound)
}, [\ir, \ir]).add;
)
(
~dirt.orbits.do { |x|
var l = x.globalEffects.size;
x.globalEffects = x.globalEffects.insert(l-2, //adding after leslie, before rms
GlobalDirtEffect(\test,['makeup']));
x.initNodeTree;
};
)
s.freeAll; d1 $ s "bbtbd*4" # pF "makeup" 0
-- above should produce no sound, yet it does |
Ah yes, I see. The example I gave was wrong. What is needed is a change in the monitor, which routes the signals from the effect bus to the output bus. I can't implement/test this now, but this would be the place to start. It currently just adds SynthDef("dirt_monitor" ++ numChannels, { |dryBus, effectBus, outBus, gate = 1, limitertype = 1|
var drySignal = In.ar(dryBus, numChannels);
var wetSignal = In.ar(effectBus, numChannels);
//var signal = XFade2.ar(wetSignal, drySignal, dry * 2 - 1);
var signal = wetSignal + drySignal;
var post = if(SuperDirt.postBadValues) { 2 } { 0 };
signal = Select.ar(CheckBadValues.ar(signal, post: post) > 0, [signal, DC.ar(0)]);
signal = Select.ar(limitertype,
[
signal,
Limiter.ar(signal),
softclip(signal * 0.5) * 2
]
);
DirtPause.ar(signal, graceTime:4);
signal = signal * EnvGen.kr(Env.asr, gate, doneAction:2);
Out.ar(outBus, signal)
}, [\ir, \ir, \kr, \kr, \kr]).add; |
I think using the XFade2 on all Global Effects would introduce problems for other kind of effects (imaging opening a reverb and hearing the dry sound fading out, could be very confusing). |
i agree with your main point, just wanted to point out that some reverbs actually use a single dry to wet knob, where 0% is dry and 100% is only wet. for example the Valhalla DSP reverbs. |
Yes, that would be the way to go: each global effect could do the mixing and the Alternatively, each effect could be followed by its own |
True, but here we are not talking about the knobs of the reverb but rather the routing in the mixer. Generally reverb is applied using a send/return putting the effect on full wet and adjusting the amount of reverb from the send. But I also think that imitating standard approaches is not really the spirit of live coding so defenetly this could be a nice expansion of possibilities. BTW what if you put the compressor in the dirt_monitor itself? It's not a general solution to this but could fit your specific case. |
Here is a page to discuss: https://club.tidalcycles.org/t/the-routing-structure-of-a-dirt-orbit/3902 Probably it is very easy, all that we need is to do it like leslie does. I had forgotten about that one. |
This is a repost from: https://club.tidalcycles.org/t/innard-help-problems-with-globaldirteffects-while-coding-a-compressor/3397
System:
Win8.1, SC 3.12.0, SD 1.7.2, Tidal 1.7.8
I'm trying to make a compressor for SuperDirt, specifically because I want to achieve " https://club.tidalcycles.org/t/sidechain-compression-in-tidal/509?u=ritchse ". I've been running into many problems and my main concern right now is default values.
Setup
I added the global effect to the orbits globalEffects array:
I defined some default values to the arguments of the SynthDef as one usually does:
And set my params in tidal as such:
Results
^ This is a neutral state of compression, nothing is happening, and sound is coming out as expected: the same as with no effects.
^ This should produce no sound, yet it does, at a lower volume than before. I'd say about half the volume; so, is it running on parallel?
^ This should sound the same as in the beginning, but it sounds the same as the previous example.
I figured it must have to do with default values or something so I checked the node tree:
Here I run into my first problem: When erasing a paramater, it doesn't go back into its default value.
I'm guessing SC just ignores the last change of values into
0
since it would generate a division by zero error, hence the same output as before.^ This one is mind-boggling to me. After that mess of division by zero, when I try to go back into the neutral state of compression, now I hear nothing! There's no output.
Here's the whole node tree of the first orbit:
I realized that every global effect except the one I'm trying to add has the argument
resmued
at the end. I tried looking for it in the SuperDirt repo but couldn't really figure out what it is exactly.Final questions
Thank you for reading all this mess ! Love
The text was updated successfully, but these errors were encountered: