@audiofab-io/fv1-core 0.2.2 → 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 (133) 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/dist/simulator/FV1Simulator.d.ts.map +1 -1
  131. package/dist/simulator/FV1Simulator.js +7 -4
  132. package/dist/simulator/FV1Simulator.js.map +1 -1
  133. package/package.json +17 -5
@@ -0,0 +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
@@ -0,0 +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
@@ -0,0 +1,152 @@
1
+ ---
2
+ {
3
+ "type": "math.mixer4",
4
+ "category": "Gain/Mixing",
5
+ "name": "4:1 Mixer",
6
+ "description": "Mixes 4 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": "input4",
25
+ "name": "Input 4",
26
+ "type": "audio"
27
+ },
28
+ {
29
+ "id": "level_1",
30
+ "name": "Level 1",
31
+ "type": "control"
32
+ },
33
+ {
34
+ "id": "level_2",
35
+ "name": "Level 2",
36
+ "type": "control"
37
+ },
38
+ {
39
+ "id": "level_3",
40
+ "name": "Level 3",
41
+ "type": "control"
42
+ },
43
+ {
44
+ "id": "level_4",
45
+ "name": "Level 4",
46
+ "type": "control"
47
+ }
48
+ ],
49
+ "outputs": [
50
+ {
51
+ "id": "output",
52
+ "name": "Output",
53
+ "type": "audio"
54
+ }
55
+ ],
56
+ "parameters": [
57
+ {
58
+ "id": "gain1",
59
+ "name": "Input Gain 1",
60
+ "type": "number",
61
+ "min": -18,
62
+ "max": 0,
63
+ "default": -6,
64
+ "conversion": "DBLEVEL"
65
+ },
66
+ {
67
+ "id": "gain2",
68
+ "name": "Input Gain 2",
69
+ "type": "number",
70
+ "min": -18,
71
+ "max": 0,
72
+ "default": -6,
73
+ "conversion": "DBLEVEL"
74
+ },
75
+ {
76
+ "id": "gain3",
77
+ "name": "Input Gain 3",
78
+ "type": "number",
79
+ "min": -18,
80
+ "max": 0,
81
+ "default": -6,
82
+ "conversion": "DBLEVEL"
83
+ },
84
+ {
85
+ "id": "gain4",
86
+ "name": "Input Gain 4",
87
+ "type": "number",
88
+ "min": -18,
89
+ "max": 0,
90
+ "default": -6,
91
+ "conversion": "DBLEVEL"
92
+ }
93
+ ],
94
+ "color": "#2468f2"
95
+ }
96
+ ---
97
+ @section header
98
+ @comment "Generated from spincad source file Mixer_4_to_1.spincad"
99
+
100
+ @section main
101
+ ;REGISTERS
102
+ // we dont read input 1 unless it's connected
103
+ @if pinConnected(Input 1)
104
+ rdax ${input.input1}, ${gain1} ;read input signal
105
+ // if level 1 is connected we multiply by level 1
106
+ @if pinConnected(Level 1)
107
+ mulx ${input.level_1}
108
+ @endif
109
+ wrax ${output.output}, 0.0
110
+ @endif
111
+ @if pinConnected(Input 2)
112
+ rdax ${input.input2}, ${gain2}
113
+ @if pinConnected(Level 2)
114
+ mulx ${input.level_2}
115
+ @endif
116
+ @if pinConnected(Input 1)
117
+ rdax ${output.output}, 1.0
118
+ @endif
119
+ wrax ${output.output}, 0.0
120
+ @endif
121
+ @if pinConnected(Input 3)
122
+ rdax ${input.input3}, ${gain3}
123
+ @if pinConnected(Level 3)
124
+ mulx ${input.level_3}
125
+ @endif
126
+ @if pinConnected(Input 1)
127
+ rdax ${output.output}, 1.0
128
+ @else
129
+ @if pinConnected(Input 2)
130
+ rdax ${output.output}, 1.0
131
+ @endif
132
+ @endif
133
+ wrax ${output.output}, 0.0
134
+ @endif
135
+ @if pinConnected(Input 4)
136
+ rdax ${input.input4}, ${gain4}
137
+ @if pinConnected(Level 4)
138
+ mulx ${input.level_4}
139
+ @endif
140
+ @if pinConnected(Input 1)
141
+ rdax ${output.output}, 1.0
142
+ @else
143
+ @if pinConnected(Input 2)
144
+ rdax ${output.output}, 1.0
145
+ @else
146
+ @if pinConnected(Input 3)
147
+ rdax ${output.output}, 1.0
148
+ @endif
149
+ @endif
150
+ @endif
151
+ wrax ${output.output}, 0.0
152
+ @endif
@@ -0,0 +1,51 @@
1
+ ---
2
+ {
3
+ "type": "math.volume",
4
+ "category": "Gain/Mixing",
5
+ "name": "Volume",
6
+ "description": "Applies a gain to the input signal",
7
+ "inputs": [
8
+ {
9
+ "id": "input",
10
+ "name": "Input",
11
+ "type": "audio"
12
+ },
13
+ {
14
+ "id": "volume",
15
+ "name": "Volume",
16
+ "type": "control"
17
+ }
18
+ ],
19
+ "outputs": [
20
+ {
21
+ "id": "output",
22
+ "name": "Output",
23
+ "type": "audio"
24
+ }
25
+ ],
26
+ "parameters": [
27
+ {
28
+ "id": "gain",
29
+ "name": "Input Gain",
30
+ "type": "number",
31
+ "min": -24,
32
+ "max": 0,
33
+ "default": -6,
34
+ "conversion": "DBLEVEL"
35
+ }
36
+ ],
37
+ "color": "#2468f2"
38
+ }
39
+ ---
40
+ @section header
41
+ @comment "Generated from spincad source file ${input.volume}.spincad"
42
+
43
+ @section main
44
+ ;REGISTERS
45
+ @if pinConnected(${input.input})
46
+ rdax ${input.input}, ${gain} ;read ${input.input} signal
47
+ @if pinConnected(${input.volume})
48
+ mulx ${input.volume}
49
+ @endif
50
+ wrax ${output.output},0 ;${output.output} in ACC and lf1
51
+ @endif
@@ -0,0 +1,53 @@
1
+ ---
2
+ {
3
+ "type": "input.adc",
4
+ "name": "ADC Input",
5
+ "category": "Input/Output",
6
+ "description": "Reads audio from an analog input (ADC) with adjustable gain.",
7
+ "color": "#2196F3",
8
+ "width": 150,
9
+ "labelTemplate": "ADC ${param.adcNumber == 0 ? 'L' : 'R'}",
10
+ "inputs": [],
11
+ "outputs": [
12
+ {
13
+ "id": "out",
14
+ "name": "Audio",
15
+ "type": "audio"
16
+ }
17
+ ],
18
+ "parameters": [
19
+ {
20
+ "id": "adcNumber",
21
+ "name": "ADC Number",
22
+ "type": "select",
23
+ "default": 0,
24
+ "options": [
25
+ {
26
+ "label": "ADCL",
27
+ "value": 0
28
+ },
29
+ {
30
+ "label": "ADCR",
31
+ "value": 1
32
+ }
33
+ ]
34
+ },
35
+ {
36
+ "id": "gain",
37
+ "name": "Gain",
38
+ "type": "number",
39
+ "default": 1,
40
+ "min": 0,
41
+ "max": 1.9999,
42
+ "step": 0.01
43
+ }
44
+ ]
45
+ }
46
+ ---
47
+ @section input
48
+ @if adcNumber == 0
49
+ rdax ADCL, ${param.gain}
50
+ @else
51
+ rdax ADCR, ${param.gain}
52
+ @endif
53
+ wrax ${output.out}, 0
@@ -0,0 +1,61 @@
1
+ ---
2
+ {
3
+ "type": "output.dac",
4
+ "name": "DAC Output",
5
+ "category": "Input/Output",
6
+ "description": "Writes audio to an analog output (DAC) with adjustable gain.",
7
+ "color": "#F44336",
8
+ "width": 150,
9
+ "inputs": [
10
+ {
11
+ "id": "in",
12
+ "name": "Audio",
13
+ "type": "audio",
14
+ "required": true
15
+ }
16
+ ],
17
+ "outputs": [],
18
+ "labelTemplate": "DAC ${param.dacNumber == 0 ? 'L' : 'R'}",
19
+ "parameters": [
20
+ {
21
+ "id": "dacNumber",
22
+ "name": "DAC Number",
23
+ "type": "select",
24
+ "default": 0,
25
+ "options": [
26
+ {
27
+ "label": "DACL",
28
+ "value": 0
29
+ },
30
+ {
31
+ "label": "DACR",
32
+ "value": 1
33
+ }
34
+ ]
35
+ },
36
+ {
37
+ "id": "gain",
38
+ "name": "Gain",
39
+ "type": "number",
40
+ "default": 1,
41
+ "min": -2,
42
+ "max": 1.9999,
43
+ "step": 0.01
44
+ }
45
+ ]
46
+ }
47
+ ---
48
+ @section output
49
+
50
+ ; DAC Output
51
+ rdax ${input.in}, 1.0
52
+
53
+ @if gain != 1.0
54
+ sof ${param.gain}, 0.0
55
+ @endif
56
+
57
+ @if dacNumber == 0
58
+ wrax DACL, 0
59
+ @else
60
+ wrax DACR, 0
61
+ @endif
@@ -0,0 +1,24 @@
1
+ ---
2
+ {
3
+ "type": "other.stickynote",
4
+ "name": "Sticky Note",
5
+ "category": "Other",
6
+ "description": "Add documentation comments to your diagram",
7
+ "color": "#FFEB3B",
8
+ "width": 120,
9
+ "inputs": [],
10
+ "outputs": [],
11
+ "parameters": [
12
+ {
13
+ "id": "text",
14
+ "name": "Note",
15
+ "type": "string",
16
+ "default": "Add your notes here...",
17
+ "multiline": true,
18
+ "description": "Text content for the sticky note. Will be added as comments in the assembly output."
19
+ }
20
+ ],
21
+ "labelTemplate": "${param.text}"
22
+ }
23
+ ---
24
+ @comment ${param.text}
@@ -0,0 +1,137 @@
1
+ ---
2
+ {
3
+ "type": "other.tonegen",
4
+ "category": "Other",
5
+ "name": "Tone Generator",
6
+ "description": "Sine wave generator with rotation matrix oscillator (4x oversampled) based on Spin Semi sample code",
7
+ "color": "#FF9800",
8
+ "inputs": [
9
+ { "id": "coarse_freq", "name": "Coarse Freq", "type": "control", "required": false },
10
+ { "id": "fine_freq", "name": "Fine Freq", "type": "control", "required": false },
11
+ { "id": "amplitude", "name": "Amplitude", "type": "control", "required": false }
12
+ ],
13
+ "outputs": [
14
+ { "id": "out", "name": "Output", "type": "audio" }
15
+ ],
16
+ "parameters": [
17
+ {
18
+ "id": "coarseFreq",
19
+ "name": "Coarse Frequency",
20
+ "type": "number",
21
+ "default": 0.5,
22
+ "min": 0.0,
23
+ "max": 1.0,
24
+ "step": 0.01
25
+ },
26
+ {
27
+ "id": "fineFreq",
28
+ "name": "Fine Frequency",
29
+ "type": "number",
30
+ "default": 0.5,
31
+ "min": 0.0,
32
+ "max": 1.0,
33
+ "step": 0.01
34
+ },
35
+ {
36
+ "id": "amplitude",
37
+ "name": "Amplitude",
38
+ "type": "number",
39
+ "default": 0.5,
40
+ "min": 0.0,
41
+ "max": 1.0,
42
+ "step": 0.01
43
+ }
44
+ ],
45
+ "registers": [
46
+ "freq", "s", "c", "p0fil", "p2fil", "amp"
47
+ ]
48
+ }
49
+ ---
50
+ @section init
51
+ ; Tone Generator init
52
+ skp run, tonegen_adjustable_init
53
+ sof 0.0, 0.5
54
+ wrax ${reg.s}, 0.0
55
+ tonegen_adjustable_init:
56
+
57
+ @section main
58
+ ; Sine Wave Generator (rotation matrix, 4x oversampled)
59
+
60
+ ; Calculate frequency
61
+ @if pinConnected(fine_freq)
62
+ rdax ${input.fine_freq}, 1.0
63
+ @else
64
+ sof 0.0, ${fineFreq}
65
+ @endif
66
+ sof 0.01, -0.005
67
+
68
+ @if pinConnected(coarse_freq)
69
+ rdax ${input.coarse_freq}, 0.625
70
+ @else
71
+ sof 1.0, (${param.coarseFreq} * 0.625)
72
+ @endif
73
+ sof 1.0, -0.66
74
+ exp 1.0, 0.0
75
+
76
+ ; Filter the frequency control
77
+ rdfx ${reg.p0fil}, 0.01
78
+ wrax ${reg.p0fil}, 1.0
79
+ wrax ${reg.freq}, 0.0
80
+
81
+ ; Calculate amplitude (dB/step)
82
+ @if pinConnected(amplitude)
83
+ rdax ${input.amplitude}, 0.9375
84
+ @else
85
+ sof 0.0, (${amplitude} * 0.9375)
86
+ @endif
87
+
88
+ ; Filter amplitude control
89
+ rdfx ${reg.p2fil}, 0.01
90
+ wrax ${reg.p2fil}, 1.0
91
+ sof 1.0, -0.9375
92
+ exp 1.0, 0.0
93
+ wrax ${reg.amp}, 0.0
94
+
95
+ ; Rotation matrix oscillator (4x oversampled)
96
+
97
+ ; Iteration 1
98
+ rdax ${reg.c}, 1.0
99
+ mulx ${reg.freq}
100
+ rdax ${reg.s}, 1.0
101
+ wrax ${reg.s}, -1.0
102
+ mulx ${reg.freq}
103
+ rdax ${reg.c}, 1.0
104
+ wrax ${reg.c}, 0.0
105
+
106
+ ; Iteration 2
107
+ rdax ${reg.c}, 1.0
108
+ mulx ${reg.freq}
109
+ rdax ${reg.s}, 1.0
110
+ wrax ${reg.s}, -1.0
111
+ mulx ${reg.freq}
112
+ rdax ${reg.c}, 1.0
113
+ wrax ${reg.c}, 0.0
114
+
115
+ ; Iteration 3
116
+ rdax ${reg.c}, 1.0
117
+ mulx ${reg.freq}
118
+ rdax ${reg.s}, 1.0
119
+ wrax ${reg.s}, -1.0
120
+ mulx ${reg.freq}
121
+ rdax ${reg.c}, 1.0
122
+ wrax ${reg.c}, 0.0
123
+
124
+ ; Iteration 4 (final - accumulate in ACC)
125
+ rdax ${reg.c}, 1.0
126
+ mulx ${reg.freq}
127
+ rdax ${reg.s}, 1.0
128
+ wrax ${reg.s}, -1.0
129
+ mulx ${reg.freq}
130
+ rdax ${reg.c}, 1.0
131
+ wrax ${reg.c}, 1.99
132
+
133
+ ; Scale output by amplitude
134
+ mulx ${reg.amp}
135
+
136
+ ; Write to output
137
+ wrax ${output.out}, 0.0