wet-only output for delay

master
zetaPRIME 2022-03-16 03:42:13 -04:00
parent 31b13ad3f1
commit f7212a222d
2 changed files with 9 additions and 3 deletions

2
notes
View File

@ -33,7 +33,7 @@ parameters {
TODO {
immediate frontburner {
examine commandreader (nextsub w/ default for ,XX?)
wet-only output for delay (be smart about it)
- wet-only output for delay (be smart about it)
revert action

View File

@ -42,6 +42,7 @@ Delay::Delay() { }
void Delay::init() {
addPort(Port::Input, Port::Audio, 0);
addPort(Port::Output, Port::Audio, 0);
addPort(Port::Output, Port::Audio, 1)->name = "wet only";
}
void Delay::reset() {
@ -69,8 +70,12 @@ void Delay::process() {
auto in = std::static_pointer_cast<AudioPort>(port(Port::Input, Port::Audio, 0));
auto out = std::static_pointer_cast<AudioPort>(port(Port::Output, Port::Audio, 0));
auto wout = std::static_pointer_cast<AudioPort>(port(Port::Output, Port::Audio, 1));
in->pull();
out->pull();
bool oc = out->isConnected();
bool wc = wout->isConnected();
if (oc) out->pull();
if (wc) wout->pull();
size_t ts = audioEngine->curTickSize();
for (size_t f = 0; f < ts; f++) {
@ -80,7 +85,8 @@ void Delay::process() {
int i = frames + buf.firstIndex();
buf[i] += (fCurrent * delayMult) + (fOut * fbMult);
(*out)[f] = fCurrent + fOut;
if (oc) (*out)[f] = fCurrent + fOut;
if (wc) (*wout)[f] = fOut;
}
}