@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.
- package/blocks/ATL_DEVELOPER_REFERENCE.md +156 -0
- package/blocks/control/constant.atl +36 -0
- package/blocks/control/entropy_lfo.atl +74 -0
- package/blocks/control/envelope.atl +121 -0
- package/blocks/control/invert.atl +33 -0
- package/blocks/control/pot.atl +150 -0
- package/blocks/control/power.atl +77 -0
- package/blocks/control/ramp_lfo.atl +122 -0
- package/blocks/control/scale_offset.atl +84 -0
- package/blocks/control/sincos_lfo.atl +126 -0
- package/blocks/control/smoother.atl +48 -0
- package/blocks/control/tremolizer.atl +55 -0
- package/blocks/effects/delay/micro_stutter.atl +77 -0
- package/blocks/effects/delay/mn3011.atl +281 -0
- package/blocks/effects/delay/simple_delay.atl +96 -0
- package/blocks/effects/delay/triple_tap_delay.atl +176 -0
- package/blocks/effects/lo-fi/bit_mangler.atl +74 -0
- package/blocks/effects/lo-fi/chiptune.atl +311 -0
- package/blocks/effects/lo-fi/tape_degrade.atl +181 -0
- package/blocks/effects/modulation/chorus.atl +141 -0
- package/blocks/effects/modulation/chorus_4voice.atl +188 -0
- package/blocks/effects/modulation/flanger.atl +184 -0
- package/blocks/effects/modulation/guitar_synth.atl +350 -0
- package/blocks/effects/modulation/harmonic_trem.atl +129 -0
- package/blocks/effects/modulation/organ_synth.atl +326 -0
- package/blocks/effects/modulation/phaser.atl +300 -0
- package/blocks/effects/pitch/octave_up_down.atl +80 -0
- package/blocks/effects/pitch/pitch_offset.atl +149 -0
- package/blocks/effects/pitch/pitch_offset_dual.atl +197 -0
- package/blocks/effects/pitch/pitch_shift.atl +115 -0
- package/blocks/effects/pitch/sub_octave.atl +100 -0
- package/blocks/effects/reverb/ducking_reverb.atl +145 -0
- package/blocks/effects/reverb/min_reverb.atl +132 -0
- package/blocks/effects/reverb/plate_reverb.atl +344 -0
- package/blocks/effects/reverb/room_reverb.atl +293 -0
- package/blocks/effects/reverb/smear.atl +90 -0
- package/blocks/effects/reverb/spring_reverb.atl +353 -0
- package/blocks/filter/1p_high_pass.atl +63 -0
- package/blocks/filter/1p_low_pass.atl +59 -0
- package/blocks/filter/auto_wah.atl +207 -0
- package/blocks/filter/bbd_loss.atl +79 -0
- package/blocks/filter/shelving_high_pass.atl +76 -0
- package/blocks/filter/shelving_low_pass.atl +76 -0
- package/blocks/filter/svf_2p.atl +116 -0
- package/blocks/gain_mix/crossfade.atl +93 -0
- package/blocks/gain_mix/crossfade2.atl +86 -0
- package/blocks/gain_mix/crossfade3.atl +71 -0
- package/blocks/gain_mix/gainboost.atl +54 -0
- package/blocks/gain_mix/mixer2.atl +76 -0
- package/blocks/gain_mix/mixer3.atl +109 -0
- package/blocks/gain_mix/mixer4.atl +152 -0
- package/blocks/gain_mix/volume.atl +51 -0
- package/blocks/io/adc.atl +53 -0
- package/blocks/io/dac.atl +61 -0
- package/blocks/other/stickynote.atl +24 -0
- package/blocks/other/tone_gen_adjustable.atl +137 -0
- package/blocks/other/tone_gen_fixed.atl +109 -0
- package/dist/blockDiagram/blocks/BlockDirectoryLoader.d.ts +13 -0
- package/dist/blockDiagram/blocks/BlockDirectoryLoader.d.ts.map +1 -0
- package/dist/blockDiagram/blocks/BlockDirectoryLoader.js +44 -0
- package/dist/blockDiagram/blocks/BlockDirectoryLoader.js.map +1 -0
- package/dist/blockDiagram/blocks/BlockRegistry.d.ts +48 -0
- package/dist/blockDiagram/blocks/BlockRegistry.d.ts.map +1 -0
- package/dist/blockDiagram/blocks/BlockRegistry.js +109 -0
- package/dist/blockDiagram/blocks/BlockRegistry.js.map +1 -0
- package/dist/blockDiagram/blocks/TemplateBlock.d.ts +20 -0
- package/dist/blockDiagram/blocks/TemplateBlock.d.ts.map +1 -0
- package/dist/blockDiagram/blocks/TemplateBlock.js +82 -0
- package/dist/blockDiagram/blocks/TemplateBlock.js.map +1 -0
- package/dist/blockDiagram/blocks/base/BaseBlock.d.ts +248 -0
- package/dist/blockDiagram/blocks/base/BaseBlock.d.ts.map +1 -0
- package/dist/blockDiagram/blocks/base/BaseBlock.js +402 -0
- package/dist/blockDiagram/blocks/base/BaseBlock.js.map +1 -0
- package/dist/blockDiagram/builtinBlocks.d.ts +9 -0
- package/dist/blockDiagram/builtinBlocks.d.ts.map +1 -0
- package/dist/blockDiagram/builtinBlocks.js +4912 -0
- package/dist/blockDiagram/builtinBlocks.js.map +1 -0
- package/dist/blockDiagram/compiler/BlockTemplate.d.ts +37 -0
- package/dist/blockDiagram/compiler/BlockTemplate.d.ts.map +1 -0
- package/dist/blockDiagram/compiler/BlockTemplate.js +860 -0
- package/dist/blockDiagram/compiler/BlockTemplate.js.map +1 -0
- package/dist/blockDiagram/compiler/CodeOptimizer.d.ts +75 -0
- package/dist/blockDiagram/compiler/CodeOptimizer.d.ts.map +1 -0
- package/dist/blockDiagram/compiler/CodeOptimizer.js +443 -0
- package/dist/blockDiagram/compiler/CodeOptimizer.js.map +1 -0
- package/dist/blockDiagram/compiler/GraphCompiler.d.ts +63 -0
- package/dist/blockDiagram/compiler/GraphCompiler.d.ts.map +1 -0
- package/dist/blockDiagram/compiler/GraphCompiler.js +656 -0
- package/dist/blockDiagram/compiler/GraphCompiler.js.map +1 -0
- package/dist/blockDiagram/compiler/TopologicalSort.d.ts +63 -0
- package/dist/blockDiagram/compiler/TopologicalSort.d.ts.map +1 -0
- package/dist/blockDiagram/compiler/TopologicalSort.js +268 -0
- package/dist/blockDiagram/compiler/TopologicalSort.js.map +1 -0
- package/dist/blockDiagram/index.d.ts +30 -0
- package/dist/blockDiagram/index.d.ts.map +1 -0
- package/dist/blockDiagram/index.js +29 -0
- package/dist/blockDiagram/index.js.map +1 -0
- package/dist/blockDiagram/types/Block.d.ts +178 -0
- package/dist/blockDiagram/types/Block.d.ts.map +1 -0
- package/dist/blockDiagram/types/Block.js +5 -0
- package/dist/blockDiagram/types/Block.js.map +1 -0
- package/dist/blockDiagram/types/CodeGenContext.d.ts +235 -0
- package/dist/blockDiagram/types/CodeGenContext.d.ts.map +1 -0
- package/dist/blockDiagram/types/CodeGenContext.js +554 -0
- package/dist/blockDiagram/types/CodeGenContext.js.map +1 -0
- package/dist/blockDiagram/types/Connection.d.ts +17 -0
- package/dist/blockDiagram/types/Connection.d.ts.map +1 -0
- package/dist/blockDiagram/types/Connection.js +5 -0
- package/dist/blockDiagram/types/Connection.js.map +1 -0
- package/dist/blockDiagram/types/Graph.d.ts +28 -0
- package/dist/blockDiagram/types/Graph.d.ts.map +1 -0
- package/dist/blockDiagram/types/Graph.js +24 -0
- package/dist/blockDiagram/types/Graph.js.map +1 -0
- package/dist/blockDiagram/types/IR.d.ts +79 -0
- package/dist/blockDiagram/types/IR.d.ts.map +1 -0
- package/dist/blockDiagram/types/IR.js +6 -0
- package/dist/blockDiagram/types/IR.js.map +1 -0
- package/dist/blockDiagram/utils/SpinCADConverter.d.ts +17 -0
- package/dist/blockDiagram/utils/SpinCADConverter.d.ts.map +1 -0
- package/dist/blockDiagram/utils/SpinCADConverter.js +307 -0
- package/dist/blockDiagram/utils/SpinCADConverter.js.map +1 -0
- package/dist/effect/compileEffect.d.ts +51 -0
- package/dist/effect/compileEffect.d.ts.map +1 -0
- package/dist/effect/compileEffect.js +133 -0
- package/dist/effect/compileEffect.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +17 -5
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
{
|
|
3
|
+
"type": "control.ramp_lfo",
|
|
4
|
+
"name": "Ramp LFO",
|
|
5
|
+
"category": "Control",
|
|
6
|
+
"description": "Ramp LFO generator with adjustable rate, amplitude, slope, and dual outputs (Ramp / Triangle).",
|
|
7
|
+
"color": "#f2b824",
|
|
8
|
+
"labelTemplate": "${param.lfoSel == 0 ? 'RMP0' : 'RMP1'}",
|
|
9
|
+
"inputs": [
|
|
10
|
+
{
|
|
11
|
+
"id": "speed",
|
|
12
|
+
"name": "Speed",
|
|
13
|
+
"type": "control"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "width",
|
|
17
|
+
"name": "Level (Width)",
|
|
18
|
+
"type": "control"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"outputs": [
|
|
22
|
+
{
|
|
23
|
+
"id": "ramp",
|
|
24
|
+
"name": "Ramp Out",
|
|
25
|
+
"type": "control"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "triangle",
|
|
29
|
+
"name": "Triangle Out",
|
|
30
|
+
"type": "control"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"parameters": [
|
|
34
|
+
{
|
|
35
|
+
"id": "lfoSel",
|
|
36
|
+
"name": "LFO Selection",
|
|
37
|
+
"type": "select",
|
|
38
|
+
"default": 0,
|
|
39
|
+
"options": [
|
|
40
|
+
{ "value": 0, "label": "RMP0" },
|
|
41
|
+
{ "value": 1, "label": "RMP1" }
|
|
42
|
+
],
|
|
43
|
+
"description": "Which LFO oscillator to use (0 or 1)."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "speed",
|
|
47
|
+
"name": "Speed",
|
|
48
|
+
"type": "number",
|
|
49
|
+
"default": 6.25,
|
|
50
|
+
"min": -32,
|
|
51
|
+
"max": 64,
|
|
52
|
+
"step": 0.01,
|
|
53
|
+
"description": "Base LFO rate (used if Speed control is not connected)."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": "amplitude",
|
|
57
|
+
"name": "Base Amplitude",
|
|
58
|
+
"type": "select",
|
|
59
|
+
"default": 4096,
|
|
60
|
+
"options": [
|
|
61
|
+
{ "value": 4096, "label": "Full (4096)" },
|
|
62
|
+
{ "value": 2048, "label": "Half (2048)" },
|
|
63
|
+
{ "value": 1024, "label": "Quarter (1024)" },
|
|
64
|
+
{ "value": 512, "label": "Eighth (512)" }
|
|
65
|
+
],
|
|
66
|
+
"description": "Internal amplitude limit of the WLDR instruction."
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
---
|
|
71
|
+
@if ${param.lfoSel} == 0
|
|
72
|
+
@equals lfoNum RMP0
|
|
73
|
+
@equals lfoRateReg RMP0_RATE
|
|
74
|
+
@else
|
|
75
|
+
@equals lfoNum RMP1
|
|
76
|
+
@equals lfoRateReg RMP1_RATE
|
|
77
|
+
@endif
|
|
78
|
+
|
|
79
|
+
; Ramp LFO generator
|
|
80
|
+
@section init
|
|
81
|
+
; WLDR accepts discrete amplitudes: 512, 1024, 2048, 4096.
|
|
82
|
+
; Negative frequencies slope Upwards natively. Positive frequencies slope Downwards.
|
|
83
|
+
wldr ${lfoNum}, ${param.speed} * 512, ${param.amplitude}
|
|
84
|
+
|
|
85
|
+
@section main
|
|
86
|
+
|
|
87
|
+
; Speed modulation (-1.0 to 1.0 covers -32768 to 32767 natively)
|
|
88
|
+
@if pinConnected(speed)
|
|
89
|
+
rdax ${input.speed}, 1.0
|
|
90
|
+
wrax ${lfoRateReg}, 0.0
|
|
91
|
+
@endif
|
|
92
|
+
|
|
93
|
+
; Ramp output
|
|
94
|
+
@if pinConnected(ramp)
|
|
95
|
+
cho rdal, ${lfoNum}
|
|
96
|
+
|
|
97
|
+
; Apply width CV scale if connected
|
|
98
|
+
@if pinConnected(width)
|
|
99
|
+
mulx ${input.width}
|
|
100
|
+
@endif
|
|
101
|
+
|
|
102
|
+
wrax ${output.ramp}, 0.0
|
|
103
|
+
@endif
|
|
104
|
+
|
|
105
|
+
; Triangle output
|
|
106
|
+
@if pinConnected(triangle)
|
|
107
|
+
cho rdal, ${lfoNum}
|
|
108
|
+
|
|
109
|
+
; SpinCAD derivation: scale by 1.999 to stretch 0..1 to 0..2
|
|
110
|
+
; Shift down by exactly half the internal WLDR amplitude ratio
|
|
111
|
+
; Then apply ABSA to fold it back into a Triangle!
|
|
112
|
+
@equals amp_ratio ${param.amplitude} / 4096.0
|
|
113
|
+
sof 1.999, -0.5 * ${amp_ratio}
|
|
114
|
+
absa
|
|
115
|
+
|
|
116
|
+
; Apply width CV scale if connected
|
|
117
|
+
@if pinConnected(width)
|
|
118
|
+
mulx ${input.width}
|
|
119
|
+
@endif
|
|
120
|
+
|
|
121
|
+
wrax ${output.triangle}, 0.0
|
|
122
|
+
@endif
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
{
|
|
3
|
+
"type": "control.scale_offset",
|
|
4
|
+
"name": "Scale/Offset",
|
|
5
|
+
"category": "Control",
|
|
6
|
+
"description": "Scale and offset a control signal to remap input range to output range.",
|
|
7
|
+
"color": "#f2b824",
|
|
8
|
+
"width": 180,
|
|
9
|
+
"inputs": [
|
|
10
|
+
{
|
|
11
|
+
"id": "ctrl_in",
|
|
12
|
+
"name": "Control",
|
|
13
|
+
"type": "control",
|
|
14
|
+
"required": true
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"outputs": [
|
|
18
|
+
{
|
|
19
|
+
"id": "ctrl_out",
|
|
20
|
+
"name": "Control",
|
|
21
|
+
"type": "control"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"parameters": [
|
|
25
|
+
{
|
|
26
|
+
"id": "inLow",
|
|
27
|
+
"name": "Input Low",
|
|
28
|
+
"type": "number",
|
|
29
|
+
"default": 0,
|
|
30
|
+
"min": 0,
|
|
31
|
+
"max": 1,
|
|
32
|
+
"step": 0.01,
|
|
33
|
+
"description": "Minimum value of input range (0.0-1.0)."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "inHigh",
|
|
37
|
+
"name": "Input High",
|
|
38
|
+
"type": "number",
|
|
39
|
+
"default": 1,
|
|
40
|
+
"min": 0,
|
|
41
|
+
"max": 1,
|
|
42
|
+
"step": 0.01,
|
|
43
|
+
"description": "Maximum value of input range (0.0-1.0)."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "outLow",
|
|
47
|
+
"name": "Output Low",
|
|
48
|
+
"type": "number",
|
|
49
|
+
"default": 0,
|
|
50
|
+
"min": -2,
|
|
51
|
+
"max": 1,
|
|
52
|
+
"step": 0.01,
|
|
53
|
+
"description": "Minimum value of output range (-2.0 to 1.0)."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": "outHigh",
|
|
57
|
+
"name": "Output High",
|
|
58
|
+
"type": "number",
|
|
59
|
+
"default": 0.75,
|
|
60
|
+
"min": -2,
|
|
61
|
+
"max": 1,
|
|
62
|
+
"step": 0.01,
|
|
63
|
+
"description": "Maximum value of output range (-2.0 to 1.0)."
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
---
|
|
68
|
+
; Scale/Offset
|
|
69
|
+
@section main
|
|
70
|
+
|
|
71
|
+
@if pinConnected(ctrl_in)
|
|
72
|
+
@minusDouble outRange outHigh outLow
|
|
73
|
+
@minusDouble inRange inHigh inLow
|
|
74
|
+
@divideDouble scale outRange inRange
|
|
75
|
+
@multiplyDouble inLowScale inLow scale
|
|
76
|
+
@minusDouble offset outLow inLowScale
|
|
77
|
+
|
|
78
|
+
@assert inRange > 0, "Scale/Offset: Input range is invalid."
|
|
79
|
+
@assert outRange > 0, "Scale/Offset: Output range is invalid."
|
|
80
|
+
|
|
81
|
+
rdax ${input.ctrl_in}, 1.0
|
|
82
|
+
sof ${scale}, ${offset}
|
|
83
|
+
wrax ${output.ctrl_out}, 0.0
|
|
84
|
+
@endif
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
{
|
|
3
|
+
"type": "control.sincos_lfo",
|
|
4
|
+
"name": "Sin/Cos LFO",
|
|
5
|
+
"category": "Control",
|
|
6
|
+
"description": "Sine and cosine LFO generator with adjustable rate and width.",
|
|
7
|
+
"color": "#f2b824",
|
|
8
|
+
"labelTemplate": "${param.lfoSel == 0 ? 'LFO0' : 'LFO1'}",
|
|
9
|
+
"inputs": [
|
|
10
|
+
{
|
|
11
|
+
"id": "speed",
|
|
12
|
+
"name": "Speed",
|
|
13
|
+
"type": "control"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "width",
|
|
17
|
+
"name": "Width",
|
|
18
|
+
"type": "control"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"outputs": [
|
|
22
|
+
{
|
|
23
|
+
"id": "sine",
|
|
24
|
+
"name": "Sine",
|
|
25
|
+
"type": "control"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "cosine",
|
|
29
|
+
"name": "Cosine",
|
|
30
|
+
"type": "control"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"parameters": [
|
|
34
|
+
{
|
|
35
|
+
"id": "lfoSel",
|
|
36
|
+
"name": "LFO Selection",
|
|
37
|
+
"type": "select",
|
|
38
|
+
"default": 0,
|
|
39
|
+
"options": [
|
|
40
|
+
{ "value": 0, "label": "LFO0" },
|
|
41
|
+
{ "value": 1, "label": "LFO1" }
|
|
42
|
+
],
|
|
43
|
+
"description": "Which LFO oscillator to use (0 or 1)."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "speed",
|
|
47
|
+
"name": "Speed (Hz)",
|
|
48
|
+
"type": "number",
|
|
49
|
+
"default": 0.5,
|
|
50
|
+
"min": 0,
|
|
51
|
+
"max": 20,
|
|
52
|
+
"step": 0.01,
|
|
53
|
+
"conversion": "HZ_TO_LFO_RATE",
|
|
54
|
+
"description": "Base LFO rate"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "width",
|
|
58
|
+
"name": "Width (1.0 equals full swing)",
|
|
59
|
+
"type": "number",
|
|
60
|
+
"default": 0.25,
|
|
61
|
+
"min": 0.0,
|
|
62
|
+
"max": 1.0,
|
|
63
|
+
"step": 0.01,
|
|
64
|
+
"description": "Base LFO width"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "outputRange",
|
|
68
|
+
"name": "Output Range",
|
|
69
|
+
"type": "select",
|
|
70
|
+
"default": "bipolar",
|
|
71
|
+
"options": [
|
|
72
|
+
{ "value": "bipolar", "label": "-1.0 to 1.0" },
|
|
73
|
+
{ "value": "unipolar", "label": "0.0 to 1.0" }
|
|
74
|
+
],
|
|
75
|
+
"description": "Output signal range."
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
---
|
|
80
|
+
@if ${param.lfoSel} == 0
|
|
81
|
+
@equals lfoNum SIN0
|
|
82
|
+
@equals lfoRateReg SIN0_RATE
|
|
83
|
+
@equals lfoRangeReg SIN0_RANGE
|
|
84
|
+
@equals lfoCos COS0
|
|
85
|
+
@else
|
|
86
|
+
@equals lfoNum SIN1
|
|
87
|
+
@equals lfoRateReg SIN1_RATE
|
|
88
|
+
@equals lfoRangeReg SIN1_RANGE
|
|
89
|
+
@equals lfoCos COS1
|
|
90
|
+
@endif
|
|
91
|
+
|
|
92
|
+
; Sin/Cos LFO generator
|
|
93
|
+
@section init
|
|
94
|
+
wlds ${lfoNum}, ${param.speed}, ${param.width} * 32767
|
|
95
|
+
|
|
96
|
+
@section main
|
|
97
|
+
|
|
98
|
+
; Speed modulation (0 to 20 Hz -> 0 to 160 int)
|
|
99
|
+
@if pinConnected(speed)
|
|
100
|
+
rdax ${input.speed}, 160.0 / 512.0
|
|
101
|
+
wrax ${lfoRateReg}, 0.0
|
|
102
|
+
@endif
|
|
103
|
+
|
|
104
|
+
; Width modulation (0 to 1.0 fullswing)
|
|
105
|
+
@if pinConnected(width)
|
|
106
|
+
rdax ${input.width}, 1.0
|
|
107
|
+
wrax ${lfoRangeReg}, 0.0
|
|
108
|
+
@endif
|
|
109
|
+
|
|
110
|
+
; Sine output
|
|
111
|
+
@if pinConnected(sine)
|
|
112
|
+
cho rdal, ${lfoNum}
|
|
113
|
+
@if param.outputRange == 'unipolar'
|
|
114
|
+
sof 0.5, 0.5
|
|
115
|
+
@endif
|
|
116
|
+
wrax ${output.sine}, 0.0
|
|
117
|
+
@endif
|
|
118
|
+
|
|
119
|
+
; Cosine output
|
|
120
|
+
@if pinConnected(cosine)
|
|
121
|
+
cho rdal, ${lfoCos}
|
|
122
|
+
@if param.outputRange == 'unipolar'
|
|
123
|
+
sof 0.5, 0.5
|
|
124
|
+
@endif
|
|
125
|
+
wrax ${output.cosine}, 0.0
|
|
126
|
+
@endif
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
{
|
|
3
|
+
"type": "control.smoother",
|
|
4
|
+
"category": "Control",
|
|
5
|
+
"name": "Smoother",
|
|
6
|
+
"description": "Applies a simple low pass filter to smooth the control signal",
|
|
7
|
+
"inputs": [
|
|
8
|
+
{
|
|
9
|
+
"id": "input",
|
|
10
|
+
"name": "CV In",
|
|
11
|
+
"type": "control"
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"outputs": [
|
|
15
|
+
{
|
|
16
|
+
"id": "output",
|
|
17
|
+
"name": "CV Out",
|
|
18
|
+
"type": "control"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"parameters": [
|
|
22
|
+
{
|
|
23
|
+
"id": "freq",
|
|
24
|
+
"name": "Frequency",
|
|
25
|
+
"type": "number",
|
|
26
|
+
"default": 1.0,
|
|
27
|
+
"min": 0.5,
|
|
28
|
+
"max": 15.0,
|
|
29
|
+
"step": 0.01,
|
|
30
|
+
"conversion": "LOGFREQ",
|
|
31
|
+
"labelTemplate": "${freq} Hz",
|
|
32
|
+
"description": "Smoother cutoff frequency in Hz. Lower values = slower/smoother response."
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"color": "#f2f224",
|
|
36
|
+
"registers": []
|
|
37
|
+
}
|
|
38
|
+
---
|
|
39
|
+
@section header
|
|
40
|
+
@comment "Generated from spincad source file control_smoother.spincad"
|
|
41
|
+
equ filt ${freq}
|
|
42
|
+
|
|
43
|
+
@section main
|
|
44
|
+
@if pinConnected(input)
|
|
45
|
+
rdax ${input.input}, 1.0
|
|
46
|
+
rdfx ${output.output}, filt
|
|
47
|
+
wrax ${output.output}, 0.0
|
|
48
|
+
@endif
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
{
|
|
3
|
+
"type": "control.tremolizer",
|
|
4
|
+
"category": "Control",
|
|
5
|
+
"name": "Tremolizer",
|
|
6
|
+
"description": "Adjusts the LFO width based on a control signal",
|
|
7
|
+
"inputs": [
|
|
8
|
+
{
|
|
9
|
+
"id": "input",
|
|
10
|
+
"name": "LFO Input",
|
|
11
|
+
"type": "control"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"id": "width",
|
|
15
|
+
"name": "LFO Width",
|
|
16
|
+
"type": "control"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"outputs": [
|
|
20
|
+
{
|
|
21
|
+
"id": "output",
|
|
22
|
+
"name": "Control Output",
|
|
23
|
+
"type": "control"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"parameters": [
|
|
27
|
+
{
|
|
28
|
+
"id": "depth",
|
|
29
|
+
"name": "Depth",
|
|
30
|
+
"type": "number",
|
|
31
|
+
"min": 0.0,
|
|
32
|
+
"max": 1.0,
|
|
33
|
+
"default": 0.5,
|
|
34
|
+
"step": 0.01
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"color": "#f2f224"
|
|
38
|
+
}
|
|
39
|
+
---
|
|
40
|
+
@section header
|
|
41
|
+
@comment "Generated from spincad source file tremolizer.spincad"
|
|
42
|
+
|
|
43
|
+
@section main
|
|
44
|
+
// This control block takes a signal (usually an LFO) that goes from 0.0 to 1.0 and
|
|
45
|
+
// allows you to adjust the ${input.width} via a control ${input.input}.
|
|
46
|
+
// There is also a control panel setting for maximum ${depth}
|
|
47
|
+
// variable - Name - low - high - multiplier - precision - option
|
|
48
|
+
@if pinConnected(input)
|
|
49
|
+
rdax ${input.input}, ${depth}
|
|
50
|
+
@if pinConnected(width)
|
|
51
|
+
mulx ${input.width}
|
|
52
|
+
@endif
|
|
53
|
+
sof -0.999, 0.999
|
|
54
|
+
wrax ${output.output}, 0.0
|
|
55
|
+
@endif
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
{
|
|
3
|
+
"type": "fx.micro_stutter",
|
|
4
|
+
"name": "Micro-Stutter",
|
|
5
|
+
"category": "Effects",
|
|
6
|
+
"subcategory": "Lo-Fi",
|
|
7
|
+
"description": "Glitchy frozen grain effect. When triggered, stops incoming audio and continuously loops the last active grain buffer.",
|
|
8
|
+
"color": "#6060c4",
|
|
9
|
+
"width": 180,
|
|
10
|
+
"inputs": [
|
|
11
|
+
{
|
|
12
|
+
"id": "in",
|
|
13
|
+
"name": "Input",
|
|
14
|
+
"type": "audio",
|
|
15
|
+
"required": true
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "freeze_cv",
|
|
19
|
+
"name": "Freeze Trigger",
|
|
20
|
+
"type": "control",
|
|
21
|
+
"required": false,
|
|
22
|
+
"description": "CV input. When value > 0.5, the buffer freezes."
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"outputs": [
|
|
26
|
+
{
|
|
27
|
+
"id": "out",
|
|
28
|
+
"name": "Output",
|
|
29
|
+
"type": "audio"
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"parameters": [
|
|
33
|
+
{
|
|
34
|
+
"id": "grain_size",
|
|
35
|
+
"name": "Grain Size (ms)",
|
|
36
|
+
"type": "number",
|
|
37
|
+
"default": 100,
|
|
38
|
+
"min": 10,
|
|
39
|
+
"max": 500,
|
|
40
|
+
"step": 1,
|
|
41
|
+
"conversion": "MS_TO_SAMPLES"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "level",
|
|
45
|
+
"name": "Wet Level",
|
|
46
|
+
"type": "number",
|
|
47
|
+
"default": 1.0,
|
|
48
|
+
"min": 0.0,
|
|
49
|
+
"max": 1.5,
|
|
50
|
+
"step": 0.05
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"memories": [
|
|
54
|
+
{
|
|
55
|
+
"id": "grain",
|
|
56
|
+
"size": 16384
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
---
|
|
61
|
+
@section main
|
|
62
|
+
; Check Freeze CV status
|
|
63
|
+
@if pinConnected(freeze_cv)
|
|
64
|
+
rdax ${input.freeze_cv}, 1.0
|
|
65
|
+
sof 1.0, -0.5 ; Offset by 0.5
|
|
66
|
+
skp gez, play_grain ; If CV > 0.5, skip the write instruction and just recycle the buffer!
|
|
67
|
+
@endif
|
|
68
|
+
|
|
69
|
+
; Write to buffer (Only executes if NOT frozen)
|
|
70
|
+
rdax ${input.in}, 1.0
|
|
71
|
+
wra ${mem.grain}, 0.0
|
|
72
|
+
|
|
73
|
+
play_grain:
|
|
74
|
+
; Read from buffer at Grain Size offset
|
|
75
|
+
@equals offset ${mem.grain} + ${param.grain_size}
|
|
76
|
+
rda ${offset}, ${param.level}
|
|
77
|
+
wrax ${output.out}, 0.0
|