@audiofab-io/fv1-core 0.6.1 → 0.6.3

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 (62) 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.d.ts +12 -0
  59. package/dist/simulator/FV1Simulator.d.ts.map +1 -1
  60. package/dist/simulator/FV1Simulator.js +47 -1
  61. package/dist/simulator/FV1Simulator.js.map +1 -1
  62. package/package.json +1 -1
@@ -1,71 +1,71 @@
1
- ---
2
- {
3
- "type": "math.crossfade3",
4
- "name": "Crossfade 3",
5
- "category": "Gain/Mixing",
6
- "description": "True crossfade between two inputs with control and parameter fallback",
7
- "color": "#4287f5",
8
- "inputs": [
9
- { "id": "input1", "name": "Input 1", "type": "audio", "required": true },
10
- { "id": "input2", "name": "Input 2", "type": "audio", "required": true },
11
- { "id": "fade", "name": "Fade", "type": "control", "required": false }
12
- ],
13
- "outputs": [
14
- { "id": "output", "name": "Output", "type": "audio" }
15
- ],
16
- "parameters": [
17
- { "id": "fade", "name": "Fade", "type": "number", "default": 0.5, "min": 0, "max": 1, "step": 0.01 }
18
- ],
19
- "registers": [ "temp" ]
20
- }
21
- ---
22
- ; Crossfade 3 (Restored Java logic)
23
- @section main
24
-
25
- @if pinConnected(fade)
26
- @if pinConnected(input1) && pinConnected(input2)
27
- rdax ${input.fade}, 1.0
28
- sof 1.0, -0.5
29
- skp neg, fade_neg
30
-
31
- ; Fade > 0.5 path
32
- clr
33
- rdax ${input.fade}, 0.586
34
- sof 1.0, 0.414
35
- mulx ${input.input2}
36
- wrax ${reg.temp}, 0.0
37
-
38
- rdax ${input.fade}, 1.0
39
- sof 0.707, -0.707
40
- sof -2.0, 0.0
41
- mulx ${input.input1}
42
- rdax ${reg.temp}, 1.0
43
- skp run, fade_done
44
-
45
- fade_neg:
46
- ; Fade < 0.5 path
47
- clr
48
- rdax ${input.fade}, 1.414
49
- mulx ${input.input2}
50
- wrax ${reg.temp}, 0.0
51
-
52
- rdax ${input.fade}, -0.586
53
- sof 0.999, 0.999
54
- mulx ${input.input1}
55
- rdax ${reg.temp}, 1.0
56
-
57
- fade_done:
58
- wrax ${output.output}, 0.0
59
- @endif
60
- @else
61
- ; Fallback to simple crossfade using parameter
62
- @equals staticFade ${fade}
63
- @equals staticInvFade (1.0 - ${fade})
64
- @if pinConnected(input1)
65
- rdax ${input.input1}, ${staticInvFade}
66
- @endif
67
- @if pinConnected(input2)
68
- rdax ${input.input2}, ${staticFade}
69
- @endif
70
- wrax ${output.output}, 0.0
71
- @endif
1
+ ---
2
+ {
3
+ "type": "math.crossfade3",
4
+ "name": "Crossfade 3",
5
+ "category": "Gain/Mixing",
6
+ "description": "True crossfade between two inputs with control and parameter fallback",
7
+ "color": "#4287f5",
8
+ "inputs": [
9
+ { "id": "input1", "name": "Input 1", "type": "audio", "required": true },
10
+ { "id": "input2", "name": "Input 2", "type": "audio", "required": true },
11
+ { "id": "fade", "name": "Fade", "type": "control", "required": false }
12
+ ],
13
+ "outputs": [
14
+ { "id": "output", "name": "Output", "type": "audio" }
15
+ ],
16
+ "parameters": [
17
+ { "id": "fade", "name": "Fade", "type": "number", "default": 0.5, "min": 0, "max": 1, "step": 0.01 }
18
+ ],
19
+ "registers": [ "temp" ]
20
+ }
21
+ ---
22
+ ; Crossfade 3 (Restored Java logic)
23
+ @section main
24
+
25
+ @if pinConnected(fade)
26
+ @if pinConnected(input1) && pinConnected(input2)
27
+ rdax ${input.fade}, 1.0
28
+ sof 1.0, -0.5
29
+ skp neg, fade_neg
30
+
31
+ ; Fade > 0.5 path
32
+ clr
33
+ rdax ${input.fade}, 0.586
34
+ sof 1.0, 0.414
35
+ mulx ${input.input2}
36
+ wrax ${reg.temp}, 0.0
37
+
38
+ rdax ${input.fade}, 1.0
39
+ sof 0.707, -0.707
40
+ sof -2.0, 0.0
41
+ mulx ${input.input1}
42
+ rdax ${reg.temp}, 1.0
43
+ skp run, fade_done
44
+
45
+ fade_neg:
46
+ ; Fade < 0.5 path
47
+ clr
48
+ rdax ${input.fade}, 1.414
49
+ mulx ${input.input2}
50
+ wrax ${reg.temp}, 0.0
51
+
52
+ rdax ${input.fade}, -0.586
53
+ sof 0.999, 0.999
54
+ mulx ${input.input1}
55
+ rdax ${reg.temp}, 1.0
56
+
57
+ fade_done:
58
+ wrax ${output.output}, 0.0
59
+ @endif
60
+ @else
61
+ ; Fallback to simple crossfade using parameter
62
+ @equals staticFade ${fade}
63
+ @equals staticInvFade (1.0 - ${fade})
64
+ @if pinConnected(input1)
65
+ rdax ${input.input1}, ${staticInvFade}
66
+ @endif
67
+ @if pinConnected(input2)
68
+ rdax ${input.input2}, ${staticFade}
69
+ @endif
70
+ wrax ${output.output}, 0.0
71
+ @endif
@@ -1,54 +1,54 @@
1
- ---
2
- {
3
- "type": "math.gainboost",
4
- "name": "Gain Boost",
5
- "category": "Gain/Mixing",
6
- "description": "Adjusts the gain of an audio signal in 6dB steps with correct phase logic.",
7
- "color": "#4287f5",
8
- "width": 100,
9
- "labelTemplate": "${param.gain * 6} dB",
10
- "inputs": [
11
- { "id": "in", "name": "In", "type": "audio", "required": true }
12
- ],
13
- "outputs": [
14
- { "id": "out", "name": "Out", "type": "audio" }
15
- ],
16
- "parameters": [
17
- {
18
- "id": "gain",
19
- "name": "Boost (6dB steps)",
20
- "type": "number",
21
- "default": 1,
22
- "min": 0,
23
- "max": 4,
24
- "step": 1,
25
- "description": "Number of 6dB gain stages."
26
- }
27
- ]
28
- }
29
- ---
30
- ; Gain Boost (Restored Java logic)
31
- @section main
32
-
33
- rdax ${input.in}, 1.0
34
-
35
- ; Each 'sof -2.0, 0' adds 6dB but flips phase
36
- @if param.gain >= 1
37
- sof -2.0, 0.0
38
- @endif
39
- @if param.gain >= 2
40
- sof -2.0, 0.0
41
- @endif
42
- @if param.gain >= 3
43
- sof -2.0, 0.0
44
- @endif
45
- @if param.gain >= 4
46
- sof -2.0, 0.0
47
- @endif
48
-
49
- ; If an odd number of stages was used, flip phase back to original
50
- @if (param.gain % 2) == 1
51
- sof -1.0, 0.0
52
- @endif
53
-
54
- wrax ${output.out}, 0.0
1
+ ---
2
+ {
3
+ "type": "math.gainboost",
4
+ "name": "Gain Boost",
5
+ "category": "Gain/Mixing",
6
+ "description": "Adjusts the gain of an audio signal in 6dB steps with correct phase logic.",
7
+ "color": "#4287f5",
8
+ "width": 100,
9
+ "labelTemplate": "${param.gain * 6} dB",
10
+ "inputs": [
11
+ { "id": "in", "name": "In", "type": "audio", "required": true }
12
+ ],
13
+ "outputs": [
14
+ { "id": "out", "name": "Out", "type": "audio" }
15
+ ],
16
+ "parameters": [
17
+ {
18
+ "id": "gain",
19
+ "name": "Boost (6dB steps)",
20
+ "type": "number",
21
+ "default": 1,
22
+ "min": 0,
23
+ "max": 4,
24
+ "step": 1,
25
+ "description": "Number of 6dB gain stages."
26
+ }
27
+ ]
28
+ }
29
+ ---
30
+ ; Gain Boost (Restored Java logic)
31
+ @section main
32
+
33
+ rdax ${input.in}, 1.0
34
+
35
+ ; Each 'sof -2.0, 0' adds 6dB but flips phase
36
+ @if param.gain >= 1
37
+ sof -2.0, 0.0
38
+ @endif
39
+ @if param.gain >= 2
40
+ sof -2.0, 0.0
41
+ @endif
42
+ @if param.gain >= 3
43
+ sof -2.0, 0.0
44
+ @endif
45
+ @if param.gain >= 4
46
+ sof -2.0, 0.0
47
+ @endif
48
+
49
+ ; If an odd number of stages was used, flip phase back to original
50
+ @if (param.gain % 2) == 1
51
+ sof -1.0, 0.0
52
+ @endif
53
+
54
+ wrax ${output.out}, 0.0
@@ -1,76 +1,76 @@
1
- ---
2
- {
3
- "type": "math.mixer2",
4
- "category": "Gain/Mixing",
5
- "name": "2:1 Mixer",
6
- "description": "Mixes 2 audio inputs with optional gain control",
7
- "inputs": [
8
- {
9
- "id": "input1",
10
- "name": "Input 1",
11
- "type": "audio"
12
- },
13
- {
14
- "id": "input2",
15
- "name": "Input 2",
16
- "type": "audio"
17
- },
18
- {
19
- "id": "level_1",
20
- "name": "Level 1",
21
- "type": "control"
22
- },
23
- {
24
- "id": "level_2",
25
- "name": "Level 2",
26
- "type": "control"
27
- }
28
- ],
29
- "outputs": [
30
- {
31
- "id": "output",
32
- "name": "Output",
33
- "type": "audio"
34
- }
35
- ],
36
- "parameters": [
37
- {
38
- "id": "gain1",
39
- "name": "Input Gain 1",
40
- "type": "number",
41
- "min": -18,
42
- "max": 0,
43
- "default": -6,
44
- "conversion": "DBLEVEL"
45
- },
46
- {
47
- "id": "gain2",
48
- "name": "Input Gain 2",
49
- "type": "number",
50
- "min": -18,
51
- "max": 0,
52
- "default": -6,
53
- "conversion": "DBLEVEL"
54
- }
55
- ],
56
- "color": "#2468f2"
57
- }
58
- ---
59
- @section main
60
- @if pinConnected(Input 1)
61
- rdax ${input.input1}, ${gain1}
62
- @if pinConnected(Level 1)
63
- mulx ${input.level_1}
64
- @endif
65
- wrax ${output.output}, 0.0
66
- @endif
67
- @if pinConnected(Input 2)
68
- rdax ${input.input2}, ${gain2}
69
- @if pinConnected(Level 2)
70
- mulx ${input.level_2}
71
- @endif
72
- @if pinConnected(Input 1)
73
- rdax ${output.output}, 1.0
74
- @endif
75
- wrax ${output.output}, 0.0
76
- @endif
1
+ ---
2
+ {
3
+ "type": "math.mixer2",
4
+ "category": "Gain/Mixing",
5
+ "name": "2:1 Mixer",
6
+ "description": "Mixes 2 audio inputs with optional gain control",
7
+ "inputs": [
8
+ {
9
+ "id": "input1",
10
+ "name": "Input 1",
11
+ "type": "audio"
12
+ },
13
+ {
14
+ "id": "input2",
15
+ "name": "Input 2",
16
+ "type": "audio"
17
+ },
18
+ {
19
+ "id": "level_1",
20
+ "name": "Level 1",
21
+ "type": "control"
22
+ },
23
+ {
24
+ "id": "level_2",
25
+ "name": "Level 2",
26
+ "type": "control"
27
+ }
28
+ ],
29
+ "outputs": [
30
+ {
31
+ "id": "output",
32
+ "name": "Output",
33
+ "type": "audio"
34
+ }
35
+ ],
36
+ "parameters": [
37
+ {
38
+ "id": "gain1",
39
+ "name": "Input Gain 1",
40
+ "type": "number",
41
+ "min": -18,
42
+ "max": 0,
43
+ "default": -6,
44
+ "conversion": "DBLEVEL"
45
+ },
46
+ {
47
+ "id": "gain2",
48
+ "name": "Input Gain 2",
49
+ "type": "number",
50
+ "min": -18,
51
+ "max": 0,
52
+ "default": -6,
53
+ "conversion": "DBLEVEL"
54
+ }
55
+ ],
56
+ "color": "#2468f2"
57
+ }
58
+ ---
59
+ @section main
60
+ @if pinConnected(Input 1)
61
+ rdax ${input.input1}, ${gain1}
62
+ @if pinConnected(Level 1)
63
+ mulx ${input.level_1}
64
+ @endif
65
+ wrax ${output.output}, 0.0
66
+ @endif
67
+ @if pinConnected(Input 2)
68
+ rdax ${input.input2}, ${gain2}
69
+ @if pinConnected(Level 2)
70
+ mulx ${input.level_2}
71
+ @endif
72
+ @if pinConnected(Input 1)
73
+ rdax ${output.output}, 1.0
74
+ @endif
75
+ wrax ${output.output}, 0.0
76
+ @endif
@@ -1,109 +1,109 @@
1
- ---
2
- {
3
- "type": "math.mixer3",
4
- "category": "Gain/Mixing",
5
- "name": "3:1 Mixer",
6
- "description": "Mixes 3 audio inputs with optional gain control",
7
- "inputs": [
8
- {
9
- "id": "input1",
10
- "name": "Input 1",
11
- "type": "audio"
12
- },
13
- {
14
- "id": "input2",
15
- "name": "Input 2",
16
- "type": "audio"
17
- },
18
- {
19
- "id": "input3",
20
- "name": "Input 3",
21
- "type": "audio"
22
- },
23
- {
24
- "id": "level_1",
25
- "name": "Level 1",
26
- "type": "control"
27
- },
28
- {
29
- "id": "level_2",
30
- "name": "Level 2",
31
- "type": "control"
32
- },
33
- {
34
- "id": "level_3",
35
- "name": "Level 3",
36
- "type": "control"
37
- }
38
- ],
39
- "outputs": [
40
- {
41
- "id": "output",
42
- "name": "Output",
43
- "type": "audio"
44
- }
45
- ],
46
- "parameters": [
47
- {
48
- "id": "gain1",
49
- "name": "Input Gain 1",
50
- "type": "number",
51
- "min": -18,
52
- "max": 0,
53
- "default": -6,
54
- "conversion": "DBLEVEL"
55
- },
56
- {
57
- "id": "gain2",
58
- "name": "Input Gain 2",
59
- "type": "number",
60
- "min": -18,
61
- "max": 0,
62
- "default": -6,
63
- "conversion": "DBLEVEL"
64
- },
65
- {
66
- "id": "gain3",
67
- "name": "Input Gain 3",
68
- "type": "number",
69
- "min": -18,
70
- "max": 0,
71
- "default": -6,
72
- "conversion": "DBLEVEL"
73
- }
74
- ],
75
- "color": "#2468f2"
76
- }
77
- ---
78
- @section main
79
- @if pinConnected(Input 1)
80
- rdax ${input.input1}, ${gain1}
81
- @if pinConnected(Level 1)
82
- mulx ${input.level_1}
83
- @endif
84
- wrax ${output.output}, 0.0
85
- @endif
86
- @if pinConnected(Input 2)
87
- rdax ${input.input2}, ${gain2}
88
- @if pinConnected(Level 2)
89
- mulx ${input.level_2}
90
- @endif
91
- @if pinConnected(Input 1)
92
- rdax ${output.output}, 1.0
93
- @endif
94
- wrax ${output.output}, 0.0
95
- @endif
96
- @if pinConnected(Input 3)
97
- rdax ${input.input3}, ${gain3}
98
- @if pinConnected(Level 3)
99
- mulx ${input.level_3}
100
- @endif
101
- @if pinConnected(Input 1)
102
- rdax ${output.output}, 1.0
103
- @else
104
- @if pinConnected(Input 2)
105
- rdax ${output.output}, 1.0
106
- @endif
107
- @endif
108
- wrax ${output.output}, 0.0
109
- @endif
1
+ ---
2
+ {
3
+ "type": "math.mixer3",
4
+ "category": "Gain/Mixing",
5
+ "name": "3:1 Mixer",
6
+ "description": "Mixes 3 audio inputs with optional gain control",
7
+ "inputs": [
8
+ {
9
+ "id": "input1",
10
+ "name": "Input 1",
11
+ "type": "audio"
12
+ },
13
+ {
14
+ "id": "input2",
15
+ "name": "Input 2",
16
+ "type": "audio"
17
+ },
18
+ {
19
+ "id": "input3",
20
+ "name": "Input 3",
21
+ "type": "audio"
22
+ },
23
+ {
24
+ "id": "level_1",
25
+ "name": "Level 1",
26
+ "type": "control"
27
+ },
28
+ {
29
+ "id": "level_2",
30
+ "name": "Level 2",
31
+ "type": "control"
32
+ },
33
+ {
34
+ "id": "level_3",
35
+ "name": "Level 3",
36
+ "type": "control"
37
+ }
38
+ ],
39
+ "outputs": [
40
+ {
41
+ "id": "output",
42
+ "name": "Output",
43
+ "type": "audio"
44
+ }
45
+ ],
46
+ "parameters": [
47
+ {
48
+ "id": "gain1",
49
+ "name": "Input Gain 1",
50
+ "type": "number",
51
+ "min": -18,
52
+ "max": 0,
53
+ "default": -6,
54
+ "conversion": "DBLEVEL"
55
+ },
56
+ {
57
+ "id": "gain2",
58
+ "name": "Input Gain 2",
59
+ "type": "number",
60
+ "min": -18,
61
+ "max": 0,
62
+ "default": -6,
63
+ "conversion": "DBLEVEL"
64
+ },
65
+ {
66
+ "id": "gain3",
67
+ "name": "Input Gain 3",
68
+ "type": "number",
69
+ "min": -18,
70
+ "max": 0,
71
+ "default": -6,
72
+ "conversion": "DBLEVEL"
73
+ }
74
+ ],
75
+ "color": "#2468f2"
76
+ }
77
+ ---
78
+ @section main
79
+ @if pinConnected(Input 1)
80
+ rdax ${input.input1}, ${gain1}
81
+ @if pinConnected(Level 1)
82
+ mulx ${input.level_1}
83
+ @endif
84
+ wrax ${output.output}, 0.0
85
+ @endif
86
+ @if pinConnected(Input 2)
87
+ rdax ${input.input2}, ${gain2}
88
+ @if pinConnected(Level 2)
89
+ mulx ${input.level_2}
90
+ @endif
91
+ @if pinConnected(Input 1)
92
+ rdax ${output.output}, 1.0
93
+ @endif
94
+ wrax ${output.output}, 0.0
95
+ @endif
96
+ @if pinConnected(Input 3)
97
+ rdax ${input.input3}, ${gain3}
98
+ @if pinConnected(Level 3)
99
+ mulx ${input.level_3}
100
+ @endif
101
+ @if pinConnected(Input 1)
102
+ rdax ${output.output}, 1.0
103
+ @else
104
+ @if pinConnected(Input 2)
105
+ rdax ${output.output}, 1.0
106
+ @endif
107
+ @endif
108
+ wrax ${output.output}, 0.0
109
+ @endif