@audiofab-io/fv1-core 0.5.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/dist/spnbank/index.d.ts +49 -7
- package/dist/spnbank/index.d.ts.map +1 -1
- package/dist/spnbank/index.js +99 -15
- package/dist/spnbank/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
---
|
|
2
|
-
{
|
|
3
|
-
"type": "filter.bbd_loss",
|
|
4
|
-
"name": "BBD Bucket Loss",
|
|
5
|
-
"category": "Filter",
|
|
6
|
-
"description": "Dynamic 12dB/oct low-pass filter that mimics the fidelity loss of analog delay lines (BBD). Fix: Steeper cascade for more pronounced effect.",
|
|
7
|
-
"color": "#24f26f",
|
|
8
|
-
"inputs": [
|
|
9
|
-
{
|
|
10
|
-
"id": "input",
|
|
11
|
-
"name": "Audio In",
|
|
12
|
-
"type": "audio"
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"id": "coupling",
|
|
16
|
-
"name": "Time Coupling",
|
|
17
|
-
"type": "control",
|
|
18
|
-
"required": false,
|
|
19
|
-
"parameter": "loss_base"
|
|
20
|
-
}
|
|
21
|
-
],
|
|
22
|
-
"outputs": [
|
|
23
|
-
{
|
|
24
|
-
"id": "out",
|
|
25
|
-
"name": "Audio Out",
|
|
26
|
-
"type": "audio"
|
|
27
|
-
}
|
|
28
|
-
],
|
|
29
|
-
"parameters": [
|
|
30
|
-
{
|
|
31
|
-
"id": "loss_base",
|
|
32
|
-
"name": "Max Loss",
|
|
33
|
-
"type": "number",
|
|
34
|
-
"default": 0.85,
|
|
35
|
-
"min": 0.0,
|
|
36
|
-
"max": 1.0,
|
|
37
|
-
"step": 0.01,
|
|
38
|
-
"description": "How much high-frequency is lost at maximum delay time."
|
|
39
|
-
}
|
|
40
|
-
],
|
|
41
|
-
"registers": [
|
|
42
|
-
"lp1",
|
|
43
|
-
"lp2",
|
|
44
|
-
"k_coeff"
|
|
45
|
-
]
|
|
46
|
-
}
|
|
47
|
-
---
|
|
48
|
-
; BBD Bucket Loss Filter
|
|
49
|
-
; A 2-pole cascaded LPF (12dB/oct) where the coefficient tracks the Coupling input.
|
|
50
|
-
; Fix: Cascaded structure for a much more visible 'analog' roll-off.
|
|
51
|
-
|
|
52
|
-
@section main
|
|
53
|
-
@if pinConnected(input)
|
|
54
|
-
|
|
55
|
-
; 1. Calculate dynamic coefficient k from Coupling input
|
|
56
|
-
@cv coupling
|
|
57
|
-
; ACC has Coupling value (0 to 1).
|
|
58
|
-
; Formula: k = 1.0 - (ACC * loss_base * 0.95)
|
|
59
|
-
; But let's map it aggressively to 0.02 (very dark) to 0.9 (bright)
|
|
60
|
-
sof -0.88, 0.9
|
|
61
|
-
wrax ${reg.k_coeff}, 0.0
|
|
62
|
-
|
|
63
|
-
; 2. First Stage (6dB/oct)
|
|
64
|
-
rdax ${input.input}, 1.0
|
|
65
|
-
rdax ${reg.lp1}, -1.0
|
|
66
|
-
mulx ${reg.k_coeff}
|
|
67
|
-
rdax ${reg.lp1}, 1.0
|
|
68
|
-
wrax ${reg.lp1}, 0.0
|
|
69
|
-
|
|
70
|
-
; 3. Second Stage (Total 12dB/oct)
|
|
71
|
-
rdax ${reg.lp1}, 1.0
|
|
72
|
-
rdax ${reg.lp2}, -1.0
|
|
73
|
-
mulx ${reg.k_coeff}
|
|
74
|
-
rdax ${reg.lp2}, 1.0
|
|
75
|
-
wrax ${reg.lp2}, 1.0
|
|
76
|
-
|
|
77
|
-
; 4. Final Output
|
|
78
|
-
wrax ${output.out}, 0.0
|
|
79
|
-
@endif
|
|
1
|
+
---
|
|
2
|
+
{
|
|
3
|
+
"type": "filter.bbd_loss",
|
|
4
|
+
"name": "BBD Bucket Loss",
|
|
5
|
+
"category": "Filter",
|
|
6
|
+
"description": "Dynamic 12dB/oct low-pass filter that mimics the fidelity loss of analog delay lines (BBD). Fix: Steeper cascade for more pronounced effect.",
|
|
7
|
+
"color": "#24f26f",
|
|
8
|
+
"inputs": [
|
|
9
|
+
{
|
|
10
|
+
"id": "input",
|
|
11
|
+
"name": "Audio In",
|
|
12
|
+
"type": "audio"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "coupling",
|
|
16
|
+
"name": "Time Coupling",
|
|
17
|
+
"type": "control",
|
|
18
|
+
"required": false,
|
|
19
|
+
"parameter": "loss_base"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"outputs": [
|
|
23
|
+
{
|
|
24
|
+
"id": "out",
|
|
25
|
+
"name": "Audio Out",
|
|
26
|
+
"type": "audio"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"parameters": [
|
|
30
|
+
{
|
|
31
|
+
"id": "loss_base",
|
|
32
|
+
"name": "Max Loss",
|
|
33
|
+
"type": "number",
|
|
34
|
+
"default": 0.85,
|
|
35
|
+
"min": 0.0,
|
|
36
|
+
"max": 1.0,
|
|
37
|
+
"step": 0.01,
|
|
38
|
+
"description": "How much high-frequency is lost at maximum delay time."
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"registers": [
|
|
42
|
+
"lp1",
|
|
43
|
+
"lp2",
|
|
44
|
+
"k_coeff"
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
---
|
|
48
|
+
; BBD Bucket Loss Filter
|
|
49
|
+
; A 2-pole cascaded LPF (12dB/oct) where the coefficient tracks the Coupling input.
|
|
50
|
+
; Fix: Cascaded structure for a much more visible 'analog' roll-off.
|
|
51
|
+
|
|
52
|
+
@section main
|
|
53
|
+
@if pinConnected(input)
|
|
54
|
+
|
|
55
|
+
; 1. Calculate dynamic coefficient k from Coupling input
|
|
56
|
+
@cv coupling
|
|
57
|
+
; ACC has Coupling value (0 to 1).
|
|
58
|
+
; Formula: k = 1.0 - (ACC * loss_base * 0.95)
|
|
59
|
+
; But let's map it aggressively to 0.02 (very dark) to 0.9 (bright)
|
|
60
|
+
sof -0.88, 0.9
|
|
61
|
+
wrax ${reg.k_coeff}, 0.0
|
|
62
|
+
|
|
63
|
+
; 2. First Stage (6dB/oct)
|
|
64
|
+
rdax ${input.input}, 1.0
|
|
65
|
+
rdax ${reg.lp1}, -1.0
|
|
66
|
+
mulx ${reg.k_coeff}
|
|
67
|
+
rdax ${reg.lp1}, 1.0
|
|
68
|
+
wrax ${reg.lp1}, 0.0
|
|
69
|
+
|
|
70
|
+
; 3. Second Stage (Total 12dB/oct)
|
|
71
|
+
rdax ${reg.lp1}, 1.0
|
|
72
|
+
rdax ${reg.lp2}, -1.0
|
|
73
|
+
mulx ${reg.k_coeff}
|
|
74
|
+
rdax ${reg.lp2}, 1.0
|
|
75
|
+
wrax ${reg.lp2}, 1.0
|
|
76
|
+
|
|
77
|
+
; 4. Final Output
|
|
78
|
+
wrax ${output.out}, 0.0
|
|
79
|
+
@endif
|
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
---
|
|
2
|
-
{
|
|
3
|
-
"type": "filter.shelving_hpf",
|
|
4
|
-
"name": "Shelving HPF",
|
|
5
|
-
"category": "Filter",
|
|
6
|
-
"description": "High-pass filter with adjustable shelf depth",
|
|
7
|
-
"color": "#24f26f",
|
|
8
|
-
"width": 180,
|
|
9
|
-
"inputs": [
|
|
10
|
-
{
|
|
11
|
-
"id": "in",
|
|
12
|
-
"name": "Input",
|
|
13
|
-
"type": "audio",
|
|
14
|
-
"required": true
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"id": "shelf_ctrl",
|
|
18
|
-
"name": "Shelf",
|
|
19
|
-
"type": "control",
|
|
20
|
-
"required": false
|
|
21
|
-
}
|
|
22
|
-
],
|
|
23
|
-
"outputs": [
|
|
24
|
-
{
|
|
25
|
-
"id": "out",
|
|
26
|
-
"name": "Output",
|
|
27
|
-
"type": "audio"
|
|
28
|
-
}
|
|
29
|
-
],
|
|
30
|
-
"parameters": [
|
|
31
|
-
{
|
|
32
|
-
"id": "frequency",
|
|
33
|
-
"name": "Frequency (Hz)",
|
|
34
|
-
"type": "number",
|
|
35
|
-
"default": 1000,
|
|
36
|
-
"min": 20,
|
|
37
|
-
"max": 10000,
|
|
38
|
-
"conversion": "LOGFREQ",
|
|
39
|
-
"description": "The corner frequency of the shelving filter in Hz.",
|
|
40
|
-
"step": 1
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"id": "shelf",
|
|
44
|
-
"name": "Shelf Depth",
|
|
45
|
-
"type": "number",
|
|
46
|
-
"default": -6,
|
|
47
|
-
"min": -40,
|
|
48
|
-
"max": -3,
|
|
49
|
-
"conversion": "DBLEVEL",
|
|
50
|
-
"step": 0.01
|
|
51
|
-
}
|
|
52
|
-
],
|
|
53
|
-
"registers": [
|
|
54
|
-
"hpf_state",
|
|
55
|
-
"temp"
|
|
56
|
-
]
|
|
57
|
-
}
|
|
58
|
-
---
|
|
59
|
-
; Shelving HPF
|
|
60
|
-
rdax ${input.in}, 1.0
|
|
61
|
-
|
|
62
|
-
@if pinConnected(shelf_ctrl)
|
|
63
|
-
; Shelf modulated by control input
|
|
64
|
-
@comment "Dynamic shelf control"
|
|
65
|
-
wrax ${reg.temp}, -(1.0 - ${shelf})
|
|
66
|
-
rdfx ${reg.hpf_state}, ${frequency}
|
|
67
|
-
wrlx ${reg.hpf_state}, -1.0
|
|
68
|
-
mulx ${input.shelf_ctrl}
|
|
69
|
-
rdax ${reg.temp}, 1.0
|
|
70
|
-
@else
|
|
71
|
-
; Fixed shelf depth
|
|
72
|
-
rdfx ${reg.hpf_state}, ${frequency}
|
|
73
|
-
wrhx ${reg.hpf_state}, -(1.0 - ${shelf})
|
|
74
|
-
@endif
|
|
75
|
-
|
|
76
|
-
wrax ${output.out}, 0.0
|
|
1
|
+
---
|
|
2
|
+
{
|
|
3
|
+
"type": "filter.shelving_hpf",
|
|
4
|
+
"name": "Shelving HPF",
|
|
5
|
+
"category": "Filter",
|
|
6
|
+
"description": "High-pass filter with adjustable shelf depth",
|
|
7
|
+
"color": "#24f26f",
|
|
8
|
+
"width": 180,
|
|
9
|
+
"inputs": [
|
|
10
|
+
{
|
|
11
|
+
"id": "in",
|
|
12
|
+
"name": "Input",
|
|
13
|
+
"type": "audio",
|
|
14
|
+
"required": true
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "shelf_ctrl",
|
|
18
|
+
"name": "Shelf",
|
|
19
|
+
"type": "control",
|
|
20
|
+
"required": false
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"outputs": [
|
|
24
|
+
{
|
|
25
|
+
"id": "out",
|
|
26
|
+
"name": "Output",
|
|
27
|
+
"type": "audio"
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"parameters": [
|
|
31
|
+
{
|
|
32
|
+
"id": "frequency",
|
|
33
|
+
"name": "Frequency (Hz)",
|
|
34
|
+
"type": "number",
|
|
35
|
+
"default": 1000,
|
|
36
|
+
"min": 20,
|
|
37
|
+
"max": 10000,
|
|
38
|
+
"conversion": "LOGFREQ",
|
|
39
|
+
"description": "The corner frequency of the shelving filter in Hz.",
|
|
40
|
+
"step": 1
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "shelf",
|
|
44
|
+
"name": "Shelf Depth",
|
|
45
|
+
"type": "number",
|
|
46
|
+
"default": -6,
|
|
47
|
+
"min": -40,
|
|
48
|
+
"max": -3,
|
|
49
|
+
"conversion": "DBLEVEL",
|
|
50
|
+
"step": 0.01
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"registers": [
|
|
54
|
+
"hpf_state",
|
|
55
|
+
"temp"
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
---
|
|
59
|
+
; Shelving HPF
|
|
60
|
+
rdax ${input.in}, 1.0
|
|
61
|
+
|
|
62
|
+
@if pinConnected(shelf_ctrl)
|
|
63
|
+
; Shelf modulated by control input
|
|
64
|
+
@comment "Dynamic shelf control"
|
|
65
|
+
wrax ${reg.temp}, -(1.0 - ${shelf})
|
|
66
|
+
rdfx ${reg.hpf_state}, ${frequency}
|
|
67
|
+
wrlx ${reg.hpf_state}, -1.0
|
|
68
|
+
mulx ${input.shelf_ctrl}
|
|
69
|
+
rdax ${reg.temp}, 1.0
|
|
70
|
+
@else
|
|
71
|
+
; Fixed shelf depth
|
|
72
|
+
rdfx ${reg.hpf_state}, ${frequency}
|
|
73
|
+
wrhx ${reg.hpf_state}, -(1.0 - ${shelf})
|
|
74
|
+
@endif
|
|
75
|
+
|
|
76
|
+
wrax ${output.out}, 0.0
|
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
---
|
|
2
|
-
{
|
|
3
|
-
"type": "filter.shelving_lpf",
|
|
4
|
-
"name": "Shelving LPF",
|
|
5
|
-
"category": "Filter",
|
|
6
|
-
"description": "Low-pass filter with adjustable shelf depth",
|
|
7
|
-
"color": "#24f26f",
|
|
8
|
-
"width": 180,
|
|
9
|
-
"inputs": [
|
|
10
|
-
{
|
|
11
|
-
"id": "in",
|
|
12
|
-
"name": "Input",
|
|
13
|
-
"type": "audio",
|
|
14
|
-
"required": true
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"id": "shelf_ctrl",
|
|
18
|
-
"name": "Shelf",
|
|
19
|
-
"type": "control",
|
|
20
|
-
"required": false
|
|
21
|
-
}
|
|
22
|
-
],
|
|
23
|
-
"outputs": [
|
|
24
|
-
{
|
|
25
|
-
"id": "out",
|
|
26
|
-
"name": "Output",
|
|
27
|
-
"type": "audio"
|
|
28
|
-
}
|
|
29
|
-
],
|
|
30
|
-
"parameters": [
|
|
31
|
-
{
|
|
32
|
-
"id": "frequency",
|
|
33
|
-
"name": "Frequency (Hz)",
|
|
34
|
-
"type": "number",
|
|
35
|
-
"default": 1000,
|
|
36
|
-
"min": 20,
|
|
37
|
-
"max": 10000,
|
|
38
|
-
"conversion": "LOGFREQ",
|
|
39
|
-
"description": "The corner frequency of the shelving filter in Hz.",
|
|
40
|
-
"step": 1
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"id": "shelf",
|
|
44
|
-
"name": "Shelf Depth",
|
|
45
|
-
"type": "number",
|
|
46
|
-
"default": -6,
|
|
47
|
-
"min": -40,
|
|
48
|
-
"max": -3,
|
|
49
|
-
"conversion": "DBLEVEL",
|
|
50
|
-
"step": 0.01
|
|
51
|
-
}
|
|
52
|
-
],
|
|
53
|
-
"registers": [
|
|
54
|
-
"lpf_state",
|
|
55
|
-
"temp"
|
|
56
|
-
]
|
|
57
|
-
}
|
|
58
|
-
---
|
|
59
|
-
; Shelving LPF
|
|
60
|
-
rdax ${input.in}, 1.0
|
|
61
|
-
|
|
62
|
-
@if pinConnected(shelf_ctrl)
|
|
63
|
-
; Shelf modulated by control input
|
|
64
|
-
@comment "Dynamic shelf control"
|
|
65
|
-
wrax ${reg.temp}, -(1.0 - ${shelf})
|
|
66
|
-
rdfx ${reg.lpf_state}, ${frequency}
|
|
67
|
-
wrhx ${reg.lpf_state}, -1.0
|
|
68
|
-
mulx ${input.shelf_ctrl}
|
|
69
|
-
rdax ${reg.temp}, 1.0
|
|
70
|
-
@else
|
|
71
|
-
; Fixed shelf depth
|
|
72
|
-
rdfx ${reg.lpf_state}, ${frequency}
|
|
73
|
-
wrlx ${reg.lpf_state}, -(1.0 - ${shelf})
|
|
74
|
-
@endif
|
|
75
|
-
|
|
76
|
-
wrax ${output.out}, 0.0
|
|
1
|
+
---
|
|
2
|
+
{
|
|
3
|
+
"type": "filter.shelving_lpf",
|
|
4
|
+
"name": "Shelving LPF",
|
|
5
|
+
"category": "Filter",
|
|
6
|
+
"description": "Low-pass filter with adjustable shelf depth",
|
|
7
|
+
"color": "#24f26f",
|
|
8
|
+
"width": 180,
|
|
9
|
+
"inputs": [
|
|
10
|
+
{
|
|
11
|
+
"id": "in",
|
|
12
|
+
"name": "Input",
|
|
13
|
+
"type": "audio",
|
|
14
|
+
"required": true
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "shelf_ctrl",
|
|
18
|
+
"name": "Shelf",
|
|
19
|
+
"type": "control",
|
|
20
|
+
"required": false
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"outputs": [
|
|
24
|
+
{
|
|
25
|
+
"id": "out",
|
|
26
|
+
"name": "Output",
|
|
27
|
+
"type": "audio"
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"parameters": [
|
|
31
|
+
{
|
|
32
|
+
"id": "frequency",
|
|
33
|
+
"name": "Frequency (Hz)",
|
|
34
|
+
"type": "number",
|
|
35
|
+
"default": 1000,
|
|
36
|
+
"min": 20,
|
|
37
|
+
"max": 10000,
|
|
38
|
+
"conversion": "LOGFREQ",
|
|
39
|
+
"description": "The corner frequency of the shelving filter in Hz.",
|
|
40
|
+
"step": 1
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "shelf",
|
|
44
|
+
"name": "Shelf Depth",
|
|
45
|
+
"type": "number",
|
|
46
|
+
"default": -6,
|
|
47
|
+
"min": -40,
|
|
48
|
+
"max": -3,
|
|
49
|
+
"conversion": "DBLEVEL",
|
|
50
|
+
"step": 0.01
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"registers": [
|
|
54
|
+
"lpf_state",
|
|
55
|
+
"temp"
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
---
|
|
59
|
+
; Shelving LPF
|
|
60
|
+
rdax ${input.in}, 1.0
|
|
61
|
+
|
|
62
|
+
@if pinConnected(shelf_ctrl)
|
|
63
|
+
; Shelf modulated by control input
|
|
64
|
+
@comment "Dynamic shelf control"
|
|
65
|
+
wrax ${reg.temp}, -(1.0 - ${shelf})
|
|
66
|
+
rdfx ${reg.lpf_state}, ${frequency}
|
|
67
|
+
wrhx ${reg.lpf_state}, -1.0
|
|
68
|
+
mulx ${input.shelf_ctrl}
|
|
69
|
+
rdax ${reg.temp}, 1.0
|
|
70
|
+
@else
|
|
71
|
+
; Fixed shelf depth
|
|
72
|
+
rdfx ${reg.lpf_state}, ${frequency}
|
|
73
|
+
wrlx ${reg.lpf_state}, -(1.0 - ${shelf})
|
|
74
|
+
@endif
|
|
75
|
+
|
|
76
|
+
wrax ${output.out}, 0.0
|