Conversation
| pOutput[i] = pInput[i] * (1.0 - 0.5 * depth) + left * depth * 0.5; | ||
| pOutput[i + 1] = pInput[i + 1] * (1.0 - 0.5 * depth) + right * depth * 0.5; | ||
| pOutput[i] = pInput[i] + left * depth * 0.5; | ||
| pOutput[i + 1] = pInput[i + 1] + right * depth * 0.5; |
There was a problem hiding this comment.
Unlike Reverb, the Phaser can be used as an insert effect. Since it has no delay component, you can turn it into a kind of insert effect by using the dry wet knob only. After this change, this is not possible any-more.
How about issue the "not loud enough" problem by a special scale for depth:
-> left half, new scale: up to 100 % dry + 50 % phaser
-> right half: up to 0% dry + 100 % phaser
There was a problem hiding this comment.
I do not understand the issue nor your proposal here. I have added a new commit turning this into a send effect. I think it works well. Please test this approach.
There was a problem hiding this comment.
I implemented a new way to mix the input and output signals. I think it (somewhat?) matches your proposal. The depth knob acts similar to a dry/wet knob, but because the wet signal is formed by adding two samples, it is divided by 2 before mixing with the dry signal. With the new formula, the input signal is unaffected when the depth knob is all the way down and the volume does not increase when the depth knob is all the way right, but the sound of the effect is clearly audible. However, it is a bit difficult to hear in the middle. I'll play with this more and if it works well I'll try implementing it in #1257 for the Flanger effect too.
| } else { | ||
| // Period is a number of seconds | ||
| // TODO: remove assumption of stereo signal | ||
| period = period * sampleRate * 2; |
There was a problem hiding this comment.
My tracks have a much higher average BPM. Did you consider to pick 120 bpm to have similar scales?
It looks like this decision is a common one among all beat synced effects.
Can we define this somewhere central?
How about pick a reasonable clock in this case, like the other deck bpm or the master clock?
This is probably out of the focus of this PR.
There was a problem hiding this comment.
Picking any BPM would be totally arbitrary and inappropriate for a lot of music. Using the master clock would make sense, but the effects system does not provide that information currently. Only information about the channel being processed is available to the effect.
|
I have tested it. I think the phase works also well as insert effect, if
you wish to fade into some kind of of sytesizer noise. If we merge this at
it is we loose this kind of sound.
My proposal is to have both. From fully left to mid the behaviour you have
implemented here. If you turn to the second half it may turn to a 100 % dry
effect. Lowering the input signal to 0 I'm the master version it is only 50
% right now.
|
I don't understand why you want that. The effect's sound comes from mixing the dry signal with the phase shifted wet signal to create interference. Without the dry signal there is no audible change, unless the dry signal is reintroduced by turning down the chain's dry/wet knob. Changing how the effect interacts with the dry/wet knob half way through the metaknob is counterintuitive and inconsistent with how other effects work, which would be strange in a chain. |
| // the dry and computed sample, so to avoid making the output louder, divide | ||
| // the wet signal by 2. | ||
| pOutput[i] = pInput[i] * (1.0f - depth) | ||
| + (pInput[i] + left) / 2.0f * depth; |
There was a problem hiding this comment.
I think this works quite well except that it is difficult to hear before the depth knob is up half way. I think changing the curve of the parameter to some sort of logarithmic curve could solve that issue, but I don't quite understand the math behind ControlLogPotmeterBehavior or ControlAudioTaperPotBehavior. @daschuer do you have any ideas for how to improve the scaling?
8e61cda to
5c79a9c
Compare
|
I rebased this on master to remove the commits related to the Depth parameter and keep this PR focused on syncing the period to the tempo. Work on the Depth parameter continues in #1326. |
5c79a9c to
b2028a1
Compare
b2028a1 to
b3ea852
Compare
|
I have added a Triplet parameter and adjusted the parameter defaults, ranges, and ordering a bit. I tried adding a Quantize parameter like Echo, but unlike Echo, I don't think there is a use case for an unquantized Phaser period. |
| * sampleRate * kChannels; | ||
| } else { | ||
| // period is a number of seconds | ||
| period = std::max(period, 1/4.0) * sampleRate * kChannels; |
There was a problem hiding this comment.
remove kChannels here, it is applied twice
| period /= 3.0; | ||
| } | ||
| period = period * groupFeatures.beat_length_sec | ||
| * sampleRate * kChannels; |
There was a problem hiding this comment.
remove kChannels here, it is applied twice
| period->setUnitsHint(EffectManifestParameter::UnitsHint::BEATS); | ||
| period->setMinimum(0.0); | ||
| period->setMaximum(4.0); | ||
| period->setDefault(0.5); |
|
Notes addressed. |
|
Thank you! |
Tempo sync all the temporal effects!
Depends on: