In this ditty, I'm trying to create a monophonic synth with pitch portamento. Unfortunately it does not work as expected.
Log in to post a comment.
ditty.bpm = 60; // I'd like to create a mono synth with portamento (notes gliding from one to the next) // This does not work unfortunately :( // To create a mono synth with portamento, we need to glide between notes, so I'm creating // a "pitch smoother" to do that class Smoother { // We feed values to this object, and it smoothes them out constructor(v, dur) { this.v = v; this.target = v; this.a0 = clamp01(ditty.dt / dur); } setValue(v) { // should be called when we want to start moving toward a new target this.target = v; } update() { // should be called once per sample this.v += this.a0 * (this.target - this.v); return this.v; } } // Simple sawtooth synth const saw = synth.def( (x,e) => (x%1) * e.value); // Simple melody const nns = [c4,d4,e4,b3,e4,a3,a4,e4]; loop( () => { const smoo_note = new Smoother(c4, 0.1); // Use the smoothed values as the note number const s = saw.play(() => smoo_note.update(), {duration:nns.length, amp:0.1}); for(let i=0; i<nns.length; i++) { // We now communicate notes via our smoother object smoo_note.setValue(nns[i]); //smoo_note.setValue(nns[6]); // This glides to the correct note saw.play(nns[i]+0.01, {amp:0.05}); // Play another synth for comparison sleep(1); } // The whole function seems to be evaluated right away, and so the "smoother" actually glides to the // final note right away... });