@audiofab-io/fv1-core 0.6.1 → 0.6.2

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.
Files changed (59) hide show
  1. package/blocks/ATL_DEVELOPER_REFERENCE.md +156 -156
  2. package/blocks/control/constant.atl +36 -36
  3. package/blocks/control/entropy_lfo.atl +74 -74
  4. package/blocks/control/envelope.atl +120 -120
  5. package/blocks/control/invert.atl +33 -33
  6. package/blocks/control/pot.atl +149 -149
  7. package/blocks/control/power.atl +76 -76
  8. package/blocks/control/ramp_lfo.atl +122 -122
  9. package/blocks/control/scale_offset.atl +84 -84
  10. package/blocks/control/sincos_lfo.atl +126 -126
  11. package/blocks/control/smoother.atl +48 -48
  12. package/blocks/control/tremolizer.atl +54 -54
  13. package/blocks/effects/delay/micro_stutter.atl +77 -77
  14. package/blocks/effects/delay/mn3011.atl +280 -280
  15. package/blocks/effects/delay/simple_delay.atl +96 -96
  16. package/blocks/effects/delay/triple_tap_delay.atl +176 -176
  17. package/blocks/effects/lo-fi/bit_mangler.atl +74 -74
  18. package/blocks/effects/lo-fi/chiptune.atl +311 -311
  19. package/blocks/effects/lo-fi/tape_degrade.atl +181 -181
  20. package/blocks/effects/modulation/chorus.atl +141 -141
  21. package/blocks/effects/modulation/chorus_4voice.atl +188 -188
  22. package/blocks/effects/modulation/flanger.atl +184 -184
  23. package/blocks/effects/modulation/harmonic_trem.atl +129 -129
  24. package/blocks/effects/modulation/phaser.atl +299 -299
  25. package/blocks/effects/pitch/octave_up_down.atl +80 -80
  26. package/blocks/effects/pitch/pitch_offset.atl +149 -149
  27. package/blocks/effects/pitch/pitch_offset_dual.atl +197 -197
  28. package/blocks/effects/pitch/pitch_shift.atl +115 -115
  29. package/blocks/effects/pitch/sub_octave.atl +100 -100
  30. package/blocks/effects/reverb/ducking_reverb.atl +145 -145
  31. package/blocks/effects/reverb/min_reverb.atl +132 -132
  32. package/blocks/effects/reverb/plate_reverb.atl +344 -344
  33. package/blocks/effects/reverb/room_reverb.atl +293 -293
  34. package/blocks/effects/reverb/smear.atl +90 -90
  35. package/blocks/effects/reverb/spring_reverb.atl +353 -353
  36. package/blocks/filter/1p_high_pass.atl +62 -62
  37. package/blocks/filter/1p_low_pass.atl +58 -58
  38. package/blocks/filter/auto_wah.atl +207 -207
  39. package/blocks/filter/bbd_loss.atl +79 -79
  40. package/blocks/filter/shelving_high_pass.atl +76 -76
  41. package/blocks/filter/shelving_low_pass.atl +76 -76
  42. package/blocks/filter/svf_2p.atl +116 -116
  43. package/blocks/gain_mix/crossfade.atl +93 -93
  44. package/blocks/gain_mix/crossfade2.atl +86 -86
  45. package/blocks/gain_mix/crossfade3.atl +71 -71
  46. package/blocks/gain_mix/gainboost.atl +54 -54
  47. package/blocks/gain_mix/mixer2.atl +76 -76
  48. package/blocks/gain_mix/mixer3.atl +109 -109
  49. package/blocks/gain_mix/mixer4.atl +151 -151
  50. package/blocks/gain_mix/volume.atl +50 -50
  51. package/blocks/io/adc.atl +53 -53
  52. package/blocks/io/dac.atl +61 -61
  53. package/blocks/other/stickynote.atl +24 -24
  54. package/blocks/other/tone_gen_adjustable.atl +137 -137
  55. package/blocks/other/tone_gen_fixed.atl +109 -109
  56. package/dist/blockDiagram/builtinBlocks.js +107 -107
  57. package/dist/blockDiagram/builtinBlocks.js.map +1 -1
  58. package/dist/simulator/FV1Simulator.js +1 -1
  59. package/package.json +1 -1
@@ -1,353 +1,353 @@
1
- ---
2
- {
3
- "type": "effects.springreverb",
4
- "category": "Effects",
5
- "subcategory": "Reverb",
6
- "name": "Spring Reverb",
7
- "description": "Fender-style spring reverb with RS127 filtering",
8
- "color": "#7100FC",
9
- "inputs": [
10
- { "id": "in", "name": "Input", "type": "audio" },
11
- { "id": "toneCV", "name": "Tone", "type": "control", "required": false },
12
- { "id": "reverbTimeCV", "name": "Reverb Time", "type": "control", "required": false }
13
- ],
14
- "outputs": [
15
- { "id": "out", "name": "Output", "type": "audio" }
16
- ],
17
- "parameters": [
18
- {
19
- "id": "tone",
20
- "name": "Tone",
21
- "type": "number",
22
- "default": 0.5,
23
- "min": 0,
24
- "max": 1,
25
- "step": 0.01
26
- },
27
- {
28
- "id": "reverbTime",
29
- "name": "Reverb Time",
30
- "type": "number",
31
- "default": 0.775,
32
- "min": 0.7,
33
- "max": 0.85,
34
- "step": 0.01
35
- },
36
- {
37
- "id": "chirpFilters",
38
- "name": "Chirp Filters",
39
- "type": "number",
40
- "default": 37,
41
- "min": 7,
42
- "max": 41,
43
- "step": 1
44
- }
45
- ],
46
- "memories": [
47
- { "id": "lap1a", "size": 404 },
48
- { "id": "lap1b", "size": 967 },
49
- { "id": "d1", "size": 1445 },
50
- { "id": "lap2a", "size": 608 },
51
- { "id": "lap2b", "size": 893 },
52
- { "id": "d2", "size": 1013 },
53
- { "id": "ap1", "size": 5 },
54
- { "id": "ap2", "size": 5 },
55
- { "id": "ap3", "size": 5 },
56
- { "id": "ap4", "size": 5 },
57
- { "id": "ap5", "size": 5 },
58
- { "id": "ap6", "size": 5 },
59
- { "id": "ap7", "size": 5 },
60
- { "id": "ap8", "size": 6 },
61
- { "id": "ap9", "size": 6 },
62
- { "id": "ap10", "size": 6 },
63
- { "id": "ap11", "size": 6 },
64
- { "id": "ap12", "size": 6 },
65
- { "id": "ap13", "size": 6 },
66
- { "id": "ap14", "size": 6 },
67
- { "id": "ap15", "size": 6 },
68
- { "id": "ap16", "size": 6 },
69
- { "id": "ap17", "size": 6 },
70
- { "id": "ap18", "size": 6 },
71
- { "id": "ap19", "size": 6 },
72
- { "id": "ap20", "size": 6 },
73
- { "id": "ap21", "size": 6 },
74
- { "id": "ap22", "size": 7 },
75
- { "id": "ap23", "size": 7 },
76
- { "id": "ap24", "size": 7 },
77
- { "id": "ap25", "size": 7 },
78
- { "id": "ap26", "size": 7 },
79
- { "id": "ap27", "size": 7 },
80
- { "id": "ap28", "size": 7 },
81
- { "id": "ap29", "size": 7 },
82
- { "id": "ap30", "size": 7 },
83
- { "id": "ap31", "size": 7 },
84
- { "id": "ap32", "size": 7 },
85
- { "id": "ap33", "size": 7 },
86
- { "id": "ap34", "size": 7 },
87
- { "id": "ap35", "size": 7 },
88
- { "id": "ap36", "size": 8 },
89
- { "id": "ap37", "size": 8 },
90
- { "id": "ap38", "size": 8 },
91
- { "id": "ap39", "size": 8 },
92
- { "id": "ap40", "size": 8 },
93
- { "id": "ap41", "size": 8 }
94
- ],
95
- "registers": [
96
- "mono", "lp1", "lp2", "KRT", "revin", "kfil", "lpf1", "hpf1", "spring", "temp"
97
- ]
98
- }
99
- ---
100
- @section init
101
- ; Spring Reverb
102
- skp RUN, springreverb_init_end
103
- wlds SIN0, 15, 40 ; LFO for reverb smoothing
104
- springreverb_init_end:
105
-
106
- @section main
107
- ; Spring Reverb
108
-
109
- ; Calculate tone coefficient (kfil) from CV input or parameter
110
- @if pinConnected(toneCV)
111
- rdax ${input.toneCV}, 1.0 ; Read tone from CV input
112
- sof 0.4, 0.1 ; Map [0,1] to [0.1,0.5]
113
- @else
114
- sof 0.0, ${tone} ; Read tone from parameter
115
- @endif
116
- wrax ${reg.kfil}, 0.0 ; Write tone coefficient
117
-
118
- ; Calculate reverb time (KRT) from CV input or parameter
119
- @if pinConnected(reverbTimeCV)
120
- rdax ${input.reverbTimeCV}, 1.0 ; Read reverb time from CV input
121
- sof 0.15, 0.7 ; Map [0,1] to [0.7,0.85]
122
- @else
123
- sof 0.0, ${reverbTime} ; Read reverb time from parameter
124
- @endif
125
- wrax ${reg.KRT}, 0.0 ; Write reverb time
126
-
127
- ; Sum inputs to mono
128
- @if pinConnected(in)
129
- rdax ${input.in}, 1.0
130
- @else
131
- sof 0.0, 0.0
132
- @endif
133
- wrax ${reg.mono}, 1.0 ; Save and keep in ACC
134
-
135
- ; Abbey Road EMI RS127 pre-reverb filter
136
- rdfx ${reg.lpf1}, 0.853 ; 10kHz LPF
137
- wrlx ${reg.lpf1}, -0.5 ; Shelving LPF
138
- rdfx ${reg.hpf1}, 0.109 ; 600Hz HPF
139
- wrhx ${reg.hpf1}, -0.5 ; Shelving HPF
140
- wrax ${reg.revin}, 1.0 ; Save filtered signal
141
-
142
- ; Reverb loop 1
143
- rda ${mem.d1}#, 1.0 ; Get 1st delay output
144
- mulx ${reg.KRT} ; Apply reverb time
145
- rdfx ${reg.lp1}, 0.55 ; Shelving lowpass
146
- wrlx ${reg.lp1}, -1.0
147
- rda ${mem.lap1a}#, 0.6 ; Reverb allpass 1a
148
- wrap ${mem.lap1a}, -0.6
149
- rda ${mem.lap1b}#, 0.6 ; Reverb allpass 1b
150
- wrap ${mem.lap1b}, -0.6
151
- rdax ${reg.revin}, 1.0 ; Add filtered input
152
- wra ${mem.d2}, 0.0 ; Put in 2nd spring delay
153
-
154
- ; Reverb loop 2
155
- rda ${mem.d2}#, 1.0 ; Get 2nd delay output
156
- mulx ${reg.KRT} ; Apply reverb time
157
- rdfx ${reg.lp2}, 0.55 ; Shelving lowpass
158
- wrlx ${reg.lp2}, -1.0
159
- rda ${mem.lap2a}#, 0.6 ; Reverb allpass 2a
160
- wrap ${mem.lap2a}, -0.6
161
- rda ${mem.lap2b}#, 0.6 ; Reverb allpass 2b
162
- wrap ${mem.lap2b}, -0.6
163
- rdax ${reg.revin}, 1.0 ; Add filtered input
164
- wra ${mem.d1}, 0.0 ; Put in 1st spring delay
165
-
166
- ; Chirp filter (spring dispersion)
167
- rdax ${reg.lp1}, 1.0
168
- rdax ${reg.lp2}, 1.0
169
-
170
- ; Generated chirp allpass filters
171
- @if ${chirpFilters} > 0
172
- rda ${mem.ap1}^, -0.6
173
- wrap ${mem.ap1}, 0.6
174
- @endif
175
- @if ${chirpFilters} > 1
176
- rda ${mem.ap2}^, -0.6
177
- wrap ${mem.ap2}, 0.6
178
- @endif
179
- @if ${chirpFilters} > 2
180
- rda ${mem.ap3}^, -0.6
181
- wrap ${mem.ap3}, 0.6
182
- @endif
183
- @if ${chirpFilters} > 3
184
- rda ${mem.ap4}^, -0.6
185
- wrap ${mem.ap4}, 0.6
186
- @endif
187
- @if ${chirpFilters} > 4
188
- rda ${mem.ap5}^, -0.6
189
- wrap ${mem.ap5}, 0.6
190
- @endif
191
- @if ${chirpFilters} > 5
192
- rda ${mem.ap6}^, -0.6
193
- wrap ${mem.ap6}, 0.6
194
- @endif
195
- @if ${chirpFilters} > 6
196
- rda ${mem.ap7}^, -0.6
197
- wrap ${mem.ap7}, 0.6
198
- @endif
199
- @if ${chirpFilters} > 7
200
- rda ${mem.ap8}^, -0.6
201
- wrap ${mem.ap8}, 0.6
202
- @endif
203
- @if ${chirpFilters} > 8
204
- rda ${mem.ap9}^, -0.6
205
- wrap ${mem.ap9}, 0.6
206
- @endif
207
- @if ${chirpFilters} > 9
208
- rda ${mem.ap10}^, -0.6
209
- wrap ${mem.ap10}, 0.6
210
- @endif
211
- @if ${chirpFilters} > 10
212
- rda ${mem.ap11}^, -0.6
213
- wrap ${mem.ap11}, 0.6
214
- @endif
215
- @if ${chirpFilters} > 11
216
- rda ${mem.ap12}^, -0.6
217
- wrap ${mem.ap12}, 0.6
218
- @endif
219
- @if ${chirpFilters} > 12
220
- rda ${mem.ap13}^, -0.6
221
- wrap ${mem.ap13}, 0.6
222
- @endif
223
- @if ${chirpFilters} > 13
224
- rda ${mem.ap14}^, -0.6
225
- wrap ${mem.ap14}, 0.6
226
- @endif
227
- @if ${chirpFilters} > 14
228
- rda ${mem.ap15}^, -0.6
229
- wrap ${mem.ap15}, 0.6
230
- @endif
231
- @if ${chirpFilters} > 15
232
- rda ${mem.ap16}^, -0.6
233
- wrap ${mem.ap16}, 0.6
234
- @endif
235
- @if ${chirpFilters} > 16
236
- rda ${mem.ap17}^, -0.6
237
- wrap ${mem.ap17}, 0.6
238
- @endif
239
- @if ${chirpFilters} > 17
240
- rda ${mem.ap18}^, -0.6
241
- wrap ${mem.ap18}, 0.6
242
- @endif
243
- @if ${chirpFilters} > 18
244
- rda ${mem.ap19}^, -0.6
245
- wrap ${mem.ap19}, 0.6
246
- @endif
247
- @if ${chirpFilters} > 19
248
- rda ${mem.ap20}^, -0.6
249
- wrap ${mem.ap20}, 0.6
250
- @endif
251
- @if ${chirpFilters} > 20
252
- rda ${mem.ap21}^, -0.6
253
- wrap ${mem.ap21}, 0.6
254
- @endif
255
- @if ${chirpFilters} > 21
256
- rda ${mem.ap22}^, -0.6
257
- wrap ${mem.ap22}, 0.6
258
- @endif
259
- @if ${chirpFilters} > 22
260
- rda ${mem.ap23}^, -0.6
261
- wrap ${mem.ap23}, 0.6
262
- @endif
263
- @if ${chirpFilters} > 23
264
- rda ${mem.ap24}^, -0.6
265
- wrap ${mem.ap24}, 0.6
266
- @endif
267
- @if ${chirpFilters} > 24
268
- rda ${mem.ap25}^, -0.6
269
- wrap ${mem.ap25}, 0.6
270
- @endif
271
- @if ${chirpFilters} > 25
272
- rda ${mem.ap26}^, -0.6
273
- wrap ${mem.ap26}, 0.6
274
- @endif
275
- @if ${chirpFilters} > 26
276
- rda ${mem.ap27}^, -0.6
277
- wrap ${mem.ap27}, 0.6
278
- @endif
279
- @if ${chirpFilters} > 27
280
- rda ${mem.ap28}^, -0.6
281
- wrap ${mem.ap28}, 0.6
282
- @endif
283
- @if ${chirpFilters} > 28
284
- rda ${mem.ap29}^, -0.6
285
- wrap ${mem.ap29}, 0.6
286
- @endif
287
- @if ${chirpFilters} > 29
288
- rda ${mem.ap30}^, -0.6
289
- wrap ${mem.ap30}, 0.6
290
- @endif
291
- @if ${chirpFilters} > 30
292
- rda ${mem.ap31}^, -0.6
293
- wrap ${mem.ap31}, 0.6
294
- @endif
295
- @if ${chirpFilters} > 31
296
- rda ${mem.ap32}^, -0.6
297
- wrap ${mem.ap32}, 0.6
298
- @endif
299
- @if ${chirpFilters} > 32
300
- rda ${mem.ap33}^, -0.6
301
- wrap ${mem.ap33}, 0.6
302
- @endif
303
- @if ${chirpFilters} > 33
304
- rda ${mem.ap34}^, -0.6
305
- wrap ${mem.ap34}, 0.6
306
- @endif
307
- @if ${chirpFilters} > 34
308
- rda ${mem.ap35}^, -0.6
309
- wrap ${mem.ap35}, 0.6
310
- @endif
311
- @if ${chirpFilters} > 35
312
- rda ${mem.ap36}^, -0.6
313
- wrap ${mem.ap36}, 0.6
314
- @endif
315
- @if ${chirpFilters} > 36
316
- rda ${mem.ap37}^, -0.6
317
- wrap ${mem.ap37}, 0.6
318
- @endif
319
- @if ${chirpFilters} > 37
320
- rda ${mem.ap38}^, -0.6
321
- wrap ${mem.ap38}, 0.6
322
- @endif
323
- @if ${chirpFilters} > 38
324
- rda ${mem.ap39}^, -0.6
325
- wrap ${mem.ap39}, 0.6
326
- @endif
327
- @if ${chirpFilters} > 39
328
- rda ${mem.ap40}^, -0.6
329
- wrap ${mem.ap40}, 0.6
330
- @endif
331
- @if ${chirpFilters} > 40
332
- rda ${mem.ap41}^, -0.6
333
- wrap ${mem.ap41}, 0.6
334
- @endif
335
-
336
- ; Post-reverb tone shaping
337
- rdax ${reg.temp}, -1.0
338
- mulx ${reg.kfil}
339
- rdax ${reg.temp}, 1.0
340
- wrax ${reg.temp}, 1.0
341
- wrax ${reg.spring}, 0.0
342
-
343
- ; Output 100% wet signal
344
- rdax ${reg.spring}, 1.0
345
- wrax ${output.out}, 0.0
346
-
347
- ; Smooth reverb with LFO modulation
348
- cho RDA, SIN0, SIN|REG|COMPC, ${mem.lap1b}+25
349
- cho RDA, SIN0, SIN, ${mem.lap1b}+26
350
- wra ${mem.lap1b}+50, 0.0
351
- cho RDA, SIN0, COS|REG|COMPC, ${mem.lap2b}+25
352
- cho RDA, SIN0, COS, ${mem.lap2b}+26
353
- wra ${mem.lap2b}+50, 0.0
1
+ ---
2
+ {
3
+ "type": "effects.springreverb",
4
+ "category": "Effects",
5
+ "subcategory": "Reverb",
6
+ "name": "Spring Reverb",
7
+ "description": "Fender-style spring reverb with RS127 filtering",
8
+ "color": "#7100FC",
9
+ "inputs": [
10
+ { "id": "in", "name": "Input", "type": "audio" },
11
+ { "id": "toneCV", "name": "Tone", "type": "control", "required": false },
12
+ { "id": "reverbTimeCV", "name": "Reverb Time", "type": "control", "required": false }
13
+ ],
14
+ "outputs": [
15
+ { "id": "out", "name": "Output", "type": "audio" }
16
+ ],
17
+ "parameters": [
18
+ {
19
+ "id": "tone",
20
+ "name": "Tone",
21
+ "type": "number",
22
+ "default": 0.5,
23
+ "min": 0,
24
+ "max": 1,
25
+ "step": 0.01
26
+ },
27
+ {
28
+ "id": "reverbTime",
29
+ "name": "Reverb Time",
30
+ "type": "number",
31
+ "default": 0.775,
32
+ "min": 0.7,
33
+ "max": 0.85,
34
+ "step": 0.01
35
+ },
36
+ {
37
+ "id": "chirpFilters",
38
+ "name": "Chirp Filters",
39
+ "type": "number",
40
+ "default": 37,
41
+ "min": 7,
42
+ "max": 41,
43
+ "step": 1
44
+ }
45
+ ],
46
+ "memories": [
47
+ { "id": "lap1a", "size": 404 },
48
+ { "id": "lap1b", "size": 967 },
49
+ { "id": "d1", "size": 1445 },
50
+ { "id": "lap2a", "size": 608 },
51
+ { "id": "lap2b", "size": 893 },
52
+ { "id": "d2", "size": 1013 },
53
+ { "id": "ap1", "size": 5 },
54
+ { "id": "ap2", "size": 5 },
55
+ { "id": "ap3", "size": 5 },
56
+ { "id": "ap4", "size": 5 },
57
+ { "id": "ap5", "size": 5 },
58
+ { "id": "ap6", "size": 5 },
59
+ { "id": "ap7", "size": 5 },
60
+ { "id": "ap8", "size": 6 },
61
+ { "id": "ap9", "size": 6 },
62
+ { "id": "ap10", "size": 6 },
63
+ { "id": "ap11", "size": 6 },
64
+ { "id": "ap12", "size": 6 },
65
+ { "id": "ap13", "size": 6 },
66
+ { "id": "ap14", "size": 6 },
67
+ { "id": "ap15", "size": 6 },
68
+ { "id": "ap16", "size": 6 },
69
+ { "id": "ap17", "size": 6 },
70
+ { "id": "ap18", "size": 6 },
71
+ { "id": "ap19", "size": 6 },
72
+ { "id": "ap20", "size": 6 },
73
+ { "id": "ap21", "size": 6 },
74
+ { "id": "ap22", "size": 7 },
75
+ { "id": "ap23", "size": 7 },
76
+ { "id": "ap24", "size": 7 },
77
+ { "id": "ap25", "size": 7 },
78
+ { "id": "ap26", "size": 7 },
79
+ { "id": "ap27", "size": 7 },
80
+ { "id": "ap28", "size": 7 },
81
+ { "id": "ap29", "size": 7 },
82
+ { "id": "ap30", "size": 7 },
83
+ { "id": "ap31", "size": 7 },
84
+ { "id": "ap32", "size": 7 },
85
+ { "id": "ap33", "size": 7 },
86
+ { "id": "ap34", "size": 7 },
87
+ { "id": "ap35", "size": 7 },
88
+ { "id": "ap36", "size": 8 },
89
+ { "id": "ap37", "size": 8 },
90
+ { "id": "ap38", "size": 8 },
91
+ { "id": "ap39", "size": 8 },
92
+ { "id": "ap40", "size": 8 },
93
+ { "id": "ap41", "size": 8 }
94
+ ],
95
+ "registers": [
96
+ "mono", "lp1", "lp2", "KRT", "revin", "kfil", "lpf1", "hpf1", "spring", "temp"
97
+ ]
98
+ }
99
+ ---
100
+ @section init
101
+ ; Spring Reverb
102
+ skp RUN, springreverb_init_end
103
+ wlds SIN0, 15, 40 ; LFO for reverb smoothing
104
+ springreverb_init_end:
105
+
106
+ @section main
107
+ ; Spring Reverb
108
+
109
+ ; Calculate tone coefficient (kfil) from CV input or parameter
110
+ @if pinConnected(toneCV)
111
+ rdax ${input.toneCV}, 1.0 ; Read tone from CV input
112
+ sof 0.4, 0.1 ; Map [0,1] to [0.1,0.5]
113
+ @else
114
+ sof 0.0, ${tone} ; Read tone from parameter
115
+ @endif
116
+ wrax ${reg.kfil}, 0.0 ; Write tone coefficient
117
+
118
+ ; Calculate reverb time (KRT) from CV input or parameter
119
+ @if pinConnected(reverbTimeCV)
120
+ rdax ${input.reverbTimeCV}, 1.0 ; Read reverb time from CV input
121
+ sof 0.15, 0.7 ; Map [0,1] to [0.7,0.85]
122
+ @else
123
+ sof 0.0, ${reverbTime} ; Read reverb time from parameter
124
+ @endif
125
+ wrax ${reg.KRT}, 0.0 ; Write reverb time
126
+
127
+ ; Sum inputs to mono
128
+ @if pinConnected(in)
129
+ rdax ${input.in}, 1.0
130
+ @else
131
+ sof 0.0, 0.0
132
+ @endif
133
+ wrax ${reg.mono}, 1.0 ; Save and keep in ACC
134
+
135
+ ; Abbey Road EMI RS127 pre-reverb filter
136
+ rdfx ${reg.lpf1}, 0.853 ; 10kHz LPF
137
+ wrlx ${reg.lpf1}, -0.5 ; Shelving LPF
138
+ rdfx ${reg.hpf1}, 0.109 ; 600Hz HPF
139
+ wrhx ${reg.hpf1}, -0.5 ; Shelving HPF
140
+ wrax ${reg.revin}, 1.0 ; Save filtered signal
141
+
142
+ ; Reverb loop 1
143
+ rda ${mem.d1}#, 1.0 ; Get 1st delay output
144
+ mulx ${reg.KRT} ; Apply reverb time
145
+ rdfx ${reg.lp1}, 0.55 ; Shelving lowpass
146
+ wrlx ${reg.lp1}, -1.0
147
+ rda ${mem.lap1a}#, 0.6 ; Reverb allpass 1a
148
+ wrap ${mem.lap1a}, -0.6
149
+ rda ${mem.lap1b}#, 0.6 ; Reverb allpass 1b
150
+ wrap ${mem.lap1b}, -0.6
151
+ rdax ${reg.revin}, 1.0 ; Add filtered input
152
+ wra ${mem.d2}, 0.0 ; Put in 2nd spring delay
153
+
154
+ ; Reverb loop 2
155
+ rda ${mem.d2}#, 1.0 ; Get 2nd delay output
156
+ mulx ${reg.KRT} ; Apply reverb time
157
+ rdfx ${reg.lp2}, 0.55 ; Shelving lowpass
158
+ wrlx ${reg.lp2}, -1.0
159
+ rda ${mem.lap2a}#, 0.6 ; Reverb allpass 2a
160
+ wrap ${mem.lap2a}, -0.6
161
+ rda ${mem.lap2b}#, 0.6 ; Reverb allpass 2b
162
+ wrap ${mem.lap2b}, -0.6
163
+ rdax ${reg.revin}, 1.0 ; Add filtered input
164
+ wra ${mem.d1}, 0.0 ; Put in 1st spring delay
165
+
166
+ ; Chirp filter (spring dispersion)
167
+ rdax ${reg.lp1}, 1.0
168
+ rdax ${reg.lp2}, 1.0
169
+
170
+ ; Generated chirp allpass filters
171
+ @if ${chirpFilters} > 0
172
+ rda ${mem.ap1}^, -0.6
173
+ wrap ${mem.ap1}, 0.6
174
+ @endif
175
+ @if ${chirpFilters} > 1
176
+ rda ${mem.ap2}^, -0.6
177
+ wrap ${mem.ap2}, 0.6
178
+ @endif
179
+ @if ${chirpFilters} > 2
180
+ rda ${mem.ap3}^, -0.6
181
+ wrap ${mem.ap3}, 0.6
182
+ @endif
183
+ @if ${chirpFilters} > 3
184
+ rda ${mem.ap4}^, -0.6
185
+ wrap ${mem.ap4}, 0.6
186
+ @endif
187
+ @if ${chirpFilters} > 4
188
+ rda ${mem.ap5}^, -0.6
189
+ wrap ${mem.ap5}, 0.6
190
+ @endif
191
+ @if ${chirpFilters} > 5
192
+ rda ${mem.ap6}^, -0.6
193
+ wrap ${mem.ap6}, 0.6
194
+ @endif
195
+ @if ${chirpFilters} > 6
196
+ rda ${mem.ap7}^, -0.6
197
+ wrap ${mem.ap7}, 0.6
198
+ @endif
199
+ @if ${chirpFilters} > 7
200
+ rda ${mem.ap8}^, -0.6
201
+ wrap ${mem.ap8}, 0.6
202
+ @endif
203
+ @if ${chirpFilters} > 8
204
+ rda ${mem.ap9}^, -0.6
205
+ wrap ${mem.ap9}, 0.6
206
+ @endif
207
+ @if ${chirpFilters} > 9
208
+ rda ${mem.ap10}^, -0.6
209
+ wrap ${mem.ap10}, 0.6
210
+ @endif
211
+ @if ${chirpFilters} > 10
212
+ rda ${mem.ap11}^, -0.6
213
+ wrap ${mem.ap11}, 0.6
214
+ @endif
215
+ @if ${chirpFilters} > 11
216
+ rda ${mem.ap12}^, -0.6
217
+ wrap ${mem.ap12}, 0.6
218
+ @endif
219
+ @if ${chirpFilters} > 12
220
+ rda ${mem.ap13}^, -0.6
221
+ wrap ${mem.ap13}, 0.6
222
+ @endif
223
+ @if ${chirpFilters} > 13
224
+ rda ${mem.ap14}^, -0.6
225
+ wrap ${mem.ap14}, 0.6
226
+ @endif
227
+ @if ${chirpFilters} > 14
228
+ rda ${mem.ap15}^, -0.6
229
+ wrap ${mem.ap15}, 0.6
230
+ @endif
231
+ @if ${chirpFilters} > 15
232
+ rda ${mem.ap16}^, -0.6
233
+ wrap ${mem.ap16}, 0.6
234
+ @endif
235
+ @if ${chirpFilters} > 16
236
+ rda ${mem.ap17}^, -0.6
237
+ wrap ${mem.ap17}, 0.6
238
+ @endif
239
+ @if ${chirpFilters} > 17
240
+ rda ${mem.ap18}^, -0.6
241
+ wrap ${mem.ap18}, 0.6
242
+ @endif
243
+ @if ${chirpFilters} > 18
244
+ rda ${mem.ap19}^, -0.6
245
+ wrap ${mem.ap19}, 0.6
246
+ @endif
247
+ @if ${chirpFilters} > 19
248
+ rda ${mem.ap20}^, -0.6
249
+ wrap ${mem.ap20}, 0.6
250
+ @endif
251
+ @if ${chirpFilters} > 20
252
+ rda ${mem.ap21}^, -0.6
253
+ wrap ${mem.ap21}, 0.6
254
+ @endif
255
+ @if ${chirpFilters} > 21
256
+ rda ${mem.ap22}^, -0.6
257
+ wrap ${mem.ap22}, 0.6
258
+ @endif
259
+ @if ${chirpFilters} > 22
260
+ rda ${mem.ap23}^, -0.6
261
+ wrap ${mem.ap23}, 0.6
262
+ @endif
263
+ @if ${chirpFilters} > 23
264
+ rda ${mem.ap24}^, -0.6
265
+ wrap ${mem.ap24}, 0.6
266
+ @endif
267
+ @if ${chirpFilters} > 24
268
+ rda ${mem.ap25}^, -0.6
269
+ wrap ${mem.ap25}, 0.6
270
+ @endif
271
+ @if ${chirpFilters} > 25
272
+ rda ${mem.ap26}^, -0.6
273
+ wrap ${mem.ap26}, 0.6
274
+ @endif
275
+ @if ${chirpFilters} > 26
276
+ rda ${mem.ap27}^, -0.6
277
+ wrap ${mem.ap27}, 0.6
278
+ @endif
279
+ @if ${chirpFilters} > 27
280
+ rda ${mem.ap28}^, -0.6
281
+ wrap ${mem.ap28}, 0.6
282
+ @endif
283
+ @if ${chirpFilters} > 28
284
+ rda ${mem.ap29}^, -0.6
285
+ wrap ${mem.ap29}, 0.6
286
+ @endif
287
+ @if ${chirpFilters} > 29
288
+ rda ${mem.ap30}^, -0.6
289
+ wrap ${mem.ap30}, 0.6
290
+ @endif
291
+ @if ${chirpFilters} > 30
292
+ rda ${mem.ap31}^, -0.6
293
+ wrap ${mem.ap31}, 0.6
294
+ @endif
295
+ @if ${chirpFilters} > 31
296
+ rda ${mem.ap32}^, -0.6
297
+ wrap ${mem.ap32}, 0.6
298
+ @endif
299
+ @if ${chirpFilters} > 32
300
+ rda ${mem.ap33}^, -0.6
301
+ wrap ${mem.ap33}, 0.6
302
+ @endif
303
+ @if ${chirpFilters} > 33
304
+ rda ${mem.ap34}^, -0.6
305
+ wrap ${mem.ap34}, 0.6
306
+ @endif
307
+ @if ${chirpFilters} > 34
308
+ rda ${mem.ap35}^, -0.6
309
+ wrap ${mem.ap35}, 0.6
310
+ @endif
311
+ @if ${chirpFilters} > 35
312
+ rda ${mem.ap36}^, -0.6
313
+ wrap ${mem.ap36}, 0.6
314
+ @endif
315
+ @if ${chirpFilters} > 36
316
+ rda ${mem.ap37}^, -0.6
317
+ wrap ${mem.ap37}, 0.6
318
+ @endif
319
+ @if ${chirpFilters} > 37
320
+ rda ${mem.ap38}^, -0.6
321
+ wrap ${mem.ap38}, 0.6
322
+ @endif
323
+ @if ${chirpFilters} > 38
324
+ rda ${mem.ap39}^, -0.6
325
+ wrap ${mem.ap39}, 0.6
326
+ @endif
327
+ @if ${chirpFilters} > 39
328
+ rda ${mem.ap40}^, -0.6
329
+ wrap ${mem.ap40}, 0.6
330
+ @endif
331
+ @if ${chirpFilters} > 40
332
+ rda ${mem.ap41}^, -0.6
333
+ wrap ${mem.ap41}, 0.6
334
+ @endif
335
+
336
+ ; Post-reverb tone shaping
337
+ rdax ${reg.temp}, -1.0
338
+ mulx ${reg.kfil}
339
+ rdax ${reg.temp}, 1.0
340
+ wrax ${reg.temp}, 1.0
341
+ wrax ${reg.spring}, 0.0
342
+
343
+ ; Output 100% wet signal
344
+ rdax ${reg.spring}, 1.0
345
+ wrax ${output.out}, 0.0
346
+
347
+ ; Smooth reverb with LFO modulation
348
+ cho RDA, SIN0, SIN|REG|COMPC, ${mem.lap1b}+25
349
+ cho RDA, SIN0, SIN, ${mem.lap1b}+26
350
+ wra ${mem.lap1b}+50, 0.0
351
+ cho RDA, SIN0, COS|REG|COMPC, ${mem.lap2b}+25
352
+ cho RDA, SIN0, COS, ${mem.lap2b}+26
353
+ wra ${mem.lap2b}+50, 0.0