[sosten] add dissipation, remove mix
This commit is contained in:
parent
512541026b
commit
62bc461f60
1 changed files with 15 additions and 11 deletions
|
@ -16,11 +16,11 @@ baseplug::model! {
|
||||||
#[parameter(name = "length")]
|
#[parameter(name = "length")]
|
||||||
length: f32,
|
length: f32,
|
||||||
#[model(min = 0.0, max = 1.0)]
|
#[model(min = 0.0, max = 1.0)]
|
||||||
#[parameter(name = "mix")]
|
|
||||||
mix: f32,
|
|
||||||
#[model(min = 0.0, max = 1.0)]
|
|
||||||
#[parameter(name = "enable")]
|
#[parameter(name = "enable")]
|
||||||
enable: f32,
|
enable: f32,
|
||||||
|
#[model(min = 0.0, max = 1.0)]
|
||||||
|
#[parameter(name = "dissipation")]
|
||||||
|
dissipation: f32,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,8 +28,8 @@ impl Default for SostenModel {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
length: 1000.0,
|
length: 1000.0,
|
||||||
mix: 1.0,
|
|
||||||
enable: 0.0,
|
enable: 0.0,
|
||||||
|
dissipation: 1.0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,17 +96,21 @@ impl Plugin for Sosten {
|
||||||
// Length of section to play
|
// Length of section to play
|
||||||
let len = model.length[i].trunc() as usize;
|
let len = model.length[i].trunc() as usize;
|
||||||
|
|
||||||
// Pass through input
|
|
||||||
let mix_inv = 1. - model.mix[i];
|
|
||||||
output[0][i] = mix_inv * input[0][i];
|
|
||||||
output[1][i] = mix_inv * input[1][i];
|
|
||||||
|
|
||||||
// If len has changed, idx may have not, so we do the min so we don't go out of bounds
|
// If len has changed, idx may have not, so we do the min so we don't go out of bounds
|
||||||
let idx = self.idx.min(len - 1);
|
let idx = self.idx.min(len - 1);
|
||||||
|
|
||||||
// Play from Buffer
|
// Play from Buffer
|
||||||
output[0][i] += model.mix[i] * self.buffer_l[(LEN - len) + idx];
|
output[0][i] = self.buffer_l[(LEN - len) + idx];
|
||||||
output[1][i] += model.mix[i] * self.buffer_r[(LEN - len) + idx];
|
output[1][i] = self.buffer_r[(LEN - len) + idx];
|
||||||
|
|
||||||
|
// dissipates the audio in the buffer, idk
|
||||||
|
// it adds a bit of the next sample to this one, which smooths it out
|
||||||
|
let diss = model.dissipation[i];
|
||||||
|
let a = (LEN - len) + idx;
|
||||||
|
self.buffer_l[a] *= diss;
|
||||||
|
self.buffer_r[a] *= diss;
|
||||||
|
self.buffer_l[a] += (1.0 - diss) * self.buffer_l[(a + 1) % LEN];
|
||||||
|
self.buffer_r[a] += (1.0 - diss) * self.buffer_r[(a + 1) % LEN];
|
||||||
|
|
||||||
// Loop index after we finish playing a section
|
// Loop index after we finish playing a section
|
||||||
self.idx += 1;
|
self.idx += 1;
|
||||||
|
|
Loading…
Reference in a new issue