Forrest Cahoon
2018-06-20 04:22:19 UTC
I'm attempting to play with descending tones, but I'm having artifacts at
the beginning of the sound. I tried to start with a gain of 0 but this does
not prevent the glitch.
I've used various sorts of oscillators; when I use SinOsc there is just a
glitch at the very beginning of the sound, but with SqrOsc and others there
is what sounds sort of like LFO amplitude modulation for maybe even a
second into the sound.
Here is my code. How do I fix this?
SqrOsc r => dac; // also try SinOsc, TriOsc, and SawOsc
300.0 => float STARTING_FREQ;
10000 => int OCTAVE_STEPS;
for (0 => int i; i < OCTAVE_STEPS ; i++) {
// making an envelope by manipulating the gain
if (i < 100) {
i * 0.005 => r.gain;
} else if (i > OCTAVE_STEPS - 100) {
(OCTAVE_STEPS - i) * 0.005 => r.gain;
} else {
0.5 => r.gain;
}
// constantly falling frequency
if (i == 0) {
STARTING_FREQ => r.freq;
} else {
STARTING_FREQ *
Math.pow(2.0, -1.0 * Math.log2((1.0*i)/(1.0*OCTAVE_STEPS))) =>
r.freq;
}
1::ms => now;
}
the beginning of the sound. I tried to start with a gain of 0 but this does
not prevent the glitch.
I've used various sorts of oscillators; when I use SinOsc there is just a
glitch at the very beginning of the sound, but with SqrOsc and others there
is what sounds sort of like LFO amplitude modulation for maybe even a
second into the sound.
Here is my code. How do I fix this?
SqrOsc r => dac; // also try SinOsc, TriOsc, and SawOsc
300.0 => float STARTING_FREQ;
10000 => int OCTAVE_STEPS;
for (0 => int i; i < OCTAVE_STEPS ; i++) {
// making an envelope by manipulating the gain
if (i < 100) {
i * 0.005 => r.gain;
} else if (i > OCTAVE_STEPS - 100) {
(OCTAVE_STEPS - i) * 0.005 => r.gain;
} else {
0.5 => r.gain;
}
// constantly falling frequency
if (i == 0) {
STARTING_FREQ => r.freq;
} else {
STARTING_FREQ *
Math.pow(2.0, -1.0 * Math.log2((1.0*i)/(1.0*OCTAVE_STEPS))) =>
r.freq;
}
1::ms => now;
}