Skip to content

Commit fd74958

Browse files
committed
add lag as sc similar alternative to slide
+ flip pulse phase
1 parent bed1f2d commit fd74958

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

packages/core/src/audiograph.js

+18-1
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ class PulseOsc extends AudioNode {
449449
update(freq, duty) {
450450
this.phase += this.sampleTime * freq;
451451
let cyclePos = this.phase % 1;
452-
return cyclePos < duty ? -1 : 1;
452+
return cyclePos < duty ? 1 : -1;
453453
}
454454
}
455455

@@ -568,6 +568,22 @@ class TriOsc extends AudioNode {
568568
}
569569
} */
570570

571+
class Lag {
572+
constructor() {
573+
this.lagUnit = 4410; // 60dB per second (maybe?)
574+
// Current state
575+
this.s = 0;
576+
}
577+
578+
update(input, rate) {
579+
// Remap so the useful range is around [0, 1]
580+
rate = rate * this.lagUnit;
581+
if (rate < 1) rate = 1;
582+
this.s += (1 / rate) * (input - this.s);
583+
return this.s;
584+
}
585+
}
586+
571587
/**
572588
* Slide/portamento node
573589
*/
@@ -822,6 +838,7 @@ export let NODE_CLASSES = {
822838
Tri: TriOsc,
823839
// Scope: Scope,
824840
Slide: Slide,
841+
Lag: Lag,
825842
Filter: Filter,
826843
Fold: Fold,
827844
AudioIn: AudioIn,

packages/core/src/graph.js

+7
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ export let saw = makeNode("Saw");
292292
export let sine = makeNode("Sine");
293293
export let tri = makeNode("Tri");
294294
export let slide = makeNode("Slide");
295+
export let lag = makeNode("Lag");
295296
export let filter = makeNode("Filter");
296297
export let fold = makeNode("Fold");
297298
export let seq = makeNode("Seq");
@@ -516,6 +517,12 @@ export const NODE_SCHEMA = {
516517
{ name: "rate", default: 1 },
517518
],
518519
},
520+
Lag: {
521+
ins: [
522+
{ name: "in", default: 0 },
523+
{ name: "rate", default: 1 },
524+
],
525+
},
519526
Tri: {
520527
ins: [{ name: "freq", default: 0 }],
521528
},

0 commit comments

Comments
 (0)