@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,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