-
Notifications
You must be signed in to change notification settings - Fork 0
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
Noise oscillator. #24
Comments
Some observations:
This is all the result of some trial and error coding, but I really like it, and it allows for a lot of different noise characters. |
I like the sound a lot. Could you also add Not sure if it makes much difference, but I think |
Cool, thanks!
Not sure how that would work. Did you look at the implementation of sine-noise? I can do that with pulsetrain too, but as soon as index is higher than 0 you'll get a bit of 20Khz in the sound, so no smooth transition between sine and pulse. What are we trying to achieve here, and how should I do it?
Velvet-noise sounds interesting on it's own. I don't have high hopes for a good sound though:
|
I made proof of concept implementation of // Sin-Pulse
import("stdfaust.lib");
sinpulse(fund, index) = out with {
index2freq(i) = ((i - i') * ma.SR) : ba.sAndH(abs(i - i') < 0.5)
: int : max(20) : min(ma.SR * .5);
freq = index2freq(fund) / 2;
i0 = 2 * index : min(1);
cut = freq, ma.SR / 2 : si.interpolate(i0);
it = os.pulsetrain(freq, index : max(0.5)) : fi.lowpass(1, cut);
sn = sin(2 * ma.PI * fund);
out = sn, it : si.interpolate(i0);
};
freq = hslider("freq", 100, 20, 4000, 1e-5) : si.smoo;
index = hslider("index", 0, 0, 1, 1e-5) : si.smoo;
process = sinpulse(os.lf_saw(freq) * 0.5 + 0.5, index) <: _, _; // Sin-Velvet
import("stdfaust.lib");
sinvelvet(fund, index) = out with {
index2freq(i) = ((i - i') * ma.SR) : ba.sAndH(abs(i - i') < 0.5)
: int : max(20) : min(ma.SR * .5);
freq = index2freq(fund);
i0 = 2 * index : min(1);
i1 = 2 * index - 1 : max(0);
cut = 20, freq : si.interpolate(i0 * i0), ma.SR / 2 : si.interpolate(i1 * i1);
out = sin(2 * ma.PI * fund), no.noise
: si.interpolate(i0), no.velvet_noise(1, freq)
: si.interpolate(i1)
: fi.lowpass(1, cut);
};
freq = hslider("freq", 100, 20, 4000, 1e-5) : si.smoo;
index = hslider("index", 0, 0, 1, 1e-5) : si.smoo;
process = sinvelvet(os.lf_saw(freq) * 0.5 + 0.5, index) <: _, _; For
This is true at least to my ear. When applied filter to velvet nosie, the output becomes almost quiet at lower cutoff frequencies.
This is certainly a problem. If I understand correctly, there's no way to sync velvet noise once it becomes out of sync, unless we can supply seed value. I'm personally OK with stereo desync for noise oscillators, but if you think this is not suitable to DigiDrie, feel free to omit it. |
I really like the deterministic output of the synth: If you use the sine-noise osc, the audio also depends on how long the synth is running, since the output of Maybe I should make that optional too: I could make a noise-source that retriggers with every note, and then make a switch to choose between the two noise sources. What do you think?
As explained above: I don't like that. I looked into the implementation of velvet noise, and we could make it deterministic by clocking it to master. |
This is a nice option to have. Also, could |
I was thinking about that as well. |
I replaced the sine oscillator with a sine-noise oscillator.
When index is 0, you hear a sine, just like with all the other oscillators.
When index is between 0 and 0.5, it smoothly morphs into band-pass noise at the freq of the oscillator.
When index is between 0.5 and 1, it crossfades into low-pass noise.
Let me know what you think.
The text was updated successfully, but these errors were encountered: