@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.
- package/blocks/ATL_DEVELOPER_REFERENCE.md +156 -156
- package/blocks/control/constant.atl +36 -36
- package/blocks/control/entropy_lfo.atl +74 -74
- package/blocks/control/envelope.atl +120 -120
- package/blocks/control/invert.atl +33 -33
- package/blocks/control/pot.atl +149 -149
- package/blocks/control/power.atl +76 -76
- package/blocks/control/ramp_lfo.atl +122 -122
- package/blocks/control/scale_offset.atl +84 -84
- package/blocks/control/sincos_lfo.atl +126 -126
- package/blocks/control/smoother.atl +48 -48
- package/blocks/control/tremolizer.atl +54 -54
- package/blocks/effects/delay/micro_stutter.atl +77 -77
- package/blocks/effects/delay/mn3011.atl +280 -280
- package/blocks/effects/delay/simple_delay.atl +96 -96
- package/blocks/effects/delay/triple_tap_delay.atl +176 -176
- package/blocks/effects/lo-fi/bit_mangler.atl +74 -74
- package/blocks/effects/lo-fi/chiptune.atl +311 -311
- package/blocks/effects/lo-fi/tape_degrade.atl +181 -181
- package/blocks/effects/modulation/chorus.atl +141 -141
- package/blocks/effects/modulation/chorus_4voice.atl +188 -188
- package/blocks/effects/modulation/flanger.atl +184 -184
- package/blocks/effects/modulation/harmonic_trem.atl +129 -129
- package/blocks/effects/modulation/phaser.atl +299 -299
- package/blocks/effects/pitch/octave_up_down.atl +80 -80
- package/blocks/effects/pitch/pitch_offset.atl +149 -149
- package/blocks/effects/pitch/pitch_offset_dual.atl +197 -197
- package/blocks/effects/pitch/pitch_shift.atl +115 -115
- package/blocks/effects/pitch/sub_octave.atl +100 -100
- package/blocks/effects/reverb/ducking_reverb.atl +145 -145
- package/blocks/effects/reverb/min_reverb.atl +132 -132
- package/blocks/effects/reverb/plate_reverb.atl +344 -344
- package/blocks/effects/reverb/room_reverb.atl +293 -293
- package/blocks/effects/reverb/smear.atl +90 -90
- package/blocks/effects/reverb/spring_reverb.atl +353 -353
- package/blocks/filter/1p_high_pass.atl +62 -62
- package/blocks/filter/1p_low_pass.atl +58 -58
- package/blocks/filter/auto_wah.atl +207 -207
- package/blocks/filter/bbd_loss.atl +79 -79
- package/blocks/filter/shelving_high_pass.atl +76 -76
- package/blocks/filter/shelving_low_pass.atl +76 -76
- package/blocks/filter/svf_2p.atl +116 -116
- package/blocks/gain_mix/crossfade.atl +93 -93
- package/blocks/gain_mix/crossfade2.atl +86 -86
- package/blocks/gain_mix/crossfade3.atl +71 -71
- package/blocks/gain_mix/gainboost.atl +54 -54
- package/blocks/gain_mix/mixer2.atl +76 -76
- package/blocks/gain_mix/mixer3.atl +109 -109
- package/blocks/gain_mix/mixer4.atl +151 -151
- package/blocks/gain_mix/volume.atl +50 -50
- package/blocks/io/adc.atl +53 -53
- package/blocks/io/dac.atl +61 -61
- package/blocks/other/stickynote.atl +24 -24
- package/blocks/other/tone_gen_adjustable.atl +137 -137
- package/blocks/other/tone_gen_fixed.atl +109 -109
- package/dist/blockDiagram/builtinBlocks.js +107 -107
- package/dist/blockDiagram/builtinBlocks.js.map +1 -1
- package/dist/simulator/FV1Simulator.js +1 -1
- package/package.json +1 -1
|
@@ -1,126 +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
|
|
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
|
|
@@ -1,48 +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
|
|
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
|
|
@@ -1,55 +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
|
|
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
55
|
@endif
|
|
@@ -1,77 +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
|
|
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
|