Skip to content

Signal & Gain

Signal, Param, Gain, Volume, and Channel provide low-level control over audio signal flow and parameter automation.

Param

Param represents an automatable audio parameter. Many properties on instruments, effects, and components return Param.t values.

1// Param is returned by many properties:
2let vol = synth->Synth.volume // Param.t
3
4// Get/set value
5vol->Param.getValue() // float
6vol->Param.setValue(-12.0)
7
8// Automation
9vol->Param.linearRampTo(-6.0, "1m")
10vol->Param.exponentialRampTo(0.0, "2m")
11vol->Param.rampTo(-3.0, "500ms")
12vol->Param.setValueAtTime(-12.0, "0:0:0")
13
14// Advanced scheduling
15vol->Param.linearRampToValueAtTime(0.0, "4m")
16vol->Param.exponentialRampToValueAtTime(-6.0, "2m")
17vol->Param.setTargetAtTime(-12.0, "0", 0.5)
18vol->Param.cancelScheduledValues("0")
19vol->Param.cancelAndHoldAtTime("1m")
20vol->Param.setRampPoint("0")

Signal

A schedulable signal value. Like Param but can be connected to other nodes.

1let sig = Signal.make()
2let sig2 = Signal.makeWithValue(0.5)
3let sig3 = Signal.makeWithOptions({
4 value: 1.0,
5 units: "number",
6})
7
8sig->Signal.getValue() // float
9sig->Signal.setValue(0.75)
10sig->Signal.maxValue // float
11sig->Signal.minValue // float
12
13// Same scheduling as Param
14sig->Signal.linearRampTo(1.0, "1m")
15sig->Signal.rampTo(0.5, "2m")
16
17// Connect to other nodes
18sig->Signal.connect(node->AudioNode.t)
19
20// Cast to Param or AudioNode
21sig->Signal.asParam // Param.t
22sig->Signal.asAudioNode // AudioNode.t

Gain

1let gain = Gain.make()
2let gain2 = Gain.makeWithGain(0.5)
3let gain3 = Gain.makeWithOptions({gain: 0.8})
4
5gain->Gain.gain // Param.t

Volume

1let vol = Volume.make()
2let vol2 = Volume.makeWithVolume(-12.0)
3let vol3 = Volume.makeWithOptions({volume: -6.0, mute: false})
4
5vol->Volume.volume // Param.t
6vol->Volume.mute // bool
7vol->Volume.setMute(true)

Channel

1let ch = Channel.make()
2let ch2 = Channel.makeWithOptions({
3 volume: -6.0,
4 pan: 0.0,
5 mute: false,
6 solo: false,
7})
8
9ch->Channel.volume // Param.t
10ch->Channel.pan // Param.t
11ch->Channel.mute // bool
12ch->Channel.solo // bool
13ch->Channel.send("bus-name", -12.0) // returns Gain.t
14ch->Channel.receive("bus-name")

CrossFade

1let xfade = CrossFade.make()
2
3xfade->CrossFade.fade // Param.t
4xfade->CrossFade.a // Gain.t
5xfade->CrossFade.b // Gain.t
Was this page helpful?