@audiofab-io/fv1-core 0.2.3 → 0.4.0

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 (130) hide show
  1. package/blocks/ATL_DEVELOPER_REFERENCE.md +156 -0
  2. package/blocks/control/constant.atl +36 -0
  3. package/blocks/control/entropy_lfo.atl +74 -0
  4. package/blocks/control/envelope.atl +121 -0
  5. package/blocks/control/invert.atl +33 -0
  6. package/blocks/control/pot.atl +150 -0
  7. package/blocks/control/power.atl +77 -0
  8. package/blocks/control/ramp_lfo.atl +122 -0
  9. package/blocks/control/scale_offset.atl +84 -0
  10. package/blocks/control/sincos_lfo.atl +126 -0
  11. package/blocks/control/smoother.atl +48 -0
  12. package/blocks/control/tremolizer.atl +55 -0
  13. package/blocks/effects/delay/micro_stutter.atl +77 -0
  14. package/blocks/effects/delay/mn3011.atl +281 -0
  15. package/blocks/effects/delay/simple_delay.atl +96 -0
  16. package/blocks/effects/delay/triple_tap_delay.atl +176 -0
  17. package/blocks/effects/lo-fi/bit_mangler.atl +74 -0
  18. package/blocks/effects/lo-fi/chiptune.atl +311 -0
  19. package/blocks/effects/lo-fi/tape_degrade.atl +181 -0
  20. package/blocks/effects/modulation/chorus.atl +141 -0
  21. package/blocks/effects/modulation/chorus_4voice.atl +188 -0
  22. package/blocks/effects/modulation/flanger.atl +184 -0
  23. package/blocks/effects/modulation/guitar_synth.atl +350 -0
  24. package/blocks/effects/modulation/harmonic_trem.atl +129 -0
  25. package/blocks/effects/modulation/organ_synth.atl +326 -0
  26. package/blocks/effects/modulation/phaser.atl +300 -0
  27. package/blocks/effects/pitch/octave_up_down.atl +80 -0
  28. package/blocks/effects/pitch/pitch_offset.atl +149 -0
  29. package/blocks/effects/pitch/pitch_offset_dual.atl +197 -0
  30. package/blocks/effects/pitch/pitch_shift.atl +115 -0
  31. package/blocks/effects/pitch/sub_octave.atl +100 -0
  32. package/blocks/effects/reverb/ducking_reverb.atl +145 -0
  33. package/blocks/effects/reverb/min_reverb.atl +132 -0
  34. package/blocks/effects/reverb/plate_reverb.atl +344 -0
  35. package/blocks/effects/reverb/room_reverb.atl +293 -0
  36. package/blocks/effects/reverb/smear.atl +90 -0
  37. package/blocks/effects/reverb/spring_reverb.atl +353 -0
  38. package/blocks/filter/1p_high_pass.atl +63 -0
  39. package/blocks/filter/1p_low_pass.atl +59 -0
  40. package/blocks/filter/auto_wah.atl +207 -0
  41. package/blocks/filter/bbd_loss.atl +79 -0
  42. package/blocks/filter/shelving_high_pass.atl +76 -0
  43. package/blocks/filter/shelving_low_pass.atl +76 -0
  44. package/blocks/filter/svf_2p.atl +116 -0
  45. package/blocks/gain_mix/crossfade.atl +93 -0
  46. package/blocks/gain_mix/crossfade2.atl +86 -0
  47. package/blocks/gain_mix/crossfade3.atl +71 -0
  48. package/blocks/gain_mix/gainboost.atl +54 -0
  49. package/blocks/gain_mix/mixer2.atl +76 -0
  50. package/blocks/gain_mix/mixer3.atl +109 -0
  51. package/blocks/gain_mix/mixer4.atl +152 -0
  52. package/blocks/gain_mix/volume.atl +51 -0
  53. package/blocks/io/adc.atl +53 -0
  54. package/blocks/io/dac.atl +61 -0
  55. package/blocks/other/stickynote.atl +24 -0
  56. package/blocks/other/tone_gen_adjustable.atl +137 -0
  57. package/blocks/other/tone_gen_fixed.atl +109 -0
  58. package/dist/blockDiagram/blocks/BlockDirectoryLoader.d.ts +13 -0
  59. package/dist/blockDiagram/blocks/BlockDirectoryLoader.d.ts.map +1 -0
  60. package/dist/blockDiagram/blocks/BlockDirectoryLoader.js +44 -0
  61. package/dist/blockDiagram/blocks/BlockDirectoryLoader.js.map +1 -0
  62. package/dist/blockDiagram/blocks/BlockRegistry.d.ts +48 -0
  63. package/dist/blockDiagram/blocks/BlockRegistry.d.ts.map +1 -0
  64. package/dist/blockDiagram/blocks/BlockRegistry.js +109 -0
  65. package/dist/blockDiagram/blocks/BlockRegistry.js.map +1 -0
  66. package/dist/blockDiagram/blocks/TemplateBlock.d.ts +20 -0
  67. package/dist/blockDiagram/blocks/TemplateBlock.d.ts.map +1 -0
  68. package/dist/blockDiagram/blocks/TemplateBlock.js +82 -0
  69. package/dist/blockDiagram/blocks/TemplateBlock.js.map +1 -0
  70. package/dist/blockDiagram/blocks/base/BaseBlock.d.ts +248 -0
  71. package/dist/blockDiagram/blocks/base/BaseBlock.d.ts.map +1 -0
  72. package/dist/blockDiagram/blocks/base/BaseBlock.js +402 -0
  73. package/dist/blockDiagram/blocks/base/BaseBlock.js.map +1 -0
  74. package/dist/blockDiagram/builtinBlocks.d.ts +9 -0
  75. package/dist/blockDiagram/builtinBlocks.d.ts.map +1 -0
  76. package/dist/blockDiagram/builtinBlocks.js +4912 -0
  77. package/dist/blockDiagram/builtinBlocks.js.map +1 -0
  78. package/dist/blockDiagram/compiler/BlockTemplate.d.ts +37 -0
  79. package/dist/blockDiagram/compiler/BlockTemplate.d.ts.map +1 -0
  80. package/dist/blockDiagram/compiler/BlockTemplate.js +860 -0
  81. package/dist/blockDiagram/compiler/BlockTemplate.js.map +1 -0
  82. package/dist/blockDiagram/compiler/CodeOptimizer.d.ts +75 -0
  83. package/dist/blockDiagram/compiler/CodeOptimizer.d.ts.map +1 -0
  84. package/dist/blockDiagram/compiler/CodeOptimizer.js +443 -0
  85. package/dist/blockDiagram/compiler/CodeOptimizer.js.map +1 -0
  86. package/dist/blockDiagram/compiler/GraphCompiler.d.ts +63 -0
  87. package/dist/blockDiagram/compiler/GraphCompiler.d.ts.map +1 -0
  88. package/dist/blockDiagram/compiler/GraphCompiler.js +656 -0
  89. package/dist/blockDiagram/compiler/GraphCompiler.js.map +1 -0
  90. package/dist/blockDiagram/compiler/TopologicalSort.d.ts +63 -0
  91. package/dist/blockDiagram/compiler/TopologicalSort.d.ts.map +1 -0
  92. package/dist/blockDiagram/compiler/TopologicalSort.js +268 -0
  93. package/dist/blockDiagram/compiler/TopologicalSort.js.map +1 -0
  94. package/dist/blockDiagram/index.d.ts +30 -0
  95. package/dist/blockDiagram/index.d.ts.map +1 -0
  96. package/dist/blockDiagram/index.js +29 -0
  97. package/dist/blockDiagram/index.js.map +1 -0
  98. package/dist/blockDiagram/types/Block.d.ts +178 -0
  99. package/dist/blockDiagram/types/Block.d.ts.map +1 -0
  100. package/dist/blockDiagram/types/Block.js +5 -0
  101. package/dist/blockDiagram/types/Block.js.map +1 -0
  102. package/dist/blockDiagram/types/CodeGenContext.d.ts +235 -0
  103. package/dist/blockDiagram/types/CodeGenContext.d.ts.map +1 -0
  104. package/dist/blockDiagram/types/CodeGenContext.js +554 -0
  105. package/dist/blockDiagram/types/CodeGenContext.js.map +1 -0
  106. package/dist/blockDiagram/types/Connection.d.ts +17 -0
  107. package/dist/blockDiagram/types/Connection.d.ts.map +1 -0
  108. package/dist/blockDiagram/types/Connection.js +5 -0
  109. package/dist/blockDiagram/types/Connection.js.map +1 -0
  110. package/dist/blockDiagram/types/Graph.d.ts +28 -0
  111. package/dist/blockDiagram/types/Graph.d.ts.map +1 -0
  112. package/dist/blockDiagram/types/Graph.js +24 -0
  113. package/dist/blockDiagram/types/Graph.js.map +1 -0
  114. package/dist/blockDiagram/types/IR.d.ts +79 -0
  115. package/dist/blockDiagram/types/IR.d.ts.map +1 -0
  116. package/dist/blockDiagram/types/IR.js +6 -0
  117. package/dist/blockDiagram/types/IR.js.map +1 -0
  118. package/dist/blockDiagram/utils/SpinCADConverter.d.ts +17 -0
  119. package/dist/blockDiagram/utils/SpinCADConverter.d.ts.map +1 -0
  120. package/dist/blockDiagram/utils/SpinCADConverter.js +307 -0
  121. package/dist/blockDiagram/utils/SpinCADConverter.js.map +1 -0
  122. package/dist/effect/compileEffect.d.ts +51 -0
  123. package/dist/effect/compileEffect.d.ts.map +1 -0
  124. package/dist/effect/compileEffect.js +133 -0
  125. package/dist/effect/compileEffect.js.map +1 -0
  126. package/dist/index.d.ts +2 -0
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +2 -0
  129. package/dist/index.js.map +1 -1
  130. package/package.json +17 -5
@@ -0,0 +1,188 @@
1
+ ---
2
+ {
3
+ "type": "effects.modulation.chorus4voice",
4
+ "category": "Effects",
5
+ "subcategory": "Modulation",
6
+ "name": "4-Voice Chorus",
7
+ "description": "Four-voice chorus with independent outputs",
8
+ "color": "#24F2F2",
9
+ "labelTemplate": "LFO ${param.lfoSel}",
10
+ "inputs": [
11
+ { "id": "input", "name": "Input", "type": "audio", "required": true },
12
+ { "id": "rateIn", "name": "LFO Rate", "type": "control", "required": false },
13
+ { "id": "widthIn", "name": "LFO Width", "type": "control", "required": false }
14
+ ],
15
+ "outputs": [
16
+ { "id": "voice1", "name": "Voice 1", "type": "audio" },
17
+ { "id": "voice2", "name": "Voice 2", "type": "audio" },
18
+ { "id": "voice3", "name": "Voice 3", "type": "audio" },
19
+ { "id": "voice4", "name": "Voice 4", "type": "audio" }
20
+ ],
21
+ "parameters": [
22
+ {
23
+ "id": "gain1",
24
+ "name": "Input Gain",
25
+ "type": "number",
26
+ "min": -24,
27
+ "max": 0,
28
+ "default": -6,
29
+ "conversion": "DBLEVEL"
30
+ },
31
+ {
32
+ "id": "delayLength",
33
+ "name": "Chorus Time",
34
+ "type": "number",
35
+ "default": 15,
36
+ "min": 0,
37
+ "max": 50,
38
+ "conversion": "MS_TO_SAMPLES",
39
+ "description": "Delay time in ms.",
40
+ "step": 1
41
+ },
42
+ {
43
+ "id": "tap1Center",
44
+ "name": "Tap 1 Center",
45
+ "type": "number",
46
+ "default": 0.25,
47
+ "min": 0.0,
48
+ "max": 1.0,
49
+ "step": 0.001
50
+ },
51
+ {
52
+ "id": "tap2Center",
53
+ "name": "Tap 2 Center",
54
+ "type": "number",
55
+ "default": 0.33,
56
+ "min": 0.0,
57
+ "max": 1.0,
58
+ "step": 0.001
59
+ },
60
+ {
61
+ "id": "tap3Center",
62
+ "name": "Tap 3 Center",
63
+ "type": "number",
64
+ "default": 0.63,
65
+ "min": 0.0,
66
+ "max": 1.0,
67
+ "step": 0.001
68
+ },
69
+ {
70
+ "id": "tap4Center",
71
+ "name": "Tap 4 Center",
72
+ "type": "number",
73
+ "default": 0.75,
74
+ "min": 0.0,
75
+ "max": 1.0,
76
+ "step": 0.001
77
+ },
78
+ {
79
+ "id": "rate",
80
+ "name": "LFO Rate (Hz)",
81
+ "type": "number",
82
+ "default": 1.0,
83
+ "min": 0.05,
84
+ "max": 10,
85
+ "conversion": "HZ_TO_LFO_RATE",
86
+ "description": "Frequency of the chorus modulation in Hz.",
87
+ "step": 0.01
88
+ },
89
+ {
90
+ "id": "width",
91
+ "name": "LFO Width (ms)",
92
+ "type": "number",
93
+ "default": 1,
94
+ "min": 0,
95
+ "max": 20,
96
+ "conversion": "MS_TO_LFO_RANGE",
97
+ "description": "The width of modulation in ms.",
98
+ "step": 0.1
99
+ },
100
+ {
101
+ "id": "lfoSel",
102
+ "name": "LFO Select",
103
+ "type": "select",
104
+ "default": 0,
105
+ "options": [
106
+ { "label": "LFO 0", "value": 0 },
107
+ { "label": "LFO 1", "value": 1 }
108
+ ]
109
+ }
110
+ ],
111
+ "memories": [
112
+ { "id": "delayLine", "size": "${delayLength}" }
113
+ ]
114
+ }
115
+ ---
116
+ @section header
117
+ ; Calculations for Centers:
118
+ EQU tap1 (0.9 * ${tap1Center} * ${delayLength} + 0.05 * ${delayLength})
119
+ EQU tap2 (0.9 * ${tap2Center} * ${delayLength} + 0.05 * ${delayLength})
120
+ EQU tap3 (0.9 * ${tap3Center} * ${delayLength} + 0.05 * ${delayLength})
121
+ EQU tap4 (0.9 * ${tap4Center} * ${delayLength} + 0.05 * ${delayLength})
122
+
123
+ @if isequalto lfoSel 0
124
+ @equals lfoNum SIN0
125
+ @equals lfoRateReg SIN0_RATE
126
+ @equals lfoRange SIN0_RANGE
127
+ @else
128
+ @equals lfoNum SIN1
129
+ @equals lfoRateReg SIN1_RATE
130
+ @equals lfoRange SIN1_RANGE
131
+ @endif
132
+
133
+ @section init
134
+ ; Initialize LFO
135
+ skp run, done_4voice_lfo
136
+ wlds ${lfoNum}, ${rate}, ${width}
137
+ done_4voice_lfo:
138
+
139
+ @section main
140
+ @if pinConnected(input)
141
+
142
+ ; Validate LFO Rate
143
+ @if pinConnected(rateIn)
144
+ rdax ${input.rateIn}, (${rate} / 511.0)
145
+ wrax ${lfoRateReg}, 0.0
146
+ @endif
147
+
148
+ ; Validate LFO Width
149
+ @if pinConnected(widthIn)
150
+ rdax ${input.widthIn}, (${width} / 16384.0)
151
+ wrax ${lfoRange}, 0.0
152
+ @endif
153
+
154
+ ; Write input to delay line
155
+ rdax ${input.input}, ${gain1}
156
+ wra ${mem.delayLine}, 0.0
157
+
158
+ ; Voice 1: SIN, REG|COMPC
159
+ @if pinConnected(voice1)
160
+ cho rda, ${lfoNum}, SIN|REG|COMPC, ${mem.delayLine} + tap1
161
+ cho rda, ${lfoNum}, SIN, ${mem.delayLine} + tap1 + 1
162
+ wrax ${output.voice1}, 0.0
163
+ @endif
164
+
165
+ ; Voice 2: SIN, REG|COMPA
166
+ @if pinConnected(voice2)
167
+ cho rda, ${lfoNum}, SIN|REG|COMPA, ${mem.delayLine} + tap2
168
+ cho rda, ${lfoNum}, SIN|COMPC|COMPA, ${mem.delayLine} + tap2 + 1
169
+ wrax ${output.voice2}, 0.0
170
+ @endif
171
+
172
+ ; Voice 3: COS, REG|COMPC
173
+ @if pinConnected(voice3)
174
+ cho rda, ${lfoNum}, COS|REG|COMPC, ${mem.delayLine} + tap3
175
+ cho rda, ${lfoNum}, COS, ${mem.delayLine} + tap3 + 1
176
+ wrax ${output.voice3}, 0.0
177
+ @endif
178
+
179
+ ; Voice 4: COS, REG|COMPA
180
+ @if pinConnected(voice4)
181
+ cho rda, ${lfoNum}, COS|REG|COMPA, ${mem.delayLine} + tap4
182
+ cho rda, ${lfoNum}, COS|COMPC|COMPA, ${mem.delayLine} + tap4 + 1
183
+ wrax ${output.voice4}, 0.0
184
+ @endif
185
+
186
+ @else
187
+ ; 4-Voice Chorus (no input connected)
188
+ @endif
@@ -0,0 +1,184 @@
1
+ ---
2
+ {
3
+ "type": "effects.modulation.flanger",
4
+ "name": "Flanger",
5
+ "category": "Effects",
6
+ "subcategory": "Modulation",
7
+ "description": "Classic flanger effect with LFO modulation",
8
+ "color": "#24F2F2",
9
+ "width": 180,
10
+ "inputs": [
11
+ {
12
+ "id": "input",
13
+ "name": "Input",
14
+ "type": "audio",
15
+ "required": true
16
+ },
17
+ {
18
+ "id": "feedbackIn",
19
+ "name": "Feedback In",
20
+ "type": "audio",
21
+ "required": false
22
+ },
23
+ {
24
+ "id": "rateIn",
25
+ "name": "LFO Rate",
26
+ "type": "control",
27
+ "required": false
28
+ },
29
+ {
30
+ "id": "widthIn",
31
+ "name": "LFO Width",
32
+ "type": "control",
33
+ "required": false
34
+ },
35
+ {
36
+ "id": "fbk",
37
+ "name": "Feedback Gain",
38
+ "type": "control",
39
+ "required": false
40
+ }
41
+ ],
42
+ "outputs": [
43
+ {
44
+ "id": "output",
45
+ "name": "Output",
46
+ "type": "audio"
47
+ },
48
+ {
49
+ "id": "tap",
50
+ "name": "Tap",
51
+ "type": "audio"
52
+ }
53
+ ],
54
+ "parameters": [
55
+ {
56
+ "id": "inputGain",
57
+ "name": "Input Gain",
58
+ "type": "number",
59
+ "default": 0,
60
+ "min": -24,
61
+ "max": 0,
62
+ "conversion": "DBLEVEL",
63
+ "step": 0.01
64
+ },
65
+ {
66
+ "id": "fbkGain",
67
+ "name": "Feedback Gain",
68
+ "type": "number",
69
+ "default": -6,
70
+ "min": -24,
71
+ "max": 0,
72
+ "conversion": "DBLEVEL",
73
+ "step": 0.01
74
+ },
75
+ {
76
+ "id": "baseDelay",
77
+ "name": "Base Delay (ms)",
78
+ "type": "number",
79
+ "default": 1,
80
+ "min": 0.1,
81
+ "max": 10,
82
+ "conversion": "MS_TO_SAMPLES",
83
+ "description": "The center point of the flange modulation in ms.",
84
+ "step": 0.1
85
+ },
86
+ {
87
+ "id": "rate",
88
+ "name": "LFO Rate (Hz)",
89
+ "type": "number",
90
+ "default": 1,
91
+ "min": 0.05,
92
+ "max": 10,
93
+ "conversion": "HZ_TO_LFO_RATE",
94
+ "description": "Frequency of the flange modulation in Hz.",
95
+ "step": 0.01
96
+ },
97
+ {
98
+ "id": "width",
99
+ "name": "LFO Depth (ms)",
100
+ "type": "number",
101
+ "default": 1,
102
+ "min": 0,
103
+ "max": 10,
104
+ "conversion": "MS_TO_LFO_RANGE",
105
+ "description": "The depth of the flange sweep in ms.",
106
+ "step": 0.1
107
+ },
108
+ {
109
+ "id": "lfoSel",
110
+ "name": "LFO Select",
111
+ "type": "select",
112
+ "default": 0,
113
+ "options": [
114
+ {
115
+ "label": "LFO 0",
116
+ "value": 0
117
+ },
118
+ {
119
+ "label": "LFO 1",
120
+ "value": 1
121
+ }
122
+ ]
123
+ }
124
+ ],
125
+ "memories": [
126
+ {
127
+ "id": "delayl",
128
+ "size": 1024
129
+ }
130
+ ]
131
+ }
132
+ ---
133
+ @if isequalto lfoSel 0
134
+ @equals lfoNum SIN0
135
+ @equals lfoRateReg SIN0_RATE
136
+ @equals lfoRange SIN0_RANGE
137
+ @else
138
+ @equals lfoNum SIN1
139
+ @equals lfoRateReg SIN1_RATE
140
+ @equals lfoRange SIN1_RANGE
141
+ @endif
142
+
143
+ @section init
144
+ ; Flanger LFO init
145
+ skp run, done_lfo
146
+ wlds ${lfoNum}, ${rate}, ${width}
147
+ done_lfo:
148
+
149
+ @section main
150
+ ; Flanger
151
+ @if pinConnected(rateIn)
152
+ rdax ${input.rateIn}, ${param.rate.max} / 511.0
153
+ sof 1.0, ${param.rate.min} / 511.0
154
+ wrax ${lfoRateReg}, 0.0
155
+ @endif
156
+
157
+ @if pinConnected(widthIn)
158
+ rdax ${input.widthIn}, ${param.width.max} / 32767.0
159
+ sof 1.0, ${param.width.min} / 32767.0
160
+ wrax ${lfoRange}, 0.0
161
+ @endif
162
+
163
+ @if pinConnected(feedbackIn)
164
+ rdax ${input.feedbackIn}, ${fbkGain}
165
+ @if pinConnected(fbk)
166
+ mulx ${input.fbk}
167
+ @endif
168
+ @endif
169
+
170
+ rdax ${input.input}, ${inputGain}
171
+ wra ${mem.delayl}, 0.0
172
+
173
+ ; tapCenter
174
+ @equals center ${mem.delayl} + ${baseDelay}
175
+ cho rda, ${lfoNum}, SIN | REG | COMPC, ${center}
176
+ cho rda, ${lfoNum}, SIN, ${center} + 1
177
+ wrax ${output.output}, 0.0
178
+
179
+ @if pinConnected(tap)
180
+ ; dry/max tap
181
+ rda ${mem.delayl} + 1023, 1.0
182
+ wrax ${output.tap}, 0.0
183
+ @endif
184
+