-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
1607 lines (1606 loc) · 113 KB
/
index.html
File metadata and controls
1607 lines (1606 loc) · 113 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html>
<head>
<title>Teletype v4.0.0 Cheatsheet</title>
<link id="favicon" rel="shortcut icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TpaJVETuIOASsThbELxylikWwUNoKrTqYXPoFTRqSFBdHwbXg4Mdi1cHFWVcHV0EQ/ABxc3NSdJES/5cUWsR6cNyPd/ced+8AoVpkqtk2DqiaZcQjYTGVXhV9r+hCD/owjWGJmXo0sZhEy/F1Dw9f70I8q/W5P0e3kjEZ4BGJ55huWMQbxDObls55nzjA8pJCfE48ZtAFiR+5Lrv8xjnnsMAzA0YyPk8cIBZzTSw3McsbKvEUcVBRNcoXUi4rnLc4q8Uyq9+Tv9Cf0VYSXKc5hAiWEEUMImSUUUARFkK0aqSYiNN+uIV/0PHHyCWTqwBGjgWUoEJy/OB/8LtbMzs54Sb5w0D7i21/jAC+XaBWse3vY9uunQDeZ+BKa/hLVWD2k/RKQwseAb3bwMV1Q5P3gMsdYOBJlwzJkbw0hWwWeD+jb0oD/bdA55rbW30fpw9AkrpavgEODoHRHGWvt3h3R3Nv/56p9/cD0YtyzV3acNcAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQflCw4VAwu7QI1jAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAAAFlJREFUOMtj1NNT/89AAWBioBAMvAEspChOD34LZ89cK0zYgENzb8LZdsnquL2ArBAZwDTh0gw3wC5ZHachRAciuYYwIfsXn1PxGkCuZpQwwAUIGcw4mhcYAA77Gn9K7Iy3AAAAAElFTkSuQmCC">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@600;700&family=Roboto:wght@500&display=swap" rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<style type="text/css">
body {
background: #eeeef2; color: #222228;
}
a {
color: inherit; text-decoration: inherit;
}
code {
font-family: 'Roboto Mono', monospace;
}
h1 {
margin: 0px 0px 0.3em 0px; padding: 0.3em 0px 0px 0px; font-family: 'Roboto Mono', monospace; border-bottom: 1px solid #aaaab0;
}
.links {
/* style */
font-family: 'Roboto Mono', monospace; font-size: larger; font-weight: bolder; overflow: hidden; padding: 0;
/* positioning */
height: 100vh; width: 10vw; position: fixed; top: 0; left: 0;
}
.content {
/* style */
padding: 1%; border-left: 1px solid #aaaab0; overflow: hidden;
/* positioning */
height: 100vh; width: 85vw; position: fixed; top: 0; left: 10vw;
}
.content-scrollable {
overflow-y: scroll; height: 100%; width: 100%; box-sizing: content-box; padding-right: 3em;
}
.links-scrollable {
overflow-x: hidden; overflow-y: scroll; height: 100%; width: 100%; box-sizing: content-box; white-space: nowrap; padding-right: 0.3em; writing-mode: vertical-rl; text-orientation: mixed; transform: rotate(180deg); text-align: right;
-ms-overflow-style: none; /* for Internet Explorer, Edge */
scrollbar-width: none; /* for Firefox */
overflow-y: scroll;
}
.links-scrollable::-webkit-scrollbar {
display: none; /* for Chrome, Safari, and Opera */
}
.fixturtle {
/* I suffer for my art */
transform: rotate(180deg); display: inline-block;
}
.prototype {
font-family: 'Roboto Mono', monospace; margin-bottom: 0.1em; font-weight: bolder;
}
.short {
font-family: 'Roboto', sans-serif; margin-bottom: 0.75em;
}
.description {
font-family: 'Roboto', sans-serif; font-size: smaller; letter-spacing: -0.05em;
}
</style>
<script>
function scrollLinksToTop() {
document.getElementById("links-top").scrollIntoView()
}
</script>
</head>
<body onload="scrollLinksToTop()">
<div class="links"><div class="links-scrollable">
<span class="section"><a href="#crow" id="crow-link">Crow</a></span>
<span class="section"><a href="#wslashtape" id="wslashtape-link">W/tape</a></span>
<span class="section"><a href="#wslashsynth" id="wslashsynth-link">W/synth</a></span>
<span class="section"><a href="#wslashdelay" id="wslashdelay-link">W/delay</a></span>
<span class="section"><a href="#disting" id="disting-link">Disting</a></span>
<span class="section"><a href="#telex_o" id="telex_o-link">TXo</a></span>
<span class="section"><a href="#telex_i" id="telex_i-link">TXi</a></span>
<span class="section"><a href="#matrixarchate" id="matrixarchate-link">Matrix</a></span>
<span class="section"><a href="#fader" id="fader-link">Fader</a></span>
<span class="section"><a href="#er301" id="er301-link">ER-301</a></span>
<span class="section"><a href="#wslash" id="wslash-link">W/</a></span>
<span class="section"><a href="#justfriends" id="justfriends-link">Friends</a></span>
<span class="section"><a href="#orca" id="orca-link">Orca</a></span>
<span class="section"><a href="#earthsea" id="earthsea-link">Earth</a></span>
<span class="section"><a href="#meadowphysics" id="meadowphysics-link">Meadow</a></span>
<span class="section"><a href="#whitewhale" id="whitewhale-link">Whale</a></span>
<span class="section"><a href="#ansible" id="ansible-link">Ansible</a></span>
<span class="section"><a href="#i2c" id="i2c-link">I2C</a></span>
<span class="section"><a href="#midi_in" id="midi_in-link">MIDI</a></span>
<span class="section"><a href="#grid" id="grid-link">Grid</a></span>
<span class="section"><a href="#turtle" id="turtle-link"><span class="fixturtle"> 🐢 </span></a></span>
<span class="section"><a href="#seed" id="seed-link">Seed</a></span>
<span class="section"><a href="#queue" id="queue-link">Queue</a></span>
<span class="section"><a href="#stack" id="stack-link">Stack</a></span>
<span class="section"><a href="#delay" id="delay-link">Del</a></span>
<span class="section"><a href="#metronome" id="metronome-link">Metro</a></span>
<span class="section"><a href="#maths" id="maths-link">Math</a></span>
<span class="section"><a href="#controlflow" id="controlflow-link">Flow</a></span>
<span class="section"><a href="#patterns" id="patterns-link">Pat</a></span>
<span class="section"><a href="#hardware" id="hardware-link">H/W</a></span>
<span class="section"><a href="#variables" id="variables-link">Var</a></span>
<span id="links-top"> </span></div></div>
<div class="content"><div class="content-scrollable">
<h1 id="variables">Variables</h1><div class="prototype">A</div>
<div class="short">get / set the variable <code>A</code>, default <code>1</code></div>
<div class="prototype">B</div>
<div class="short">get / set the variable <code>B</code>, default <code>2</code></div>
<div class="prototype">C</div>
<div class="short">get / set the variable <code>C</code>, default <code>3</code></div>
<div class="prototype">D</div>
<div class="short">get / set the variable <code>D</code>, default <code>4</code></div>
<div class="prototype">DRUNK</div>
<div class="short">changes by <code>-1</code>, <code>0</code>, or <code>1</code> upon each read saving its state,
setting will give it a new value for the next read</div>
<div class="prototype">DRUNK.MIN</div>
<div class="short">set the lower bound for <code>DRUNK</code>, default <code>0</code></div>
<div class="prototype">DRUNK.MAX</div>
<div class="short">set the upper bound for <code>DRUNK</code>, default <code>255</code></div>
<div class="prototype">DRUNK.WRAP</div>
<div class="short">should <code>DRUNK</code> wrap around when it reaches its bounds, default <code>0</code></div>
<div class="prototype">FLIP</div>
<div class="short">returns inverted state (<code>0</code> or <code>1</code>) on each read (also settable)</div>
<div class="prototype">I</div>
<div class="short">get / set the variable <code>I</code></div>
<div class="prototype">O</div>
<div class="short">auto-increments _after_ each access, can be set, starting value <code>0</code></div>
<div class="prototype">O.INC</div>
<div class="short">how much to increment <code>O</code> by on each invocation, default <code>1</code></div>
<div class="prototype">O.MIN</div>
<div class="short">the lower bound for <code>O</code>, default <code>0</code></div>
<div class="prototype">O.MAX</div>
<div class="short">the upper bound for <code>O</code>, default <code>63</code></div>
<div class="prototype">O.WRAP</div>
<div class="short">should <code>O</code> wrap when it reaches its bounds, default <code>1</code></div>
<div class="prototype">T</div>
<div class="short">get / set the variable <code>T</code>, typically used for time, default <code>0</code></div>
<div class="prototype">TIME</div>
<div class="short">timer value, counts up in ms., wraps after 32s, can be set</div>
<div class="prototype">TIME.ACT</div>
<div class="short">enable or disable timer counting, default <code>1</code></div>
<div class="prototype">LAST x</div>
<div class="short">get value in milliseconds since last script run time</div>
<div class="prototype">X</div>
<div class="short">get / set the variable <code>X</code>, default <code>0</code></div>
<div class="prototype">Y</div>
<div class="short">get / set the variable <code>Y</code>, default <code>0</code></div>
<div class="prototype">Z</div>
<div class="short">get / set the variable <code>Z</code>, default <code>0</code></div>
<div class="prototype">J</div>
<div class="short">get / set the variable <code>J</code></div>
<div class="prototype">K</div>
<div class="short">get / set the variable <code>K</code></div>
<h1 id="hardware">Hardware</h1><div class="prototype">CV x</div>
<div class="short">CV target value</div>
<div class="prototype">CV.OFF x</div>
<div class="short">CV offset added to output</div>
<div class="prototype">CV.SET x</div>
<div class="short">Set CV value</div>
<div class="prototype">CV.SLEW x</div>
<div class="short">Get/set the CV slew time in ms</div>
<div class="prototype">IN</div>
<div class="short">Get the value of IN jack (0-16383)</div>
<div class="prototype">IN.SCALE min max</div>
<div class="short">Set static scaling of the <code>IN</code> CV to between <code>min</code> and <code>max</code>.</div>
<div class="prototype">PARAM</div>
<div class="short">Get the value of PARAM knob (0-16383)</div>
<div class="prototype">PARAM.SCALE min max</div>
<div class="short">Set static scaling of the PARAM knob to between <code>min</code> and <code>max</code>.</div>
<div class="prototype">IN.CAL.MIN</div>
<div class="short">Reads the input CV and assigns the voltage to the zero point</div>
<div class="prototype">IN.CAL.MAX</div>
<div class="short">Reads the input CV and assigns the voltage to the max point</div>
<div class="prototype">IN.CAL.RESET</div>
<div class="short">Resets the input CV calibration</div>
<div class="prototype">PARAM.CAL.MIN</div>
<div class="short">Reads the Parameter Knob minimum position and assigns a zero value</div>
<div class="prototype">PARAM.CAL.MAX</div>
<div class="short">Reads the Parameter Knob maximum position and assigns the maximum point</div>
<div class="prototype">PARAM.CAL.RESET</div>
<div class="short">Resets the Parameter Knob calibration</div>
<div class="prototype">TR x</div>
<div class="short">Set trigger output x to y (0-1)</div>
<div class="prototype">TR.POL x</div>
<div class="short">Set polarity of trigger output x to y (0-1)</div>
<div class="prototype">TR.TIME x</div>
<div class="short">Set the pulse time of trigger x to y ms</div>
<div class="prototype">TR.TOG x</div>
<div class="short">Flip the state of trigger output x</div>
<div class="prototype">TR.PULSE x</div>
<div class="short">Pulse trigger output x</div>
<div class="prototype">MUTE x</div>
<div class="short">Disable trigger input x</div>
<div class="prototype">STATE x</div>
<div class="short">Read the current state of input x</div>
<div class="prototype">DEVICE.FLIP</div>
<div class="short">Flip the screen/inputs/outputs</div>
<div class="prototype">LIVE.OFF</div>
<div class="short">Show the default live mode screen</div>
<div class="prototype">LIVE.VARS</div>
<div class="short">Show variables in live mode</div>
<div class="prototype">LIVE.GRID</div>
<div class="short">Show grid visualizer in live mode</div>
<div class="prototype">LIVE.DASH x</div>
<div class="short">Show the dashboard with index <code>x</code></div>
<div class="prototype">PRINT x</div>
<div class="short">Print a value on a live mode dashboard or get the printed value</div>
<h1 id="patterns">Patterns</h1><div class="prototype">P.N</div>
<div class="short">get/set the pattern number for the working pattern, default <code>0</code></div>
<div class="prototype">P x</div>
<div class="short">get/set the value of the working pattern at index <code>x</code></div>
<div class="prototype">PN x y</div>
<div class="short">get/set the value of pattern <code>x</code> at index <code>y</code></div>
<div class="prototype">P.L</div>
<div class="short">get/set pattern length of the working pattern, non-destructive to data</div>
<div class="prototype">PN.L x</div>
<div class="short">get/set pattern length of pattern x. non-destructive to data</div>
<div class="prototype">P.WRAP</div>
<div class="short">when the working pattern reaches its bounds does it wrap (<code>0/1</code>), default <code>1</code> (enabled)</div>
<div class="prototype">PN.WRAP x</div>
<div class="short">when pattern <code>x</code> reaches its bounds does it wrap (<code>0/1</code>), default <code>1</code> (enabled)</div>
<div class="prototype">P.START</div>
<div class="short">get/set the start location of the working pattern, default <code>0</code></div>
<div class="prototype">PN.START x</div>
<div class="short">get/set the start location of pattern <code>x</code>, default <code>0</code></div>
<div class="prototype">P.END</div>
<div class="short">get/set the end location of the working pattern, default <code>63</code></div>
<div class="prototype">PN.END x</div>
<div class="short">get/set the end location of the pattern <code>x</code>, default <code>63</code></div>
<div class="prototype">P.I</div>
<div class="short">get/set index position for the working pattern.</div>
<div class="prototype">PN.I x</div>
<div class="short">get/set index position for pattern <code>x</code></div>
<div class="prototype">P.HERE</div>
<div class="short">get/set value at current index of working pattern</div>
<div class="prototype">PN.HERE x</div>
<div class="short">get/set value at current index of pattern <code>x</code></div>
<div class="prototype">P.NEXT</div>
<div class="short">increment index of working pattern then get/set value</div>
<div class="prototype">PN.NEXT x</div>
<div class="short">increment index of pattern <code>x</code> then get/set value</div>
<div class="prototype">P.PREV</div>
<div class="short">decrement index of working pattern then get/set value</div>
<div class="prototype">PN.PREV x</div>
<div class="short">decrement index of pattern <code>x</code> then get/set value</div>
<div class="prototype">P.INS x y</div>
<div class="short">insert value <code>y</code> at index <code>x</code> of working pattern, shift later values down, destructive to loop length</div>
<div class="prototype">PN.INS x y z</div>
<div class="short">insert value <code>z</code> at index <code>y</code> of pattern <code>x</code>, shift later values down, destructive to loop length</div>
<div class="prototype">P.RM x</div>
<div class="short">delete index <code>x</code> of working pattern, shift later values up, destructive to loop length</div>
<div class="prototype">PN.RM x y</div>
<div class="short">delete index <code>y</code> of pattern <code>x</code>, shift later values up, destructive to loop length</div>
<div class="prototype">P.PUSH x</div>
<div class="short">insert value <code>x</code> to the end of the working pattern (like a stack), destructive to loop length</div>
<div class="prototype">PN.PUSH x y</div>
<div class="short">insert value <code>y</code> to the end of pattern <code>x</code> (like a stack), destructive to loop length</div>
<div class="prototype">P.POP</div>
<div class="short">return and remove the value from the end of the working pattern (like a stack), destructive to loop length</div>
<div class="prototype">PN.POP x</div>
<div class="short">return and remove the value from the end of pattern <code>x</code> (like a stack), destructive to loop length</div>
<div class="prototype">P.MIN</div>
<div class="short">find the first minimum value in the pattern between the START and END for the working pattern and return its index</div>
<div class="prototype">PN.MIN x</div>
<div class="short">find the first minimum value in the pattern between the START and END for pattern <code>x</code> and return its index</div>
<div class="prototype">P.MAX</div>
<div class="short">find the first maximum value in the pattern between the START and END for the working pattern and return its index</div>
<div class="prototype">PN.MAX x</div>
<div class="short">find the first maximum value in the pattern between the START and END for pattern <code>x</code> and return its index</div>
<div class="prototype">P.SHUF</div>
<div class="short">shuffle the values in active pattern (between its START and END)</div>
<div class="prototype">PN.SHUF x</div>
<div class="short">shuffle the values in pattern <code>x</code> (between its START and END)</div>
<div class="prototype">P.ROT n</div>
<div class="short">rotate the values in the active pattern <code>n</code> steps (between its START and END, negative rotates backward)</div>
<div class="prototype">PN.ROT x n</div>
<div class="short">rotate the values in pattern <code>x</code> (between its START and END, negative rotates backward)</div>
<div class="prototype">P.REV</div>
<div class="short">reverse the values in the active pattern (between its START and END)</div>
<div class="prototype">PN.REV x</div>
<div class="short">reverse the values in pattern <code>x</code></div>
<div class="prototype">P.RND</div>
<div class="short">return a value randomly selected between the start and the end position</div>
<div class="prototype">PN.RND x</div>
<div class="short">return a value randomly selected between the start and the end position of pattern <code>x</code></div>
<div class="prototype">P.+ x y</div>
<div class="short">increase the value of the working pattern at index <code>x</code> by <code>y</code></div>
<div class="prototype">PN.+ x y z</div>
<div class="short">increase the value of pattern <code>x</code> at index <code>y</code> by <code>z</code></div>
<div class="prototype">P.- x y</div>
<div class="short">decrease the value of the working pattern at index <code>x</code> by <code>y</code></div>
<div class="prototype">PN.- x y z</div>
<div class="short">decrease the value of pattern <code>x</code> at index <code>y</code> by <code>z</code></div>
<div class="prototype">P.+W x y a b</div>
<div class="short">increase the value of the working pattern at index <code>x</code> by <code>y</code> and wrap it to <code>a</code>..<code>b</code> range</div>
<div class="prototype">PN.+W x y z a b</div>
<div class="short">increase the value of pattern <code>x</code> at index <code>y</code> by <code>z</code> and wrap it to <code>a</code>..<code>b</code> range</div>
<div class="prototype">P.-W x y a b</div>
<div class="short">decrease the value of the working pattern at index <code>x</code> by <code>y</code> and wrap it to <code>a</code>..<code>b</code> range</div>
<div class="prototype">PN.-W x y z a b</div>
<div class="short">decrease the value of pattern <code>x</code> at index <code>y</code> by <code>z</code> and wrap it to <code>a</code>..<code>b</code> range</div>
<div class="prototype">P.MAP: ...</div>
<div class="short">apply the 'function' to each value in the active pattern, <code>I</code> takes each pattern value</div>
<div class="prototype">PN.MAP x: ...</div>
<div class="short">apply the 'function' to each value in pattern <code>x</code>, <code>I</code> takes each pattern value</div>
<h1 id="controlflow">Control Flow</h1><div class="prototype">IF x: ...</div>
<div class="short">if <code>x</code> is not zero execute command</div>
<div class="prototype">ELIF x: ...</div>
<div class="short">if all previous <code>IF</code> / <code>ELIF</code> fail, and <code>x</code> is not zero, execute command</div>
<div class="prototype">ELSE: ...</div>
<div class="short">if all previous <code>IF</code> / <code>ELIF</code> fail, excute command</div>
<div class="prototype">L x y: ...</div>
<div class="short">run the command sequentially with <code>I</code> values from <code>x</code> to <code>y</code></div>
<div class="prototype">W x: ...</div>
<div class="short">run the command while condition x is true</div>
<div class="prototype">EVERY x: ...</div>
<div class="short">run the command every <code>x</code> times the command is called</div>
<div class="prototype">SKIP x: ...</div>
<div class="short">run the command every time except the <code>x</code>th time.</div>
<div class="prototype">OTHER: ...</div>
<div class="short">runs the command when the previous <code>EVERY</code>/<code>SKIP</code> did not run its command.</div>
<div class="prototype">SYNC x</div>
<div class="short">synchronizes _all_ <code>EVERY</code> and <code>SKIP</code> counters to offset <code>x</code>.</div>
<div class="prototype">PROB x: ...</div>
<div class="short">potentially execute command with probability <code>x</code> (0-100)</div>
<div class="prototype">SCRIPT</div>
<div class="short">get current script number, or execute script <code>x</code> (1-10), recursion allowed</div>
<div class="prototype">SCRIPT.POL x</div>
<div class="short">get script x trigger polarity, or set polarity p (1 rising edge, 2 falling, 3 both)</div>
<div class="prototype">SCENE</div>
<div class="short">get the current scene number, or load scene <code>x</code> (0-31)</div>
<div class="prototype">SCENE.G x</div>
<div class="short">load scene <code>x</code> (0-31) without loading grid control states</div>
<div class="prototype">SCENE.P x</div>
<div class="short">load scene <code>x</code> (0-31) without loading pattern state</div>
<div class="prototype">KILL</div>
<div class="short">clears stack, clears delays, cancels pulses, cancels slews, disables metronome</div>
<div class="prototype">BREAK</div>
<div class="short">halts execution of the current script</div>
<div class="prototype">INIT</div>
<div class="short">clears all state data</div>
<div class="prototype">INIT.CV x</div>
<div class="short">clears all parameters on CV associated with output x</div>
<div class="prototype">INIT.CV.ALL</div>
<div class="short">clears all parameters on all CV's</div>
<div class="prototype">INIT.DATA</div>
<div class="short">clears all data held in all variables</div>
<div class="prototype">INIT.P x</div>
<div class="short">clears pattern associated with pattern number x</div>
<div class="prototype">INIT.P.ALL</div>
<div class="short">clears all patterns</div>
<div class="prototype">INIT.SCENE</div>
<div class="short">loads a blank scene</div>
<div class="prototype">INIT.SCRIPT x</div>
<div class="short">clear script number x</div>
<div class="prototype">INIT.SCRIPT.ALL</div>
<div class="short">clear all scripts</div>
<div class="prototype">INIT.TIME x</div>
<div class="short">clear time on trigger x</div>
<div class="prototype">INIT.TR x</div>
<div class="short">clear all parameters on trigger associated with TR x</div>
<div class="prototype">INIT.TR.ALL</div>
<div class="short">clear all triggers</div>
<h1 id="maths">Math</h1><div class="prototype">ADD x y</div>
<div class="short">add <code>x</code> and <code>y</code> together</div>
<div class="prototype">SUB x y</div>
<div class="short">subtract <code>y</code> from <code>x</code></div>
<div class="prototype">MUL x y</div>
<div class="short">multiply <code>x</code> and <code>y</code> together</div>
<div class="prototype">DIV x y</div>
<div class="short">divide <code>x</code> by <code>y</code></div>
<div class="prototype">MOD x y</div>
<div class="short">find the remainder after division of <code>x</code> by <code>y</code></div>
<div class="prototype">RAND x</div>
<div class="short">generate a random number between <code>0</code> and <code>x</code> inclusive</div>
<div class="prototype">RRAND x y</div>
<div class="short">generate a random number between <code>x</code> and <code>y</code> inclusive</div>
<div class="prototype">TOSS</div>
<div class="short">randomly return <code>0</code> or <code>1</code></div>
<div class="prototype">? x y z</div>
<div class="short">if condition <code>x</code> is true return <code>y</code>, otherwise return <code>z</code></div>
<div class="prototype">MIN x y</div>
<div class="short">return the minimum of <code>x</code> and <code>y</code></div>
<div class="prototype">MAX x y</div>
<div class="short">return the maximum of <code>x</code> and <code>y</code></div>
<div class="prototype">LIM x y z</div>
<div class="short">limit the value <code>x</code> to the range <code>y</code> to <code>z</code> inclusive</div>
<div class="prototype">WRAP x y z</div>
<div class="short">limit the value <code>x</code> to the range <code>y</code> to <code>z</code> inclusive, but with wrapping</div>
<div class="prototype">QT x y</div>
<div class="short">round <code>x</code> to the closest multiple of <code>y</code> (quantise)</div>
<div class="prototype">QT.S x r s</div>
<div class="short">quantize 1V/OCT signal <code>x</code> to scale <code>s</code> (0-8, reference N.S scales) with root 1V/OCT pitch <code>r</code></div>
<div class="prototype">QT.CS x r s d c</div>
<div class="short">quantize 1V/OCT signal <code>x</code> to chord <code>c</code> (1-7) from scale <code>s</code> (0-8, reference N.S scales) at degree <code>d</code> (1-7) with root 1V/OCT pitch <code>r</code></div>
<div class="prototype">QT.B x</div>
<div class="short">quantize 1V/OCT signal <code>x</code> to scale defined by <code>N.B</code></div>
<div class="prototype">QT.BX x i</div>
<div class="short">quantize 1V/OCT signal <code>x</code> to scale defined by <code>N.BX</code> in scale index <code>i</code></div>
<div class="prototype">AVG x y</div>
<div class="short">the average of <code>x</code> and <code>y</code></div>
<div class="prototype">EQ x y</div>
<div class="short">does <code>x</code> equal <code>y</code></div>
<div class="prototype">NE x y</div>
<div class="short"><code>x</code> is not equal to <code>y</code></div>
<div class="prototype">LT x y</div>
<div class="short"><code>x</code> is less than <code>y</code></div>
<div class="prototype">GT x y</div>
<div class="short"><code>x</code> is greater than <code>y</code></div>
<div class="prototype">LTE x y</div>
<div class="short"><code>x</code> is less than or equal to <code>y</code></div>
<div class="prototype">GTE x y</div>
<div class="short"><code>x</code> is greater than or equal to <code>y</code></div>
<div class="prototype">INR l x h</div>
<div class="short"><code>x</code> is greater than <code>l</code> and less than <code>h</code> (within range)</div>
<div class="prototype">OUTR l x h</div>
<div class="short"><code>x</code> is less than <code>l</code> or greater than <code>h</code> (out of range)</div>
<div class="prototype">INRI l x h</div>
<div class="short"><code>x</code> is greater than or equal to <code>l</code> and less than or equal to <code>h</code> (within range, inclusive)</div>
<div class="prototype">OUTRI l x h</div>
<div class="short"><code>x</code> is less than or equal to <code>l</code> or greater than or equal to <code>h</code> (out of range, inclusive)</div>
<div class="prototype">EZ x</div>
<div class="short"><code>x</code> is <code>0</code>, equivalent to logical NOT</div>
<div class="prototype">NZ x</div>
<div class="short"><code>x</code> is not <code>0</code></div>
<div class="prototype">LSH x y</div>
<div class="short">left shift <code>x</code> by <code>y</code> bits, in effect multiply <code>x</code> by <code>2</code> to the power of <code>y</code></div>
<div class="prototype">RSH x y</div>
<div class="short">right shift <code>x</code> by <code>y</code> bits, in effect divide <code>x</code> by <code>2</code> to the power of <code>y</code></div>
<div class="prototype">LROT x y</div>
<div class="short">circular left shift <code>x</code> by <code>y</code> bits, wrapping around when bits fall off the end</div>
<div class="prototype">RROT x y</div>
<div class="short">circular right shift <code>x</code> by <code>y</code> bits, wrapping around when bits fall off the end</div>
<div class="prototype">| x y</div>
<div class="short">bitwise or <code>x</code> | <code>y</code></div>
<div class="prototype">& x y</div>
<div class="short">bitwise and <code>x</code> & <code>y</code></div>
<div class="prototype">^ x y</div>
<div class="short">bitwise xor <code>x</code> ^ <code>y</code></div>
<div class="prototype">~ x</div>
<div class="short">bitwise not, i.e.: inversion of <code>x</code></div>
<div class="prototype">BSET x y</div>
<div class="short">set bit <code>y</code> in value <code>x</code></div>
<div class="prototype">BGET x y</div>
<div class="short">get bit <code>y</code> in value <code>x</code></div>
<div class="prototype">BCLR x y</div>
<div class="short">clear bit <code>y</code> in value <code>x</code></div>
<div class="prototype">BTOG x y</div>
<div class="short">toggle bit <code>y</code> in value <code>x</code></div>
<div class="prototype">BREV x</div>
<div class="short">reverse bit order in value <code>x</code></div>
<div class="prototype">ABS x</div>
<div class="short">absolute value of <code>x</code></div>
<div class="prototype">AND x y</div>
<div class="short">logical AND of <code>x</code> and <code>y</code></div>
<div class="prototype">AND3 x y z</div>
<div class="short">logical AND of <code>x</code>, <code>y</code> and <code>z</code></div>
<div class="prototype">AND4 x y z a</div>
<div class="short">logical AND of <code>x</code>, <code>y</code>, <code>z</code> and <code>a</code></div>
<div class="prototype">OR x y</div>
<div class="short">logical OR of <code>x</code> and <code>y</code></div>
<div class="prototype">OR3 x y z</div>
<div class="short">logical OR of <code>x</code>, <code>y</code> and <code>z</code></div>
<div class="prototype">OR4 x y z a</div>
<div class="short">logical OR of <code>x</code>, <code>y</code>, <code>z</code> and <code>a</code></div>
<div class="prototype">JI x y</div>
<div class="short">just intonation helper, precision ratio divider normalised to 1V</div>
<div class="prototype">SCALE a b x y i</div>
<div class="short">scale <code>i</code> from range <code>a</code> to <code>b</code> to range <code>x</code> to <code>y</code>, i.e. <code>i * (y - x) / (b - a)</code></div>
<div class="prototype">ER f l i</div>
<div class="short">Euclidean rhythm, <code>f</code> is fill (<code>1-32</code>), <code>l</code> is length (<code>1-32</code>) and <code>i</code> is step (any value), returns <code>0</code> or <code>1</code></div>
<div class="prototype">NR p m f s</div>
<div class="short">Numeric Repeater, <code>p</code> is prime pattern (<code>0-31</code>), <code>m</code> is & mask (<code>0-3</code>), <code>f</code> is variation factor (<code>0-16</code>) and <code>s</code> is step (<code>0-15</code>), returns <code>0</code> or <code>1</code></div>
<div class="prototype">BPM x</div>
<div class="short">milliseconds per beat in BPM <code>x</code></div>
<div class="prototype">N x</div>
<div class="short">converts an equal temperament note number to a value usable by the CV outputs (<code>x</code> in the range <code>-127</code> to <code>127</code>)</div>
<div class="prototype">VN x</div>
<div class="short">converts 1V/OCT value <code>x</code> to an equal temperament note number</div>
<div class="prototype">HZ x</div>
<div class="short">converts 1V/OCT value <code>x</code> to Hz/Volt value, useful for controlling non-euro synths like Korg MS-20</div>
<div class="prototype">N.B d</div>
<div class="short">get degree <code>d</code> of scale/set scale root to <code>r</code>, scale to <code>s</code>, <code>s</code> is either bit mask (<code>s</code> >= 1) or scale preset (<code>s</code> < 1)</div>
<div class="prototype">N.BX i d</div>
<div class="short">multi-index version of N.B, scale at <code>i</code> (index) 0 is shared with N.B</div>
<div class="prototype">N.S r s d</div>
<div class="short">Note Scale operator, <code>r</code> is the root note (<code>0-127</code>), <code>s</code> is the scale (<code>0-8</code>) and <code>d</code> is the degree (<code>1-7</code>), returns a value from the <code>N</code> table.</div>
<div class="prototype">N.C r c d</div>
<div class="short">Note Chord operator, <code>r</code> is the root note (<code>0-127</code>), <code>c</code> is the chord (<code>0-12</code>) and <code>d</code> is the degree (<code>0-3</code>), returns a value from the <code>N</code> table.</div>
<div class="prototype">N.CS r s d c</div>
<div class="short">Note Chord Scale operator, <code>r</code> is the root note (<code>0-127</code>), <code>s</code> is the scale (<code>0-8</code>), <code>d</code> is the scale degree (<code>1-7</code>) and <code>c</code> is the chord component (<code>0-3</code>), returns a value from the <code>N</code> table.</div>
<div class="prototype">V x</div>
<div class="short">converts a voltage to a value usable by the CV outputs (<code>x</code> between <code>0</code> and <code>10</code>)</div>
<div class="prototype">VV x</div>
<div class="short">converts a voltage to a value usable by the CV outputs (<code>x</code> between <code>0</code> and <code>1000</code>, <code>100</code> represents 1V)</div>
<div class="prototype">EXP x</div>
<div class="short">exponentiation table lookup. <code>0-16383</code> range (V <code>0-10</code>)</div>
<div class="prototype">SGN x</div>
<div class="short">sign function: 1 for positive, -1 for negative, 0 for 0</div>
<div class="prototype">CHAOS x</div>
<div class="short">get next value from chaos generator, or set the current value</div>
<div class="prototype">CHAOS.R x</div>
<div class="short">get or set the <code>R</code> parameter for the <code>CHAOS</code> generator</div>
<div class="prototype">CHAOS.ALG x</div>
<div class="short">get or set the algorithm for the <code>CHAOS</code> generator. 0 = LOGISTIC, 1 = CUBIC, 2 = HENON, 3 = CELLULAR</div>
<div class="prototype">R</div>
<div class="short">get a random number/set <code>R.MIN</code> and <code>R.MAX</code> to same value <code>x</code> (effectively allowing <code>R</code> to be used as a global variable)</div>
<div class="prototype">R.MIN x</div>
<div class="short">set the lower end of the range from -32768 – 32767, default: 0</div>
<div class="prototype">R.MAX x</div>
<div class="short">set the upper end of the range from -32768 – 32767, default: 16383</div>
<h1 id="metronome">Metronome</h1><div class="prototype">M</div>
<div class="short">get/set metronome interval to <code>x</code> (in ms), default <code>1000</code>, minimum value <code>25</code></div>
<div class="prototype">M!</div>
<div class="short">get/set metronome to experimental interval <code>x</code> (in ms), minimum value <code>2</code></div>
<div class="prototype">M.ACT</div>
<div class="short">get/set metronome activation to <code>x</code> (<code>0/1</code>), default <code>1</code> (enabled)</div>
<div class="prototype">M.RESET</div>
<div class="short">hard reset metronome count without triggering</div>
<h1 id="delay">Delay</h1><div class="prototype">DEL x: ...</div>
<div class="short">Delay command by <code>x</code> ms</div>
<div class="prototype">DEL.CLR</div>
<div class="short">Clear the delay buffer</div>
<div class="prototype">DEL.X x delay_time: ...</div>
<div class="short">Delay <code>x</code> commands at <code>delay_time</code> ms intervals</div>
<div class="prototype">DEL.R x delay_time: ...</div>
<div class="short">Trigger the command following the colon once immediately, and delay <code>x - 1</code> commands at <code>delay_time</code> ms intervals</div>
<div class="prototype">DEL.G x delay_time num denom: ...</div>
<div class="short">Trigger the command once immediately and <code>x - 1</code> times at ms intervals of <code>delay_time * (num/denom)^n</code> where n ranges from 0 to <code>x - 1</code>.</div>
<div class="prototype">DEL.B delay_time bitmask: ...</div>
<div class="short">Trigger the command up to 16 times at intervals of <code>delay_time</code> ms. Active intervals set in 16-bit <code>bitmask</code>, LSB = immediate.</div>
<h1 id="stack">Stack</h1><div class="prototype">S: ...</div>
<div class="short">Place a command onto the stack</div>
<div class="prototype">S.CLR</div>
<div class="short">Clear all entries in the stack</div>
<div class="prototype">S.ALL</div>
<div class="short">Execute all entries in the stack</div>
<div class="prototype">S.POP</div>
<div class="short">Execute the most recent entry</div>
<div class="prototype">S.L</div>
<div class="short">Get the length of the stack</div>
<h1 id="queue">Queue</h1><div class="prototype">Q</div>
<div class="short">Modify the queue entries</div>
<div class="prototype">Q.N</div>
<div class="short">The queue length</div>
<div class="prototype">Q.AVG</div>
<div class="short">Return the average of the queue</div>
<div class="prototype">Q.CLR</div>
<div class="short">Clear queue</div>
<div class="prototype">Q.GRW</div>
<div class="short">Get/set grow state</div>
<div class="prototype">Q.SUM</div>
<div class="short">Get sum of elements</div>
<div class="prototype">Q.MIN</div>
<div class="short">Get/set minimum value</div>
<div class="prototype">Q.MAX</div>
<div class="short">Get/set maximum value</div>
<div class="prototype">Q.RND</div>
<div class="short">Get random element/randomize elements</div>
<div class="prototype">Q.SRT</div>
<div class="short">Sort all or part of queue</div>
<div class="prototype">Q.REV</div>
<div class="short">Reverse queue</div>
<div class="prototype">Q.SH</div>
<div class="short">Shift elements in queue</div>
<div class="prototype">Q.ADD x</div>
<div class="short">Perform addition on elements in queue</div>
<div class="prototype">Q.SUB x</div>
<div class="short">Perform subtraction on elements in queue</div>
<div class="prototype">Q.MUL x</div>
<div class="short">Perform multiplication on elements in queue</div>
<div class="prototype">Q.DIV x</div>
<div class="short">Perform division on elements in queue</div>
<div class="prototype">Q.MOD x</div>
<div class="short">Perform module (<code>%</code>) on elements in queue</div>
<div class="prototype">Q.I i</div>
<div class="short">Get/set value of elements at index</div>
<div class="prototype">Q.2P</div>
<div class="short">Copy queue to current pattern/copy queue to pattern at index <code>i</code></div>
<div class="prototype">Q.P2</div>
<div class="short">Copy current pattern to queue/copy pattern at index <code>i</code> to queue</div>
<h1 id="seed">Seed</h1><div class="prototype">SEED</div>
<div class="short">get / set the random number generator seed for all <code>SEED</code> ops</div>
<div class="prototype">RAND.SEED</div>
<div class="short">get / set the random number generator seed for <code>R</code>, <code>RRAND</code>, and <code>RAND</code> ops</div>
<div class="prototype">TOSS.SEED</div>
<div class="short">get / set the random number generator seed for the <code>TOSS</code> op</div>
<div class="prototype">PROB.SEED</div>
<div class="short">get / set the random number generator seed for the <code>PROB</code> mod</div>
<div class="prototype">DRUNK.SEED</div>
<div class="short">get / set the random number generator seed for the <code>DRUNK</code> op</div>
<div class="prototype">P.SEED</div>
<div class="short">get / set the random number generator seed for the <code>P.RND</code> and <code>PN.RND</code> ops</div>
<h1 id="turtle">Turtle 🐢</h1><div class="prototype">@</div>
<div class="short">get or set the current pattern value under the turtle</div>
<div class="prototype">@X</div>
<div class="short">get the turtle X coordinate, or set it to x</div>
<div class="prototype">@Y</div>
<div class="short">get the turtle Y coordinate, or set it to x</div>
<div class="prototype">@MOVE x y</div>
<div class="short">move the turtle x cells in the X axis and y cells in the Y axis</div>
<div class="prototype">@F x1 y1 x2 y2</div>
<div class="short">set the turtle's fence to corners x1,y1 and x2,y2</div>
<div class="prototype">@FX1</div>
<div class="short">get the left fence line or set it to x</div>
<div class="prototype">@FX2</div>
<div class="short">get the right fence line or set it to x</div>
<div class="prototype">@FY1</div>
<div class="short">get the top fence line or set it to x</div>
<div class="prototype">@FY2</div>
<div class="short">get the bottom fence line or set it to x</div>
<div class="prototype">@SPEED</div>
<div class="short">get the speed of the turtle's @STEP in cells per step or set it to x</div>
<div class="prototype">@DIR</div>
<div class="short">get the direction of the turtle's @STEP in degrees or set it to x</div>
<div class="prototype">@STEP</div>
<div class="short">move <code>@SPEED</code>/100 cells forward in <code>@DIR</code>, triggering <code>@SCRIPT</code> on cell change</div>
<div class="prototype">@BUMP</div>
<div class="short">get whether the turtle fence mode is BUMP, or set it to BUMP with 1</div>
<div class="prototype">@WRAP</div>
<div class="short">get whether the turtle fence mode is WRAP, or set it to WRAP with 1</div>
<div class="prototype">@BOUNCE</div>
<div class="short">get whether the turtle fence mode is BOUNCE, or set it to BOUNCE with 1</div>
<div class="prototype">@SCRIPT</div>
<div class="short">get which script runs when the turtle changes cells, or set it to x</div>
<div class="prototype">@SHOW</div>
<div class="short">get whether the turtle is displayed on the TRACKER screen, or turn it on or off</div>
<h1 id="grid">Grid</h1><div class="prototype">G.RST</div>
<div class="short">full grid reset</div>
<div class="prototype">G.CLR</div>
<div class="short">clear all LEDs</div>
<div class="prototype">G.DIM level</div>
<div class="short">set dim level</div>
<div class="prototype">G.ROTATE x</div>
<div class="short">set grid rotation</div>
<div class="prototype">G.KEY x y action</div>
<div class="short">emulate grid press</div>
<div class="prototype">G.GRP</div>
<div class="short">get/set current group</div>
<div class="prototype">G.GRP.EN id</div>
<div class="short">enable/disable group or check if enabled</div>
<div class="prototype">G.GRP.RST id</div>
<div class="short">reset all group controls</div>
<div class="prototype">G.GRP.SW id</div>
<div class="short">switch groups</div>
<div class="prototype">G.GRP.SC id</div>
<div class="short">get/set group script</div>
<div class="prototype">G.GRPI</div>
<div class="short">get last group</div>
<div class="prototype">G.LED x y</div>
<div class="short">get/set LED</div>
<div class="prototype">G.LED.C x y</div>
<div class="short">clear LED</div>
<div class="prototype">G.REC x y w h fill border</div>
<div class="short">draw rectangle</div>
<div class="prototype">G.RCT x1 y1 x2 y2 fill border</div>
<div class="short">draw rectangle</div>
<div class="prototype">G.BTN id x y w h type level script</div>
<div class="short">initialize button</div>
<div class="prototype">G.GBT group id x y w h type level script</div>
<div class="short">initialize button in group</div>
<div class="prototype">G.BTX id x y w h type level script columns rows</div>
<div class="short">initialize multiple buttons</div>
<div class="prototype">G.GBX group id x y w h type level script columns rows</div>
<div class="short">initialize multiple buttons in group</div>
<div class="prototype">G.BTN.EN id</div>
<div class="short">enable/disable button or check if enabled</div>
<div class="prototype">G.BTN.X id</div>
<div class="short">get/set button x coordinate</div>
<div class="prototype">G.BTN.Y id</div>
<div class="short">get/set button y coordinate</div>
<div class="prototype">G.BTN.V id</div>
<div class="short">get/set button value</div>
<div class="prototype">G.BTN.L id</div>
<div class="short">get/set button level</div>
<div class="prototype">G.BTNI</div>
<div class="short">id of last pressed button</div>
<div class="prototype">G.BTNX</div>
<div class="short">get/set x of last pressed button</div>
<div class="prototype">G.BTNY</div>
<div class="short">get/set y of last pressed button</div>
<div class="prototype">G.BTNV</div>
<div class="short">get/set value of last pressed button</div>
<div class="prototype">G.BTNL</div>
<div class="short">get/set level of last pressed button</div>
<div class="prototype">G.BTN.SW id</div>
<div class="short">switch button</div>
<div class="prototype">G.BTN.PR id action</div>
<div class="short">emulate button press/release</div>
<div class="prototype">G.GBTN.V group value</div>
<div class="short">set value for group buttons</div>
<div class="prototype">G.GBTN.L group odd_level even_level</div>
<div class="short">set level for group buttons</div>
<div class="prototype">G.GBTN.C group</div>
<div class="short">get count of currently pressed</div>
<div class="prototype">G.GBTN.I group index</div>
<div class="short">get id of pressed button</div>
<div class="prototype">G.GBTN.W group</div>
<div class="short">get button block width</div>
<div class="prototype">G.GBTN.H group</div>
<div class="short">get button block height</div>
<div class="prototype">G.GBTN.X1 group</div>
<div class="short">get leftmost pressed x</div>
<div class="prototype">G.GBTN.X2 group</div>
<div class="short">get rightmost pressed x</div>
<div class="prototype">G.GBTN.Y1 group</div>
<div class="short">get highest pressed y</div>
<div class="prototype">G.GBTN.Y2 group</div>
<div class="short">get lowest pressed y</div>
<div class="prototype">G.FDR id x y w h type level script</div>
<div class="short">initialize fader</div>
<div class="prototype">G.GFD grp id x y w h type level script</div>
<div class="short">initialize fader in group</div>
<div class="prototype">G.FDX id x y w h type level script columns rows</div>
<div class="short">initialize multiple faders</div>
<div class="prototype">G.GFX group id x y w h type level script columns rows</div>
<div class="short">initialize multiple faders in group</div>
<div class="prototype">G.FDR.EN id</div>
<div class="short">enable/disable fader or check if enabled</div>
<div class="prototype">G.FDR.X id</div>
<div class="short">get/set fader x coordinate</div>
<div class="prototype">G.FDR.Y id</div>
<div class="short">get/set fader y coordinate</div>
<div class="prototype">G.FDR.N id</div>
<div class="short">get/set fader value</div>
<div class="prototype">G.FDR.V id</div>
<div class="short">get/set scaled fader value</div>
<div class="prototype">G.FDR.L id</div>
<div class="short">get/set fader level</div>
<div class="prototype">G.FDRI</div>
<div class="short">id of last pressed fader</div>
<div class="prototype">G.FDRX</div>
<div class="short">get/set x of last pressed fader</div>
<div class="prototype">G.FDRY</div>
<div class="short">get/set y of last pressed fader</div>
<div class="prototype">G.FDRN</div>
<div class="short">get/set value of last pressed fader</div>
<div class="prototype">G.FDRV</div>
<div class="short">get/set scaled value of last pressed fader</div>
<div class="prototype">G.FDRL</div>
<div class="short">get/set level of last pressed fader</div>
<div class="prototype">G.FDR.PR id value</div>
<div class="short">emulate fader press</div>
<div class="prototype">G.GFDR.N group value</div>
<div class="short">set value for group faders</div>
<div class="prototype">G.GFDR.V group value</div>
<div class="short">set scaled value for group faders</div>
<div class="prototype">G.GFDR.L group odd_level even_level</div>
<div class="short">set level for group faders</div>
<div class="prototype">G.GFDR.RN group min max</div>
<div class="short">set range for group faders</div>
<h1 id="midi_in">MIDI In</h1><div class="prototype">MI.$ x</div>
<div class="short">assign MIDI event type <code>x</code> to script <code>y</code></div>
<div class="prototype">MI.LE</div>
<div class="short">get the latest event type</div>
<div class="prototype">MI.LCH</div>
<div class="short">get the latest channel (1..16)</div>
<div class="prototype">MI.LN</div>
<div class="short">get the latest Note On (0..127)</div>
<div class="prototype">MI.LNV</div>
<div class="short">get the latest Note On scaled to teletype range (shortcut for <code>N MI.LN</code>)</div>
<div class="prototype">MI.LV</div>
<div class="short">get the latest velocity (0..127)</div>
<div class="prototype">MI.LVV</div>
<div class="short">get the latest velocity scaled to 0..16383 range (0..+10V)</div>
<div class="prototype">MI.LO</div>
<div class="short">get the latest Note Off (0..127)</div>
<div class="prototype">MI.LC</div>
<div class="short">get the latest controller number (0..127)</div>
<div class="prototype">MI.LCC</div>
<div class="short">get the latest controller value (0..127)</div>
<div class="prototype">MI.LCCV</div>
<div class="short">get the latest controller value scaled to 0..16383 range (0..+10V)</div>
<div class="prototype">MI.NL</div>
<div class="short">get the number of Note On events</div>
<div class="prototype">MI.NCH</div>
<div class="short">get the Note On event channel (1..16) at index specified by variable <code>I</code></div>
<div class="prototype">MI.N</div>
<div class="short">get the Note On (0..127) at index specified by variable <code>I</code></div>
<div class="prototype">MI.NV</div>
<div class="short">get the Note On scaled to 0..+10V range at index specified by variable <code>I</code></div>
<div class="prototype">MI.V</div>
<div class="short">get the velocity (0..127) at index specified by variable <code>I</code></div>
<div class="prototype">MI.VV</div>
<div class="short">get the velocity scaled to 0..10V range at index specified by variable <code>I</code></div>
<div class="prototype">MI.OL</div>
<div class="short">get the number of Note Off events</div>
<div class="prototype">MI.OCH</div>
<div class="short">get the Note Off event channel (1..16) at index specified by variable <code>I</code></div>
<div class="prototype">MI.O</div>
<div class="short">get the Note Off (0..127) at index specified by variable <code>I</code></div>
<div class="prototype">MI.CL</div>
<div class="short">get the number of controller events</div>
<div class="prototype">MI.CCH</div>
<div class="short">get the controller event channel (1..16) at index specified by variable <code>I</code></div>
<div class="prototype">MI.C</div>
<div class="short">get the controller number (0..127) at index specified by variable <code>I</code></div>
<div class="prototype">MI.CC</div>
<div class="short">get the controller value (0..127) at index specified by variable <code>I</code></div>
<div class="prototype">MI.CCV</div>
<div class="short">get the controller value scaled to 0..+10V range at index specified by variable <code>I</code></div>
<div class="prototype">MI.CLKD</div>
<div class="short">set clock divider to <code>x</code> (1-24) or get the current divider</div>
<div class="prototype">MI.CLKR</div>
<div class="short">reset clock counter</div>
<h1 id="i2c">Generic I2C</h1><div class="prototype">IIA</div>
<div class="short">Set I2C address or get the currently selected address</div>
<div class="prototype">IIS cmd</div>
<div class="short">Execute the specified command</div>
<div class="prototype">IIS1 cmd value</div>
<div class="short">Execute the specified command with 1 parameter</div>
<div class="prototype">IIS2 cmd value1 value2</div>
<div class="short">Execute the specified command with 2 parameters</div>
<div class="prototype">IIS3 cmd value1 value2 value3</div>
<div class="short">Execute the specified command with 3 parameters</div>
<div class="prototype">IISB1 cmd value</div>
<div class="short">Execute the specified command with 1 byte parameter</div>
<div class="prototype">IISB2 cmd value1 value2</div>
<div class="short">Execute the specified command with 2 byte parameters</div>
<div class="prototype">IISB3 cmd value1 value2 value3</div>
<div class="short">Execute the specified command with 3 byte parameters</div>
<div class="prototype">IIQ cmd</div>
<div class="short">Execute the specified query and get a value back</div>
<div class="prototype">IIQ1 cmd value</div>
<div class="short">Execute the specified query with 1 parameter and get a value back</div>
<div class="prototype">IIQ2 cmd value1 value2</div>
<div class="short">Execute the specified query with 2 parameters and get a value back</div>
<div class="prototype">IIQ3 cmd value1 value2 value3</div>
<div class="short">Execute the specified query with 3 parameters and get a value back</div>
<div class="prototype">IIQB1 cmd value</div>
<div class="short">Execute the specified query with 1 byte parameter and get a value back</div>
<div class="prototype">IIQB2 cmd value1 value2</div>
<div class="short">Execute the specified query with 2 byte parameters and get a value back</div>
<div class="prototype">IIQB3 cmd value1 value2 value3</div>
<div class="short">Execute the specified query with 3 byte parameters and get a value back</div>
<div class="prototype">IIB cmd</div>
<div class="short">Execute the specified query and get a byte value back</div>
<div class="prototype">IIB1 cmd value</div>
<div class="short">Execute the specified query with 1 parameter and get a byte value back</div>
<div class="prototype">IIB2 cmd value1 value2</div>
<div class="short">Execute the specified query with 2 parameters and get a byte value back</div>
<div class="prototype">IIB3 cmd value1 value2 value3</div>
<div class="short">Execute the specified query with 3 parameters and get a byte value back</div>
<div class="prototype">IIBB1 cmd value</div>
<div class="short">Execute the specified query with 1 byte parameter and get a byte value back</div>
<div class="prototype">IIBB2 cmd value1 value2</div>
<div class="short">Execute the specified query with 2 byte parameters and get a byte value back</div>
<div class="prototype">IIBB3 cmd value1 value2 value3</div>
<div class="short">Execute the specified query with 3 byte parameters and get a byte value back</div>
<h1 id="ansible">Ansible</h1><div class="prototype">ANS.G.LED x y</div>
<div class="short">get grid LED buffer at position <code>x</code>, <code>y</code></div>
<div class="prototype">ANS.G x y</div>
<div class="short">get/set grid key on/off state (<code>z</code>) at position <code>x</code>, <code>y</code></div>
<div class="prototype">ANS.G.P x y</div>
<div class="short">simulate grid key press at position (<code>x</code>, <code>y</code>)</div>
<div class="prototype">ANS.A.LED n x</div>
<div class="short">read arc LED buffer for ring <code>n</code>, LED <code>x</code> clockwise from north</div>
<div class="prototype">ANS.A</div>
<div class="short">send arc encoder event for ring <code>n</code>, delta <code>d</code></div>
<div class="prototype">ANS.APP</div>
<div class="short">get/set active app</div>
<div class="prototype">KR.PRE</div>
<div class="short">return current preset / load preset <code>x</code></div>
<div class="prototype">KR.PERIOD</div>
<div class="short">get/set internal clock period</div>
<div class="prototype">KR.PAT</div>
<div class="short">get/set current pattern</div>
<div class="prototype">KR.SCALE</div>
<div class="short">get/set current scale</div>
<div class="prototype">KR.POS x y</div>
<div class="short">get/set position <code>z</code> for track <code>z</code>, parameter <code>y</code></div>
<div class="prototype">KR.L.ST x y</div>
<div class="short">get loop start for track <code>x</code>, parameter <code>y</code> / set to <code>z</code></div>
<div class="prototype">KR.L.LEN x y</div>
<div class="short">get length of track <code>x</code>, parameter <code>y</code> / set to <code>z</code></div>
<div class="prototype">KR.RES x y</div>
<div class="short">reset position to loop start for track <code>x</code>, parameter <code>y</code></div>
<div class="prototype">KR.CV x </div>
<div class="short">get the current CV value for channel <code>x</code></div>
<div class="prototype">KR.MUTE x</div>
<div class="short">get/set mute state for channel <code>x</code> (<code>1</code> = muted, <code>0</code> = unmuted)</div>
<div class="prototype">KR.TMUTE x</div>
<div class="short">toggle mute state for channel <code>x</code></div>
<div class="prototype">KR.CLK x</div>
<div class="short">advance the clock for channel <code>x</code> (channel must have teletype clocking enabled)</div>
<div class="prototype">KR.PG</div>
<div class="short">get/set the active page</div>
<div class="prototype">KR.CUE</div>
<div class="short">get/set the cued pattern</div>
<div class="prototype">KR.DIR</div>
<div class="short">get/set the step direction</div>
<div class="prototype">KR.DUR x </div>
<div class="short">get the current duration value for channel <code>x</code></div>
<div class="prototype">ME.PRE</div>
<div class="short">return current preset / load preset <code>x</code></div>
<div class="prototype">ME.SCALE</div>
<div class="short">get/set current scale</div>
<div class="prototype">ME.PERIOD</div>
<div class="short">get/set internal clock period</div>
<div class="prototype">ME.STOP x</div>
<div class="short">stop channel <code>x</code> (<code>0</code> = all)</div>
<div class="prototype">ME.RES x</div>
<div class="short">reset channel <code>x</code> (<code>0</code> = all), also used as "start"</div>
<div class="prototype">ME.CV x</div>
<div class="short">get the current CV value for channel <code>x</code></div>
<div class="prototype">LV.PRE</div>
<div class="short">return current preset / load preset <code>x</code></div>
<div class="prototype">LV.RES x</div>
<div class="short">reset, <code>0</code> for soft reset (on next ext. clock), <code>1</code> for hard reset</div>
<div class="prototype">LV.POS</div>
<div class="short">get/set current position</div>
<div class="prototype">LV.L.ST</div>
<div class="short">get/set loop start</div>
<div class="prototype">LV.L.LEN</div>
<div class="short">get/set loop length</div>
<div class="prototype">LV.L.DIR</div>
<div class="short">get/set loop direction</div>
<div class="prototype">LV.CV x</div>
<div class="short">get the current CV value for channel <code>x</code></div>
<div class="prototype">CY.PRE</div>
<div class="short">return current preset / load preset <code>x</code></div>
<div class="prototype">CY.RES x</div>
<div class="short">reset channel <code>x</code> (<code>0</code> = all)</div>
<div class="prototype">CY.POS x</div>
<div class="short">get / set position of channel <code>x</code> (<code>x = 0</code> to set all), position between <code>0-255</code></div>
<div class="prototype">CY.REV x</div>
<div class="short">reverse channel <code>x</code> (<code>0</code> = all)</div>
<div class="prototype">CY.CV x</div>
<div class="short">get the current CV value for channel <code>x</code></div>
<div class="prototype">MID.SLEW t</div>
<div class="short">set pitch slew time in ms (applies to all allocation styles except FIXED)</div>
<div class="prototype">MID.SHIFT o</div>
<div class="short">shift pitch CV by standard Teletype pitch value (e.g. <code>N 6</code>, <code>V -1</code>, etc)</div>
<div class="prototype">ARP.HLD h</div>
<div class="short"><code>0</code> disables key hold mode, other values enable</div>
<div class="prototype">ARP.STY y</div>
<div class="short">set base arp style [0-7]</div>
<div class="prototype">ARP.GT v g</div>
<div class="short">set voice gate length [0-127], scaled/synced to course divisions of voice clock</div>
<div class="prototype">ARP.SLEW v t</div>
<div class="short">set voice slew time in ms</div>
<div class="prototype">ARP.RPT v n s</div>
<div class="short">set voice pattern repeat, <code>n</code> times [0-8], shifted by <code>s</code> semitones [-24, 24]</div>
<div class="prototype">ARP.DIV v d</div>
<div class="short">set voice clock divisor (euclidean length), range [1-32]</div>
<div class="prototype">ARP.FIL v f</div>
<div class="short">set voice euclidean fill, use 1 for straight clock division, range [1-32]</div>
<div class="prototype">ARP.ROT v r</div>
<div class="short">set voice euclidean rotation, range [-32, 32]</div>
<div class="prototype">ARP.ER v f d r</div>
<div class="short">set all euclidean rhythm</div>
<div class="prototype">ARP.RES v</div>
<div class="short">reset voice clock/pattern on next base clock tick</div>
<div class="prototype">ARP.SHIFT v o</div>
<div class="short">shift voice cv by standard tt pitch value (e.g. N 6, V -1, etc)</div>
<h1 id="whitewhale">Whitewhale</h1><div class="prototype">WW.PRESET x</div>
<div class="short">Recall preset (0-7)</div>
<div class="prototype">WW.POS x</div>
<div class="short">Cut to position (0-15)</div>
<div class="prototype">WW.SYNC x</div>
<div class="short">Cut to position (0-15) and hard-sync the clock (if clocked internally)</div>
<div class="prototype">WW.START x</div>
<div class="short">Set the loop start position (0-15)</div>
<div class="prototype">WW.END x</div>
<div class="short">Set the loop end position (0-15)</div>
<div class="prototype">WW.PMODE x</div>
<div class="short">Set the loop play mode (0-5)</div>
<div class="prototype">WW.PATTERN x</div>
<div class="short">Change pattern (0-15)</div>
<div class="prototype">WW.QPATTERN x</div>
<div class="short">Change pattern (0-15) after current pattern ends</div>
<div class="prototype">WW.MUTE1 x</div>
<div class="short">Mute trigger 1 (0 = on, 1 = mute)</div>
<div class="prototype">WW.MUTE2 x</div>
<div class="short">Mute trigger 2 (0 = on, 1 = mute)</div>
<div class="prototype">WW.MUTE3 x</div>
<div class="short">Mute trigger 3 (0 = on, 1 = mute)</div>
<div class="prototype">WW.MUTE4 x</div>
<div class="short">Mute trigger 4 (0 = on, 1 = mute)</div>
<div class="prototype">WW.MUTEA x</div>
<div class="short">Mute CV A (0 = on, 1 = mute)</div>
<div class="prototype">WW.MUTEB x</div>
<div class="short">Mute CV B (0 = on, 1 = mute)</div>
<h1 id="meadowphysics">Meadowphysics</h1><div class="prototype">MP.PRESET x</div>
<div class="short">set Meadowphysics to preset <code>x</code> (indexed from <code>0</code>)</div>
<div class="prototype">MP.RESET x</div>
<div class="short">reset countdown for channel <code>x</code> (<code>0</code> = all, <code>1-8</code> = individual channels)</div>
<div class="prototype">MP.STOP x</div>
<div class="short">reset channel <code>x</code> (<code>0</code> = all, <code>1-8</code> = individual channels)</div>
<h1 id="earthsea">Earthsea</h1><div class="prototype">ES.PRESET x</div>
<div class="short">Recall preset <code>x</code> (0-7)</div>
<div class="prototype">ES.MODE x</div>
<div class="short">Set pattern clock mode. (0=normal, 1=II clock)</div>
<div class="prototype">ES.CLOCK x</div>
<div class="short">If II clocked, next pattern event</div>
<div class="prototype">ES.RESET x</div>
<div class="short">Reset pattern to start (and start playing)</div>
<div class="prototype">ES.PATTERN x</div>
<div class="short">Select playing pattern (0-15)</div>
<div class="prototype">ES.TRANS x</div>
<div class="short">Transpose the current pattern</div>