@audiofab-io/fv1-core 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blocks/ATL_DEVELOPER_REFERENCE.md +156 -156
- package/blocks/control/constant.atl +36 -36
- package/blocks/control/entropy_lfo.atl +74 -74
- package/blocks/control/envelope.atl +120 -120
- package/blocks/control/invert.atl +33 -33
- package/blocks/control/pot.atl +149 -149
- package/blocks/control/power.atl +76 -76
- package/blocks/control/ramp_lfo.atl +122 -122
- package/blocks/control/scale_offset.atl +84 -84
- package/blocks/control/sincos_lfo.atl +126 -126
- package/blocks/control/smoother.atl +48 -48
- package/blocks/control/tremolizer.atl +54 -54
- package/blocks/effects/delay/micro_stutter.atl +77 -77
- package/blocks/effects/delay/mn3011.atl +280 -280
- package/blocks/effects/delay/simple_delay.atl +96 -96
- package/blocks/effects/delay/triple_tap_delay.atl +176 -176
- package/blocks/effects/lo-fi/bit_mangler.atl +74 -74
- package/blocks/effects/lo-fi/chiptune.atl +311 -311
- package/blocks/effects/lo-fi/tape_degrade.atl +181 -181
- package/blocks/effects/modulation/chorus.atl +141 -141
- package/blocks/effects/modulation/chorus_4voice.atl +188 -188
- package/blocks/effects/modulation/flanger.atl +184 -184
- package/blocks/effects/modulation/harmonic_trem.atl +129 -129
- package/blocks/effects/modulation/phaser.atl +299 -299
- package/blocks/effects/pitch/octave_up_down.atl +80 -80
- package/blocks/effects/pitch/pitch_offset.atl +149 -149
- package/blocks/effects/pitch/pitch_offset_dual.atl +197 -197
- package/blocks/effects/pitch/pitch_shift.atl +115 -115
- package/blocks/effects/pitch/sub_octave.atl +100 -100
- package/blocks/effects/reverb/ducking_reverb.atl +145 -145
- package/blocks/effects/reverb/min_reverb.atl +132 -132
- package/blocks/effects/reverb/plate_reverb.atl +344 -344
- package/blocks/effects/reverb/room_reverb.atl +293 -293
- package/blocks/effects/reverb/smear.atl +90 -90
- package/blocks/effects/reverb/spring_reverb.atl +353 -353
- package/blocks/filter/1p_high_pass.atl +62 -62
- package/blocks/filter/1p_low_pass.atl +58 -58
- package/blocks/filter/auto_wah.atl +207 -207
- package/blocks/filter/bbd_loss.atl +79 -79
- package/blocks/filter/shelving_high_pass.atl +76 -76
- package/blocks/filter/shelving_low_pass.atl +76 -76
- package/blocks/filter/svf_2p.atl +116 -116
- package/blocks/gain_mix/crossfade.atl +93 -93
- package/blocks/gain_mix/crossfade2.atl +86 -86
- package/blocks/gain_mix/crossfade3.atl +71 -71
- package/blocks/gain_mix/gainboost.atl +54 -54
- package/blocks/gain_mix/mixer2.atl +76 -76
- package/blocks/gain_mix/mixer3.atl +109 -109
- package/blocks/gain_mix/mixer4.atl +151 -151
- package/blocks/gain_mix/volume.atl +50 -50
- package/blocks/io/adc.atl +53 -53
- package/blocks/io/dac.atl +61 -61
- package/blocks/other/stickynote.atl +24 -24
- package/blocks/other/tone_gen_adjustable.atl +137 -137
- package/blocks/other/tone_gen_fixed.atl +109 -109
- package/dist/blockDiagram/builtinBlocks.js +107 -107
- package/dist/blockDiagram/builtinBlocks.js.map +1 -1
- package/dist/blockDiagram/compiler/BlockTemplate.d.ts.map +1 -1
- package/dist/blockDiagram/compiler/BlockTemplate.js +18 -0
- package/dist/blockDiagram/compiler/BlockTemplate.js.map +1 -1
- package/package.json +2 -2
package/blocks/control/power.atl
CHANGED
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
---
|
|
2
|
-
{
|
|
3
|
-
"type": "control.power",
|
|
4
|
-
"category": "Control",
|
|
5
|
-
"name": "Power",
|
|
6
|
-
"description": "Applies a non-linear curve optionally inverted/flipped",
|
|
7
|
-
"inputs": [
|
|
8
|
-
{
|
|
9
|
-
"id": "in",
|
|
10
|
-
"name": "Input",
|
|
11
|
-
"type": "control"
|
|
12
|
-
}
|
|
13
|
-
],
|
|
14
|
-
"outputs": [
|
|
15
|
-
{
|
|
16
|
-
"id": "out",
|
|
17
|
-
"name": "Output",
|
|
18
|
-
"type": "control"
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
"parameters": [
|
|
22
|
-
{
|
|
23
|
-
"id": "power",
|
|
24
|
-
"name": "Power",
|
|
25
|
-
"type": "number",
|
|
26
|
-
"default": 3,
|
|
27
|
-
"min": 1,
|
|
28
|
-
"max": 5,
|
|
29
|
-
"step": 1
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
"id": "invert",
|
|
33
|
-
"name": "Invert",
|
|
34
|
-
"type": "boolean",
|
|
35
|
-
"default": false
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"id": "flip",
|
|
39
|
-
"name": "Flip",
|
|
40
|
-
"type": "boolean",
|
|
41
|
-
"default": false
|
|
42
|
-
}
|
|
43
|
-
],
|
|
44
|
-
"registers": [
|
|
45
|
-
"value"
|
|
46
|
-
]
|
|
47
|
-
}
|
|
48
|
-
---
|
|
49
|
-
@section header
|
|
50
|
-
@comment "Generated from spincad source file PowerControlCADBlock.java"
|
|
51
|
-
|
|
52
|
-
@section main
|
|
53
|
-
; Applies a non-linear curve (square) optionally inverted/flipped
|
|
54
|
-
rdax ${input.in}, 1.0
|
|
55
|
-
@if ${invert} == true
|
|
56
|
-
; ---Invert
|
|
57
|
-
sof -0.9990234375, 0.9990234375
|
|
58
|
-
@endif
|
|
59
|
-
wrax ${reg.value}, 1.0
|
|
60
|
-
|
|
61
|
-
@if ${power} >= 2
|
|
62
|
-
mulx ${reg.value}
|
|
63
|
-
@endif
|
|
64
|
-
@if ${power} >= 3
|
|
65
|
-
mulx ${reg.value}
|
|
66
|
-
@endif
|
|
67
|
-
@if ${power} >= 4
|
|
68
|
-
mulx ${reg.value}
|
|
69
|
-
@endif
|
|
70
|
-
@if ${power} >= 5
|
|
71
|
-
mulx ${reg.value}
|
|
72
|
-
@endif
|
|
73
|
-
@if ${flip} == true
|
|
74
|
-
; ---Flip
|
|
75
|
-
sof -0.9990234375, 0.9990234375
|
|
76
|
-
@endif
|
|
1
|
+
---
|
|
2
|
+
{
|
|
3
|
+
"type": "control.power",
|
|
4
|
+
"category": "Control",
|
|
5
|
+
"name": "Power",
|
|
6
|
+
"description": "Applies a non-linear curve optionally inverted/flipped",
|
|
7
|
+
"inputs": [
|
|
8
|
+
{
|
|
9
|
+
"id": "in",
|
|
10
|
+
"name": "Input",
|
|
11
|
+
"type": "control"
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"outputs": [
|
|
15
|
+
{
|
|
16
|
+
"id": "out",
|
|
17
|
+
"name": "Output",
|
|
18
|
+
"type": "control"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"parameters": [
|
|
22
|
+
{
|
|
23
|
+
"id": "power",
|
|
24
|
+
"name": "Power",
|
|
25
|
+
"type": "number",
|
|
26
|
+
"default": 3,
|
|
27
|
+
"min": 1,
|
|
28
|
+
"max": 5,
|
|
29
|
+
"step": 1
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "invert",
|
|
33
|
+
"name": "Invert",
|
|
34
|
+
"type": "boolean",
|
|
35
|
+
"default": false
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "flip",
|
|
39
|
+
"name": "Flip",
|
|
40
|
+
"type": "boolean",
|
|
41
|
+
"default": false
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"registers": [
|
|
45
|
+
"value"
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
---
|
|
49
|
+
@section header
|
|
50
|
+
@comment "Generated from spincad source file PowerControlCADBlock.java"
|
|
51
|
+
|
|
52
|
+
@section main
|
|
53
|
+
; Applies a non-linear curve (square) optionally inverted/flipped
|
|
54
|
+
rdax ${input.in}, 1.0
|
|
55
|
+
@if ${invert} == true
|
|
56
|
+
; ---Invert
|
|
57
|
+
sof -0.9990234375, 0.9990234375
|
|
58
|
+
@endif
|
|
59
|
+
wrax ${reg.value}, 1.0
|
|
60
|
+
|
|
61
|
+
@if ${power} >= 2
|
|
62
|
+
mulx ${reg.value}
|
|
63
|
+
@endif
|
|
64
|
+
@if ${power} >= 3
|
|
65
|
+
mulx ${reg.value}
|
|
66
|
+
@endif
|
|
67
|
+
@if ${power} >= 4
|
|
68
|
+
mulx ${reg.value}
|
|
69
|
+
@endif
|
|
70
|
+
@if ${power} >= 5
|
|
71
|
+
mulx ${reg.value}
|
|
72
|
+
@endif
|
|
73
|
+
@if ${flip} == true
|
|
74
|
+
; ---Flip
|
|
75
|
+
sof -0.9990234375, 0.9990234375
|
|
76
|
+
@endif
|
|
77
77
|
wrax ${output.out}, 0
|
|
@@ -1,122 +1,122 @@
|
|
|
1
|
-
---
|
|
2
|
-
{
|
|
3
|
-
"type": "control.ramp_lfo",
|
|
4
|
-
"name": "Ramp LFO",
|
|
5
|
-
"category": "Control",
|
|
6
|
-
"description": "Ramp LFO generator with adjustable rate, amplitude, slope, and dual outputs (Ramp / Triangle).",
|
|
7
|
-
"color": "#f2b824",
|
|
8
|
-
"labelTemplate": "${param.lfoSel == 0 ? 'RMP0' : 'RMP1'}",
|
|
9
|
-
"inputs": [
|
|
10
|
-
{
|
|
11
|
-
"id": "speed",
|
|
12
|
-
"name": "Speed",
|
|
13
|
-
"type": "control"
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
"id": "width",
|
|
17
|
-
"name": "Level (Width)",
|
|
18
|
-
"type": "control"
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
"outputs": [
|
|
22
|
-
{
|
|
23
|
-
"id": "ramp",
|
|
24
|
-
"name": "Ramp Out",
|
|
25
|
-
"type": "control"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"id": "triangle",
|
|
29
|
-
"name": "Triangle Out",
|
|
30
|
-
"type": "control"
|
|
31
|
-
}
|
|
32
|
-
],
|
|
33
|
-
"parameters": [
|
|
34
|
-
{
|
|
35
|
-
"id": "lfoSel",
|
|
36
|
-
"name": "LFO Selection",
|
|
37
|
-
"type": "select",
|
|
38
|
-
"default": 0,
|
|
39
|
-
"options": [
|
|
40
|
-
{ "value": 0, "label": "RMP0" },
|
|
41
|
-
{ "value": 1, "label": "RMP1" }
|
|
42
|
-
],
|
|
43
|
-
"description": "Which LFO oscillator to use (0 or 1)."
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
"id": "speed",
|
|
47
|
-
"name": "Speed",
|
|
48
|
-
"type": "number",
|
|
49
|
-
"default": 6.25,
|
|
50
|
-
"min": -32,
|
|
51
|
-
"max": 64,
|
|
52
|
-
"step": 0.01,
|
|
53
|
-
"description": "Base LFO rate (used if Speed control is not connected)."
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
"id": "amplitude",
|
|
57
|
-
"name": "Base Amplitude",
|
|
58
|
-
"type": "select",
|
|
59
|
-
"default": 4096,
|
|
60
|
-
"options": [
|
|
61
|
-
{ "value": 4096, "label": "Full (4096)" },
|
|
62
|
-
{ "value": 2048, "label": "Half (2048)" },
|
|
63
|
-
{ "value": 1024, "label": "Quarter (1024)" },
|
|
64
|
-
{ "value": 512, "label": "Eighth (512)" }
|
|
65
|
-
],
|
|
66
|
-
"description": "Internal amplitude limit of the WLDR instruction."
|
|
67
|
-
}
|
|
68
|
-
]
|
|
69
|
-
}
|
|
70
|
-
---
|
|
71
|
-
@if ${param.lfoSel} == 0
|
|
72
|
-
@equals lfoNum RMP0
|
|
73
|
-
@equals lfoRateReg RMP0_RATE
|
|
74
|
-
@else
|
|
75
|
-
@equals lfoNum RMP1
|
|
76
|
-
@equals lfoRateReg RMP1_RATE
|
|
77
|
-
@endif
|
|
78
|
-
|
|
79
|
-
; Ramp LFO generator
|
|
80
|
-
@section init
|
|
81
|
-
; WLDR accepts discrete amplitudes: 512, 1024, 2048, 4096.
|
|
82
|
-
; Negative frequencies slope Upwards natively. Positive frequencies slope Downwards.
|
|
83
|
-
wldr ${lfoNum}, ${param.speed} * 512, ${param.amplitude}
|
|
84
|
-
|
|
85
|
-
@section main
|
|
86
|
-
|
|
87
|
-
; Speed modulation (-1.0 to 1.0 covers -32768 to 32767 natively)
|
|
88
|
-
@if pinConnected(speed)
|
|
89
|
-
rdax ${input.speed}, 1.0
|
|
90
|
-
wrax ${lfoRateReg}, 0.0
|
|
91
|
-
@endif
|
|
92
|
-
|
|
93
|
-
; Ramp output
|
|
94
|
-
@if pinConnected(ramp)
|
|
95
|
-
cho rdal, ${lfoNum}
|
|
96
|
-
|
|
97
|
-
; Apply width CV scale if connected
|
|
98
|
-
@if pinConnected(width)
|
|
99
|
-
mulx ${input.width}
|
|
100
|
-
@endif
|
|
101
|
-
|
|
102
|
-
wrax ${output.ramp}, 0.0
|
|
103
|
-
@endif
|
|
104
|
-
|
|
105
|
-
; Triangle output
|
|
106
|
-
@if pinConnected(triangle)
|
|
107
|
-
cho rdal, ${lfoNum}
|
|
108
|
-
|
|
109
|
-
; SpinCAD derivation: scale by 1.999 to stretch 0..1 to 0..2
|
|
110
|
-
; Shift down by exactly half the internal WLDR amplitude ratio
|
|
111
|
-
; Then apply ABSA to fold it back into a Triangle!
|
|
112
|
-
@equals amp_ratio ${param.amplitude} / 4096.0
|
|
113
|
-
sof 1.999, -0.5 * ${amp_ratio}
|
|
114
|
-
absa
|
|
115
|
-
|
|
116
|
-
; Apply width CV scale if connected
|
|
117
|
-
@if pinConnected(width)
|
|
118
|
-
mulx ${input.width}
|
|
119
|
-
@endif
|
|
120
|
-
|
|
121
|
-
wrax ${output.triangle}, 0.0
|
|
122
|
-
@endif
|
|
1
|
+
---
|
|
2
|
+
{
|
|
3
|
+
"type": "control.ramp_lfo",
|
|
4
|
+
"name": "Ramp LFO",
|
|
5
|
+
"category": "Control",
|
|
6
|
+
"description": "Ramp LFO generator with adjustable rate, amplitude, slope, and dual outputs (Ramp / Triangle).",
|
|
7
|
+
"color": "#f2b824",
|
|
8
|
+
"labelTemplate": "${param.lfoSel == 0 ? 'RMP0' : 'RMP1'}",
|
|
9
|
+
"inputs": [
|
|
10
|
+
{
|
|
11
|
+
"id": "speed",
|
|
12
|
+
"name": "Speed",
|
|
13
|
+
"type": "control"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "width",
|
|
17
|
+
"name": "Level (Width)",
|
|
18
|
+
"type": "control"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"outputs": [
|
|
22
|
+
{
|
|
23
|
+
"id": "ramp",
|
|
24
|
+
"name": "Ramp Out",
|
|
25
|
+
"type": "control"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "triangle",
|
|
29
|
+
"name": "Triangle Out",
|
|
30
|
+
"type": "control"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"parameters": [
|
|
34
|
+
{
|
|
35
|
+
"id": "lfoSel",
|
|
36
|
+
"name": "LFO Selection",
|
|
37
|
+
"type": "select",
|
|
38
|
+
"default": 0,
|
|
39
|
+
"options": [
|
|
40
|
+
{ "value": 0, "label": "RMP0" },
|
|
41
|
+
{ "value": 1, "label": "RMP1" }
|
|
42
|
+
],
|
|
43
|
+
"description": "Which LFO oscillator to use (0 or 1)."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "speed",
|
|
47
|
+
"name": "Speed",
|
|
48
|
+
"type": "number",
|
|
49
|
+
"default": 6.25,
|
|
50
|
+
"min": -32,
|
|
51
|
+
"max": 64,
|
|
52
|
+
"step": 0.01,
|
|
53
|
+
"description": "Base LFO rate (used if Speed control is not connected)."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": "amplitude",
|
|
57
|
+
"name": "Base Amplitude",
|
|
58
|
+
"type": "select",
|
|
59
|
+
"default": 4096,
|
|
60
|
+
"options": [
|
|
61
|
+
{ "value": 4096, "label": "Full (4096)" },
|
|
62
|
+
{ "value": 2048, "label": "Half (2048)" },
|
|
63
|
+
{ "value": 1024, "label": "Quarter (1024)" },
|
|
64
|
+
{ "value": 512, "label": "Eighth (512)" }
|
|
65
|
+
],
|
|
66
|
+
"description": "Internal amplitude limit of the WLDR instruction."
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
---
|
|
71
|
+
@if ${param.lfoSel} == 0
|
|
72
|
+
@equals lfoNum RMP0
|
|
73
|
+
@equals lfoRateReg RMP0_RATE
|
|
74
|
+
@else
|
|
75
|
+
@equals lfoNum RMP1
|
|
76
|
+
@equals lfoRateReg RMP1_RATE
|
|
77
|
+
@endif
|
|
78
|
+
|
|
79
|
+
; Ramp LFO generator
|
|
80
|
+
@section init
|
|
81
|
+
; WLDR accepts discrete amplitudes: 512, 1024, 2048, 4096.
|
|
82
|
+
; Negative frequencies slope Upwards natively. Positive frequencies slope Downwards.
|
|
83
|
+
wldr ${lfoNum}, ${param.speed} * 512, ${param.amplitude}
|
|
84
|
+
|
|
85
|
+
@section main
|
|
86
|
+
|
|
87
|
+
; Speed modulation (-1.0 to 1.0 covers -32768 to 32767 natively)
|
|
88
|
+
@if pinConnected(speed)
|
|
89
|
+
rdax ${input.speed}, 1.0
|
|
90
|
+
wrax ${lfoRateReg}, 0.0
|
|
91
|
+
@endif
|
|
92
|
+
|
|
93
|
+
; Ramp output
|
|
94
|
+
@if pinConnected(ramp)
|
|
95
|
+
cho rdal, ${lfoNum}
|
|
96
|
+
|
|
97
|
+
; Apply width CV scale if connected
|
|
98
|
+
@if pinConnected(width)
|
|
99
|
+
mulx ${input.width}
|
|
100
|
+
@endif
|
|
101
|
+
|
|
102
|
+
wrax ${output.ramp}, 0.0
|
|
103
|
+
@endif
|
|
104
|
+
|
|
105
|
+
; Triangle output
|
|
106
|
+
@if pinConnected(triangle)
|
|
107
|
+
cho rdal, ${lfoNum}
|
|
108
|
+
|
|
109
|
+
; SpinCAD derivation: scale by 1.999 to stretch 0..1 to 0..2
|
|
110
|
+
; Shift down by exactly half the internal WLDR amplitude ratio
|
|
111
|
+
; Then apply ABSA to fold it back into a Triangle!
|
|
112
|
+
@equals amp_ratio ${param.amplitude} / 4096.0
|
|
113
|
+
sof 1.999, -0.5 * ${amp_ratio}
|
|
114
|
+
absa
|
|
115
|
+
|
|
116
|
+
; Apply width CV scale if connected
|
|
117
|
+
@if pinConnected(width)
|
|
118
|
+
mulx ${input.width}
|
|
119
|
+
@endif
|
|
120
|
+
|
|
121
|
+
wrax ${output.triangle}, 0.0
|
|
122
|
+
@endif
|
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
---
|
|
2
|
-
{
|
|
3
|
-
"type": "control.scale_offset",
|
|
4
|
-
"name": "Scale/Offset",
|
|
5
|
-
"category": "Control",
|
|
6
|
-
"description": "Scale and offset a control signal to remap input range to output range.",
|
|
7
|
-
"color": "#f2b824",
|
|
8
|
-
"width": 180,
|
|
9
|
-
"inputs": [
|
|
10
|
-
{
|
|
11
|
-
"id": "ctrl_in",
|
|
12
|
-
"name": "Control",
|
|
13
|
-
"type": "control",
|
|
14
|
-
"required": true
|
|
15
|
-
}
|
|
16
|
-
],
|
|
17
|
-
"outputs": [
|
|
18
|
-
{
|
|
19
|
-
"id": "ctrl_out",
|
|
20
|
-
"name": "Control",
|
|
21
|
-
"type": "control"
|
|
22
|
-
}
|
|
23
|
-
],
|
|
24
|
-
"parameters": [
|
|
25
|
-
{
|
|
26
|
-
"id": "inLow",
|
|
27
|
-
"name": "Input Low",
|
|
28
|
-
"type": "number",
|
|
29
|
-
"default": 0,
|
|
30
|
-
"min": 0,
|
|
31
|
-
"max": 1,
|
|
32
|
-
"step": 0.01,
|
|
33
|
-
"description": "Minimum value of input range (0.0-1.0)."
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
"id": "inHigh",
|
|
37
|
-
"name": "Input High",
|
|
38
|
-
"type": "number",
|
|
39
|
-
"default": 1,
|
|
40
|
-
"min": 0,
|
|
41
|
-
"max": 1,
|
|
42
|
-
"step": 0.01,
|
|
43
|
-
"description": "Maximum value of input range (0.0-1.0)."
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
"id": "outLow",
|
|
47
|
-
"name": "Output Low",
|
|
48
|
-
"type": "number",
|
|
49
|
-
"default": 0,
|
|
50
|
-
"min": -2,
|
|
51
|
-
"max": 1,
|
|
52
|
-
"step": 0.01,
|
|
53
|
-
"description": "Minimum value of output range (-2.0 to 1.0)."
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
"id": "outHigh",
|
|
57
|
-
"name": "Output High",
|
|
58
|
-
"type": "number",
|
|
59
|
-
"default": 0.75,
|
|
60
|
-
"min": -2,
|
|
61
|
-
"max": 1,
|
|
62
|
-
"step": 0.01,
|
|
63
|
-
"description": "Maximum value of output range (-2.0 to 1.0)."
|
|
64
|
-
}
|
|
65
|
-
]
|
|
66
|
-
}
|
|
67
|
-
---
|
|
68
|
-
; Scale/Offset
|
|
69
|
-
@section main
|
|
70
|
-
|
|
71
|
-
@if pinConnected(ctrl_in)
|
|
72
|
-
@minusDouble outRange outHigh outLow
|
|
73
|
-
@minusDouble inRange inHigh inLow
|
|
74
|
-
@divideDouble scale outRange inRange
|
|
75
|
-
@multiplyDouble inLowScale inLow scale
|
|
76
|
-
@minusDouble offset outLow inLowScale
|
|
77
|
-
|
|
78
|
-
@assert inRange > 0, "Scale/Offset: Input range is invalid."
|
|
79
|
-
@assert outRange > 0, "Scale/Offset: Output range is invalid."
|
|
80
|
-
|
|
81
|
-
rdax ${input.ctrl_in}, 1.0
|
|
82
|
-
sof ${scale}, ${offset}
|
|
83
|
-
wrax ${output.ctrl_out}, 0.0
|
|
84
|
-
@endif
|
|
1
|
+
---
|
|
2
|
+
{
|
|
3
|
+
"type": "control.scale_offset",
|
|
4
|
+
"name": "Scale/Offset",
|
|
5
|
+
"category": "Control",
|
|
6
|
+
"description": "Scale and offset a control signal to remap input range to output range.",
|
|
7
|
+
"color": "#f2b824",
|
|
8
|
+
"width": 180,
|
|
9
|
+
"inputs": [
|
|
10
|
+
{
|
|
11
|
+
"id": "ctrl_in",
|
|
12
|
+
"name": "Control",
|
|
13
|
+
"type": "control",
|
|
14
|
+
"required": true
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"outputs": [
|
|
18
|
+
{
|
|
19
|
+
"id": "ctrl_out",
|
|
20
|
+
"name": "Control",
|
|
21
|
+
"type": "control"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"parameters": [
|
|
25
|
+
{
|
|
26
|
+
"id": "inLow",
|
|
27
|
+
"name": "Input Low",
|
|
28
|
+
"type": "number",
|
|
29
|
+
"default": 0,
|
|
30
|
+
"min": 0,
|
|
31
|
+
"max": 1,
|
|
32
|
+
"step": 0.01,
|
|
33
|
+
"description": "Minimum value of input range (0.0-1.0)."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "inHigh",
|
|
37
|
+
"name": "Input High",
|
|
38
|
+
"type": "number",
|
|
39
|
+
"default": 1,
|
|
40
|
+
"min": 0,
|
|
41
|
+
"max": 1,
|
|
42
|
+
"step": 0.01,
|
|
43
|
+
"description": "Maximum value of input range (0.0-1.0)."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "outLow",
|
|
47
|
+
"name": "Output Low",
|
|
48
|
+
"type": "number",
|
|
49
|
+
"default": 0,
|
|
50
|
+
"min": -2,
|
|
51
|
+
"max": 1,
|
|
52
|
+
"step": 0.01,
|
|
53
|
+
"description": "Minimum value of output range (-2.0 to 1.0)."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": "outHigh",
|
|
57
|
+
"name": "Output High",
|
|
58
|
+
"type": "number",
|
|
59
|
+
"default": 0.75,
|
|
60
|
+
"min": -2,
|
|
61
|
+
"max": 1,
|
|
62
|
+
"step": 0.01,
|
|
63
|
+
"description": "Maximum value of output range (-2.0 to 1.0)."
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
---
|
|
68
|
+
; Scale/Offset
|
|
69
|
+
@section main
|
|
70
|
+
|
|
71
|
+
@if pinConnected(ctrl_in)
|
|
72
|
+
@minusDouble outRange outHigh outLow
|
|
73
|
+
@minusDouble inRange inHigh inLow
|
|
74
|
+
@divideDouble scale outRange inRange
|
|
75
|
+
@multiplyDouble inLowScale inLow scale
|
|
76
|
+
@minusDouble offset outLow inLowScale
|
|
77
|
+
|
|
78
|
+
@assert inRange > 0, "Scale/Offset: Input range is invalid."
|
|
79
|
+
@assert outRange > 0, "Scale/Offset: Output range is invalid."
|
|
80
|
+
|
|
81
|
+
rdax ${input.ctrl_in}, 1.0
|
|
82
|
+
sof ${scale}, ${offset}
|
|
83
|
+
wrax ${output.ctrl_out}, 0.0
|
|
84
|
+
@endif
|