@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
|
@@ -1,96 +1,96 @@
|
|
|
1
|
-
---
|
|
2
|
-
{
|
|
3
|
-
"type": "effects.delay.simple",
|
|
4
|
-
"name": "Simple Delay",
|
|
5
|
-
"category": "Effects",
|
|
6
|
-
"subcategory": "Delay",
|
|
7
|
-
"description": "Simple delay line with variable time and mix control",
|
|
8
|
-
"color": "#6060c4",
|
|
9
|
-
"width": 180,
|
|
10
|
-
"inputs": [
|
|
11
|
-
{
|
|
12
|
-
"id": "audio_input",
|
|
13
|
-
"name": "Audio Input",
|
|
14
|
-
"type": "audio",
|
|
15
|
-
"required": true
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"id": "delay_time",
|
|
19
|
-
"name": "Delay Time",
|
|
20
|
-
"type": "control",
|
|
21
|
-
"required": false,
|
|
22
|
-
"parameter": "delayLength"
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"id": "mix_ctrl",
|
|
26
|
-
"name": "Mix",
|
|
27
|
-
"type": "control",
|
|
28
|
-
"required": false,
|
|
29
|
-
"parameter": "mix"
|
|
30
|
-
}
|
|
31
|
-
],
|
|
32
|
-
"outputs": [
|
|
33
|
-
{
|
|
34
|
-
"id": "audio_output",
|
|
35
|
-
"name": "Audio Output",
|
|
36
|
-
"type": "audio"
|
|
37
|
-
}
|
|
38
|
-
],
|
|
39
|
-
"parameters": [
|
|
40
|
-
{
|
|
41
|
-
"id": "delayLength",
|
|
42
|
-
"name": "Delay Length (ms)",
|
|
43
|
-
"type": "number",
|
|
44
|
-
"default": 500,
|
|
45
|
-
"min": 1,
|
|
46
|
-
"max": 1000,
|
|
47
|
-
"conversion": "MS_TO_SAMPLES",
|
|
48
|
-
"description": "The delay time in milliseconds. Determines the maximum possible delay time when controlled via a control signal.",
|
|
49
|
-
"step": 1
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
"id": "mix",
|
|
53
|
-
"name": "Mix",
|
|
54
|
-
"type": "number",
|
|
55
|
-
"default": 0.5,
|
|
56
|
-
"min": 0,
|
|
57
|
-
"max": 1,
|
|
58
|
-
"step": 0.01,
|
|
59
|
-
"description": "Dry/Wet mix balance. 0.0 is pure dry, 1.0 is pure wet."
|
|
60
|
-
}
|
|
61
|
-
],
|
|
62
|
-
"memories": [
|
|
63
|
-
{
|
|
64
|
-
"id": "delayl",
|
|
65
|
-
"size": "delayLength"
|
|
66
|
-
}
|
|
67
|
-
],
|
|
68
|
-
"registers": [
|
|
69
|
-
"dry",
|
|
70
|
-
"wet"
|
|
71
|
-
]
|
|
72
|
-
}
|
|
73
|
-
---
|
|
74
|
-
; Simple Delay with Mix
|
|
75
|
-
; Store dry signal and write to delay
|
|
76
|
-
rdax ${input.audio_input}, 1.0
|
|
77
|
-
wrax ${reg.dry}, 1.0
|
|
78
|
-
wra ${mem.delayl}, 0.0
|
|
79
|
-
|
|
80
|
-
; Calculate Delay Pointer (ADDR_PTR is an absolute address in delay RAM)
|
|
81
|
-
@cv delay_time
|
|
82
|
-
; Control sweeps from [base] to [base + size]
|
|
83
|
-
sof ${delayLength}/${Fs}, (${mem.delayl} + 1)/${Fs}
|
|
84
|
-
wrax ADDR_PTR, 0.0
|
|
85
|
-
|
|
86
|
-
; Read wet signal
|
|
87
|
-
rmpa 1.0
|
|
88
|
-
|
|
89
|
-
; Mixing logic: dry + mix * (wet - dry)
|
|
90
|
-
rdax ${reg.dry}, -0.999 ; ACC now equals (wet - dry)
|
|
91
|
-
wrax ${reg.wet}, 0.0 ; Store wet-dry in reg.wet temporarily
|
|
92
|
-
|
|
93
|
-
@cv mix_ctrl
|
|
94
|
-
mulx ${reg.wet}
|
|
95
|
-
rdax ${reg.dry}, 1.0
|
|
96
|
-
wrax ${output.audio_output}, 0.0
|
|
1
|
+
---
|
|
2
|
+
{
|
|
3
|
+
"type": "effects.delay.simple",
|
|
4
|
+
"name": "Simple Delay",
|
|
5
|
+
"category": "Effects",
|
|
6
|
+
"subcategory": "Delay",
|
|
7
|
+
"description": "Simple delay line with variable time and mix control",
|
|
8
|
+
"color": "#6060c4",
|
|
9
|
+
"width": 180,
|
|
10
|
+
"inputs": [
|
|
11
|
+
{
|
|
12
|
+
"id": "audio_input",
|
|
13
|
+
"name": "Audio Input",
|
|
14
|
+
"type": "audio",
|
|
15
|
+
"required": true
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "delay_time",
|
|
19
|
+
"name": "Delay Time",
|
|
20
|
+
"type": "control",
|
|
21
|
+
"required": false,
|
|
22
|
+
"parameter": "delayLength"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "mix_ctrl",
|
|
26
|
+
"name": "Mix",
|
|
27
|
+
"type": "control",
|
|
28
|
+
"required": false,
|
|
29
|
+
"parameter": "mix"
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"outputs": [
|
|
33
|
+
{
|
|
34
|
+
"id": "audio_output",
|
|
35
|
+
"name": "Audio Output",
|
|
36
|
+
"type": "audio"
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"parameters": [
|
|
40
|
+
{
|
|
41
|
+
"id": "delayLength",
|
|
42
|
+
"name": "Delay Length (ms)",
|
|
43
|
+
"type": "number",
|
|
44
|
+
"default": 500,
|
|
45
|
+
"min": 1,
|
|
46
|
+
"max": 1000,
|
|
47
|
+
"conversion": "MS_TO_SAMPLES",
|
|
48
|
+
"description": "The delay time in milliseconds. Determines the maximum possible delay time when controlled via a control signal.",
|
|
49
|
+
"step": 1
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "mix",
|
|
53
|
+
"name": "Mix",
|
|
54
|
+
"type": "number",
|
|
55
|
+
"default": 0.5,
|
|
56
|
+
"min": 0,
|
|
57
|
+
"max": 1,
|
|
58
|
+
"step": 0.01,
|
|
59
|
+
"description": "Dry/Wet mix balance. 0.0 is pure dry, 1.0 is pure wet."
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"memories": [
|
|
63
|
+
{
|
|
64
|
+
"id": "delayl",
|
|
65
|
+
"size": "delayLength"
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"registers": [
|
|
69
|
+
"dry",
|
|
70
|
+
"wet"
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
---
|
|
74
|
+
; Simple Delay with Mix
|
|
75
|
+
; Store dry signal and write to delay
|
|
76
|
+
rdax ${input.audio_input}, 1.0
|
|
77
|
+
wrax ${reg.dry}, 1.0
|
|
78
|
+
wra ${mem.delayl}, 0.0
|
|
79
|
+
|
|
80
|
+
; Calculate Delay Pointer (ADDR_PTR is an absolute address in delay RAM)
|
|
81
|
+
@cv delay_time
|
|
82
|
+
; Control sweeps from [base] to [base + size]
|
|
83
|
+
sof ${delayLength}/${Fs}, (${mem.delayl} + 1)/${Fs}
|
|
84
|
+
wrax ADDR_PTR, 0.0
|
|
85
|
+
|
|
86
|
+
; Read wet signal
|
|
87
|
+
rmpa 1.0
|
|
88
|
+
|
|
89
|
+
; Mixing logic: dry + mix * (wet - dry)
|
|
90
|
+
rdax ${reg.dry}, -0.999 ; ACC now equals (wet - dry)
|
|
91
|
+
wrax ${reg.wet}, 0.0 ; Store wet-dry in reg.wet temporarily
|
|
92
|
+
|
|
93
|
+
@cv mix_ctrl
|
|
94
|
+
mulx ${reg.wet}
|
|
95
|
+
rdax ${reg.dry}, 1.0
|
|
96
|
+
wrax ${output.audio_output}, 0.0
|
|
@@ -1,176 +1,176 @@
|
|
|
1
|
-
---
|
|
2
|
-
{
|
|
3
|
-
"type": "fx.delay.tripletap",
|
|
4
|
-
"name": "ThreeTap",
|
|
5
|
-
"category": "Effects",
|
|
6
|
-
"subcategory": "Delay",
|
|
7
|
-
"description": "Triple tap delay with independent outputs and CV modulation",
|
|
8
|
-
"color": "#6060c4",
|
|
9
|
-
"width": 200,
|
|
10
|
-
"inputs": [
|
|
11
|
-
{
|
|
12
|
-
"id": "in",
|
|
13
|
-
"name": "Input",
|
|
14
|
-
"type": "audio",
|
|
15
|
-
"required": true
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"id": "feedback",
|
|
19
|
-
"name": "Feedback",
|
|
20
|
-
"type": "audio",
|
|
21
|
-
"required": false
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"id": "delay_time_1",
|
|
25
|
-
"name": "Delay Time 1",
|
|
26
|
-
"type": "control",
|
|
27
|
-
"required": false,
|
|
28
|
-
"parameter": "tap1Time"
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
"id": "delay_time_2",
|
|
32
|
-
"name": "Delay Time 2",
|
|
33
|
-
"type": "control",
|
|
34
|
-
"required": false,
|
|
35
|
-
"parameter": "tap2Time"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"id": "delay_time_3",
|
|
39
|
-
"name": "Delay Time 3",
|
|
40
|
-
"type": "control",
|
|
41
|
-
"required": false,
|
|
42
|
-
"parameter": "tap3Time"
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"id": "fbk_ctrl",
|
|
46
|
-
"name": "Feedback Gain",
|
|
47
|
-
"type": "control",
|
|
48
|
-
"required": false,
|
|
49
|
-
"parameter": "fbkGain"
|
|
50
|
-
}
|
|
51
|
-
],
|
|
52
|
-
"outputs": [
|
|
53
|
-
{
|
|
54
|
-
"id": "tap1",
|
|
55
|
-
"name": "Tap 1 Out",
|
|
56
|
-
"type": "audio"
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"id": "tap2",
|
|
60
|
-
"name": "Tap 2 Out",
|
|
61
|
-
"type": "audio"
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
"id": "tap3",
|
|
65
|
-
"name": "Tap 3 Out",
|
|
66
|
-
"type": "audio"
|
|
67
|
-
}
|
|
68
|
-
],
|
|
69
|
-
"parameters": [
|
|
70
|
-
{
|
|
71
|
-
"id": "inputGain",
|
|
72
|
-
"name": "Input Gain (dB)",
|
|
73
|
-
"type": "number",
|
|
74
|
-
"default": 0,
|
|
75
|
-
"min": -24,
|
|
76
|
-
"max": 0,
|
|
77
|
-
"conversion": "DBLEVEL",
|
|
78
|
-
"step": 0.01
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
"id": "fbkGain",
|
|
82
|
-
"name": "Feedback Gain (dB)",
|
|
83
|
-
"type": "number",
|
|
84
|
-
"default": -6,
|
|
85
|
-
"min": -24,
|
|
86
|
-
"max": 0,
|
|
87
|
-
"conversion": "DBLEVEL",
|
|
88
|
-
"step": 0.01
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
"id": "delayTime",
|
|
92
|
-
"name": "Total Delay (ms)",
|
|
93
|
-
"type": "number",
|
|
94
|
-
"default": 1000,
|
|
95
|
-
"min": 10,
|
|
96
|
-
"max": 1000,
|
|
97
|
-
"conversion": "MS_TO_SAMPLES",
|
|
98
|
-
"description": "The total delay memory allocated in ms.",
|
|
99
|
-
"step": 1
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
"id": "tap1Time",
|
|
103
|
-
"name": "Tap 1 Time",
|
|
104
|
-
"type": "number",
|
|
105
|
-
"default": 0.85,
|
|
106
|
-
"min": 0.0,
|
|
107
|
-
"max": 1.0,
|
|
108
|
-
"step": 0.01
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
"id": "tap2Time",
|
|
112
|
-
"name": "Tap 2 Time",
|
|
113
|
-
"type": "number",
|
|
114
|
-
"default": 0.60,
|
|
115
|
-
"min": 0.0,
|
|
116
|
-
"max": 1.0,
|
|
117
|
-
"step": 0.01
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
"id": "tap3Time",
|
|
121
|
-
"name": "Tap 3 Time",
|
|
122
|
-
"type": "number",
|
|
123
|
-
"default": 0.45,
|
|
124
|
-
"min": 0.0,
|
|
125
|
-
"max": 1.0,
|
|
126
|
-
"step": 0.01
|
|
127
|
-
}
|
|
128
|
-
],
|
|
129
|
-
"memories": [
|
|
130
|
-
{
|
|
131
|
-
"id": "delayl",
|
|
132
|
-
"size": "delayTime"
|
|
133
|
-
}
|
|
134
|
-
],
|
|
135
|
-
"registers": [
|
|
136
|
-
"temp"
|
|
137
|
-
]
|
|
138
|
-
}
|
|
139
|
-
---
|
|
140
|
-
; ThreeTap Delay
|
|
141
|
-
@if pinConnected(feedback)
|
|
142
|
-
rdax ${input.feedback}, 1.0 ; Read at unity — @cv fbk_ctrl applies the gain scaling below
|
|
143
|
-
wrax ${reg.temp}, 0.0
|
|
144
|
-
@cv fbk_ctrl ; ACC = fbkGain_linear * pot (or just fbkGain_linear if unconnected)
|
|
145
|
-
mulx ${reg.temp} ; ACC = feedback * fbkGain [* pot]
|
|
146
|
-
@endif
|
|
147
|
-
rdax ${input.in}, ${inputGain}
|
|
148
|
-
wra ${mem.delayl}, 0.0
|
|
149
|
-
|
|
150
|
-
@if pinConnected(tap1)
|
|
151
|
-
; Tap 1
|
|
152
|
-
@cv delay_time_1
|
|
153
|
-
sof (${delayTime} / ${Fs}), ((${mem.delayl} + 1.0) / ${Fs})
|
|
154
|
-
wrax ADDR_PTR, 0.0
|
|
155
|
-
rmpa 1.0
|
|
156
|
-
wrax ${output.tap1}, 0.0
|
|
157
|
-
@endif
|
|
158
|
-
|
|
159
|
-
@if pinConnected(tap2)
|
|
160
|
-
; Tap 2
|
|
161
|
-
@cv delay_time_2
|
|
162
|
-
sof (${delayTime} / ${Fs}), ((${mem.delayl} + 1.0) / ${Fs})
|
|
163
|
-
wrax ADDR_PTR, 0.0
|
|
164
|
-
rmpa 1.0
|
|
165
|
-
wrax ${output.tap2}, 0.0
|
|
166
|
-
@endif
|
|
167
|
-
|
|
168
|
-
@if pinConnected(tap3)
|
|
169
|
-
; Tap 3
|
|
170
|
-
@cv delay_time_3
|
|
171
|
-
sof (${delayTime} / ${Fs}), ((${mem.delayl} + 1.0) / ${Fs})
|
|
172
|
-
wrax ADDR_PTR, 0.0
|
|
173
|
-
rmpa 1.0
|
|
174
|
-
wrax ${output.tap3}, 0.0
|
|
175
|
-
@endif
|
|
176
|
-
|
|
1
|
+
---
|
|
2
|
+
{
|
|
3
|
+
"type": "fx.delay.tripletap",
|
|
4
|
+
"name": "ThreeTap",
|
|
5
|
+
"category": "Effects",
|
|
6
|
+
"subcategory": "Delay",
|
|
7
|
+
"description": "Triple tap delay with independent outputs and CV modulation",
|
|
8
|
+
"color": "#6060c4",
|
|
9
|
+
"width": 200,
|
|
10
|
+
"inputs": [
|
|
11
|
+
{
|
|
12
|
+
"id": "in",
|
|
13
|
+
"name": "Input",
|
|
14
|
+
"type": "audio",
|
|
15
|
+
"required": true
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "feedback",
|
|
19
|
+
"name": "Feedback",
|
|
20
|
+
"type": "audio",
|
|
21
|
+
"required": false
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "delay_time_1",
|
|
25
|
+
"name": "Delay Time 1",
|
|
26
|
+
"type": "control",
|
|
27
|
+
"required": false,
|
|
28
|
+
"parameter": "tap1Time"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "delay_time_2",
|
|
32
|
+
"name": "Delay Time 2",
|
|
33
|
+
"type": "control",
|
|
34
|
+
"required": false,
|
|
35
|
+
"parameter": "tap2Time"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "delay_time_3",
|
|
39
|
+
"name": "Delay Time 3",
|
|
40
|
+
"type": "control",
|
|
41
|
+
"required": false,
|
|
42
|
+
"parameter": "tap3Time"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "fbk_ctrl",
|
|
46
|
+
"name": "Feedback Gain",
|
|
47
|
+
"type": "control",
|
|
48
|
+
"required": false,
|
|
49
|
+
"parameter": "fbkGain"
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
"outputs": [
|
|
53
|
+
{
|
|
54
|
+
"id": "tap1",
|
|
55
|
+
"name": "Tap 1 Out",
|
|
56
|
+
"type": "audio"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "tap2",
|
|
60
|
+
"name": "Tap 2 Out",
|
|
61
|
+
"type": "audio"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "tap3",
|
|
65
|
+
"name": "Tap 3 Out",
|
|
66
|
+
"type": "audio"
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"parameters": [
|
|
70
|
+
{
|
|
71
|
+
"id": "inputGain",
|
|
72
|
+
"name": "Input Gain (dB)",
|
|
73
|
+
"type": "number",
|
|
74
|
+
"default": 0,
|
|
75
|
+
"min": -24,
|
|
76
|
+
"max": 0,
|
|
77
|
+
"conversion": "DBLEVEL",
|
|
78
|
+
"step": 0.01
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "fbkGain",
|
|
82
|
+
"name": "Feedback Gain (dB)",
|
|
83
|
+
"type": "number",
|
|
84
|
+
"default": -6,
|
|
85
|
+
"min": -24,
|
|
86
|
+
"max": 0,
|
|
87
|
+
"conversion": "DBLEVEL",
|
|
88
|
+
"step": 0.01
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"id": "delayTime",
|
|
92
|
+
"name": "Total Delay (ms)",
|
|
93
|
+
"type": "number",
|
|
94
|
+
"default": 1000,
|
|
95
|
+
"min": 10,
|
|
96
|
+
"max": 1000,
|
|
97
|
+
"conversion": "MS_TO_SAMPLES",
|
|
98
|
+
"description": "The total delay memory allocated in ms.",
|
|
99
|
+
"step": 1
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "tap1Time",
|
|
103
|
+
"name": "Tap 1 Time",
|
|
104
|
+
"type": "number",
|
|
105
|
+
"default": 0.85,
|
|
106
|
+
"min": 0.0,
|
|
107
|
+
"max": 1.0,
|
|
108
|
+
"step": 0.01
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"id": "tap2Time",
|
|
112
|
+
"name": "Tap 2 Time",
|
|
113
|
+
"type": "number",
|
|
114
|
+
"default": 0.60,
|
|
115
|
+
"min": 0.0,
|
|
116
|
+
"max": 1.0,
|
|
117
|
+
"step": 0.01
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"id": "tap3Time",
|
|
121
|
+
"name": "Tap 3 Time",
|
|
122
|
+
"type": "number",
|
|
123
|
+
"default": 0.45,
|
|
124
|
+
"min": 0.0,
|
|
125
|
+
"max": 1.0,
|
|
126
|
+
"step": 0.01
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"memories": [
|
|
130
|
+
{
|
|
131
|
+
"id": "delayl",
|
|
132
|
+
"size": "delayTime"
|
|
133
|
+
}
|
|
134
|
+
],
|
|
135
|
+
"registers": [
|
|
136
|
+
"temp"
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
---
|
|
140
|
+
; ThreeTap Delay
|
|
141
|
+
@if pinConnected(feedback)
|
|
142
|
+
rdax ${input.feedback}, 1.0 ; Read at unity — @cv fbk_ctrl applies the gain scaling below
|
|
143
|
+
wrax ${reg.temp}, 0.0
|
|
144
|
+
@cv fbk_ctrl ; ACC = fbkGain_linear * pot (or just fbkGain_linear if unconnected)
|
|
145
|
+
mulx ${reg.temp} ; ACC = feedback * fbkGain [* pot]
|
|
146
|
+
@endif
|
|
147
|
+
rdax ${input.in}, ${inputGain}
|
|
148
|
+
wra ${mem.delayl}, 0.0
|
|
149
|
+
|
|
150
|
+
@if pinConnected(tap1)
|
|
151
|
+
; Tap 1
|
|
152
|
+
@cv delay_time_1
|
|
153
|
+
sof (${delayTime} / ${Fs}), ((${mem.delayl} + 1.0) / ${Fs})
|
|
154
|
+
wrax ADDR_PTR, 0.0
|
|
155
|
+
rmpa 1.0
|
|
156
|
+
wrax ${output.tap1}, 0.0
|
|
157
|
+
@endif
|
|
158
|
+
|
|
159
|
+
@if pinConnected(tap2)
|
|
160
|
+
; Tap 2
|
|
161
|
+
@cv delay_time_2
|
|
162
|
+
sof (${delayTime} / ${Fs}), ((${mem.delayl} + 1.0) / ${Fs})
|
|
163
|
+
wrax ADDR_PTR, 0.0
|
|
164
|
+
rmpa 1.0
|
|
165
|
+
wrax ${output.tap2}, 0.0
|
|
166
|
+
@endif
|
|
167
|
+
|
|
168
|
+
@if pinConnected(tap3)
|
|
169
|
+
; Tap 3
|
|
170
|
+
@cv delay_time_3
|
|
171
|
+
sof (${delayTime} / ${Fs}), ((${mem.delayl} + 1.0) / ${Fs})
|
|
172
|
+
wrax ADDR_PTR, 0.0
|
|
173
|
+
rmpa 1.0
|
|
174
|
+
wrax ${output.tap3}, 0.0
|
|
175
|
+
@endif
|
|
176
|
+
|