Skip to content

Commit 2602721

Browse files
added technical specs to documentation
1 parent b7b79bf commit 2602721

4 files changed

Lines changed: 624 additions & 0 deletions

File tree

docs/ASCIISTEP16.txt

Lines changed: 392 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,392 @@
1+
2+
for latest version see: https://github.com/coderofsalvation/ASCIISTEP16
3+
4+
5+
Music L.R. van Kammen
6+
Internet-Draft 1 September 2023
7+
Intended status: Informational
8+
Expires: 4 March 2024
9+
10+
11+
ASCIISTEP16
12+
draft-ASCIISTEP16-leonvankammen-00
13+
14+
Abstract
15+
16+
ASCIISTEP16 is pckeyboard standard & translation of popular hardware
17+
16-step drum/midisequencers (electribe MX, electribe SX, mc303,
18+
tr909,tr808, mc707, arturia beatstep). The goal of ASCIISTEP16 is to
19+
offer a pckeyboard mode (usually for tracker software) which allows
20+
music software to use pckeyboard-keys as music-stepsequencer keys.
21+
22+
Status of This Memo
23+
24+
This Internet-Draft is submitted in full conformance with the
25+
provisions of BCP 78 and BCP 79.
26+
27+
Internet-Drafts are working documents of the Internet Engineering
28+
Task Force (IETF). Note that other groups may also distribute
29+
working documents as Internet-Drafts. The list of current Internet-
30+
Drafts is at https://datatracker.ietf.org/drafts/current/.
31+
32+
Internet-Drafts are draft documents valid for a maximum of six months
33+
and may be updated, replaced, or obsoleted by other documents at any
34+
time. It is inappropriate to use Internet-Drafts as reference
35+
material or to cite them other than as "work in progress."
36+
37+
This Internet-Draft will expire on 4 March 2024.
38+
39+
Copyright Notice
40+
41+
Copyright (c) 2023 IETF Trust and the persons identified as the
42+
document authors. All rights reserved.
43+
44+
This document is subject to BCP 78 and the IETF Trust's Legal
45+
Provisions Relating to IETF Documents (https://trustee.ietf.org/
46+
license-info) in effect on the date of publication of this document.
47+
Please review these documents carefully, as they describe your rights
48+
and restrictions with respect to this document. Code Components
49+
extracted from this document must include Revised BSD License text as
50+
described in Section 4.e of the Trust Legal Provisions and are
51+
provided without warranty as described in the Revised BSD License.
52+
53+
54+
55+
56+
van Kammen Expires 4 March 2024 [Page 1]
57+
58+
Internet-Draft ASCIISTEP16 September 2023
59+
60+
61+
Table of Contents
62+
63+
1. What is ASCIISTEP16 . . . . . . . . . . . . . . . . . . . . . 2
64+
2. Implementations . . . . . . . . . . . . . . . . . . . . . . . 2
65+
3. Translation table . . . . . . . . . . . . . . . . . . . . . . 2
66+
3.1. Example implementation in C/C++ . . . . . . . . . . . . . 4
67+
4. Quick win: trackers & 'keyjazz'-enabled software . . . . . . 6
68+
5. Bar pages . . . . . . . . . . . . . . . . . . . . . . . . . . 6
69+
6. navigating bar pages . . . . . . . . . . . . . . . . . . . . 6
70+
7. Scope (limits) . . . . . . . . . . . . . . . . . . . . . . . 7
71+
8. Contact . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
72+
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7
73+
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 7
74+
75+
1. What is ASCIISTEP16
76+
77+
<img src="https://i.imgur.com/mDsOXqt.png" style="width:60%"/>
78+
79+
The goal of ASCIISTEP16 is to offer a pckeyboard mode (usually for
80+
tracker software) which:
81+
82+
* can act as a substitute for a hardware stepsequencer (on a
83+
pckeyboard)
84+
* allows 'grid'-like liveperformance on pckeyboards
85+
* allows people coming from the hardware stepsequencer scene to
86+
easily use ASCIISTEP16 compatible music-software
87+
* allows any unix character-device, or implementation to send 16
88+
stepsequencer-buttons over ascii
89+
90+
2. Implementations
91+
92+
* MilkyTracker X-build (https://github.com/coderofsalvation/
93+
MilkyTrackerX)
94+
95+
| please comment on this gist if your software implements
96+
| ASCIISTEP16
97+
98+
3. Translation table
99+
100+
The table below focuses on QWERTY keyboards, but other keyboard
101+
layouts can follow the exact same logic of using the first 2x8 (rows-
102+
x-cols) alphabet keys (see image above).
103+
104+
| the uppercase character is preferred ('Q' instead of 'q' e.g.) to
105+
| not interfere with normal keymappings of the software.
106+
107+
108+
109+
110+
111+
112+
van Kammen Expires 4 March 2024 [Page 2]
113+
114+
Internet-Draft ASCIISTEP16 September 2023
115+
116+
117+
+======+===========+===================================+
118+
| step | character | comment |
119+
+======+===========+===================================+
120+
| 0 | Q | |
121+
+------+-----------+-----------------------------------+
122+
| 1 | W | |
123+
+------+-----------+-----------------------------------+
124+
| 2 | E | |
125+
+------+-----------+-----------------------------------+
126+
| 3 | R | |
127+
+------+-----------+-----------------------------------+
128+
| 4 | T | |
129+
+------+-----------+-----------------------------------+
130+
| 5 | Y | international equivalent 'Z' e.g. |
131+
+------+-----------+-----------------------------------+
132+
| 6 | U | |
133+
+------+-----------+-----------------------------------+
134+
| 7 | I | |
135+
+------+-----------+-----------------------------------+
136+
| 8 | A | |
137+
+------+-----------+-----------------------------------+
138+
| 9 | S | |
139+
+------+-----------+-----------------------------------+
140+
| 10 | D | |
141+
+------+-----------+-----------------------------------+
142+
| 11 | F | |
143+
+------+-----------+-----------------------------------+
144+
| 12 | G | |
145+
+------+-----------+-----------------------------------+
146+
| 13 | H | |
147+
+------+-----------+-----------------------------------+
148+
| 14 | J | |
149+
+------+-----------+-----------------------------------+
150+
| 15 | K | |
151+
+------+-----------+-----------------------------------+
152+
153+
Table 1
154+
155+
156+
157+
158+
159+
160+
161+
162+
163+
164+
165+
166+
167+
168+
van Kammen Expires 4 March 2024 [Page 3]
169+
170+
Internet-Draft ASCIISTEP16 September 2023
171+
172+
173+
+===============+================================+
174+
| channel/track | ascii key for muting/selecting |
175+
+===============+================================+
176+
| 1 | '1' |
177+
+---------------+--------------------------------+
178+
| 2 | '2' |
179+
+---------------+--------------------------------+
180+
| 3 | '3' |
181+
+---------------+--------------------------------+
182+
| 4 | '4' |
183+
+---------------+--------------------------------+
184+
| 5 | '5' |
185+
+---------------+--------------------------------+
186+
| 6 | '6' |
187+
+---------------+--------------------------------+
188+
| 7 | '7' |
189+
+---------------+--------------------------------+
190+
| 8 | '8' |
191+
+---------------+--------------------------------+
192+
| 9 | '9' |
193+
+---------------+--------------------------------+
194+
| 10 | '0' |
195+
+---------------+--------------------------------+
196+
| 11 | '-' |
197+
+---------------+--------------------------------+
198+
| 12 | '=' |
199+
+---------------+--------------------------------+
200+
201+
Table 2
202+
203+
3.1. Example implementation in C/C++
204+
205+
/*
206+
example usage:
207+
int stepsize = trackerGridSettings.getStepIncrement(); // optional: allow variable stepsizes
208+
int bar = cursor.row / (16*stepsize);
209+
int steprow = ASCIISTEP16(character,bar) * stepsize;
210+
int ch = ASCIISTEP16_channel(character); // ctrl +1 jumps to ch 1 (cursor)
211+
if( ch != -1 ) muteOrSelectChannel( ch, CTRLpressed() ); // shift+1 (un)mutes ch 1
212+
if( steprow != -1 ) writeNote( 'c-4', steprow, getCurrentChannel() ); // write step
213+
else writeNote( lowercaseKeyToNote(i), getCursorRow(), getCurrentChannel() ); // write keyjazz note
214+
*/
215+
216+
int ASCIISTEP16(char ascii, unsigned int bar)
217+
{
218+
int number = -1;
219+
switch (ascii)
220+
{
221+
222+
223+
224+
van Kammen Expires 4 March 2024 [Page 4]
225+
226+
Internet-Draft ASCIISTEP16 September 2023
227+
228+
229+
// ASCIISTEP16 standard (https://gist.github.com/coderofsalvation/8d760b191f4bb5465c8772d5618e5c4b)
230+
case 'Q': number = 0; break;
231+
case 'W': number = 1; break;
232+
case 'E': number = 2; break;
233+
case 'R': number = 3; break;
234+
case 'T': number = 4; break;
235+
case 'Y': number = 5; break;
236+
case 'U': number = 6; break;
237+
case 'I': number = 7; break;
238+
case 'A': number = 8; break;
239+
case 'S': number = 9; break;
240+
case 'D': number = 10; break;
241+
case 'F': number = 11; break;
242+
case 'G': number = 12; break;
243+
case 'H': number = 13; break;
244+
case 'J': number = 14; break;
245+
case 'K': number = 15; break;
246+
}
247+
return number == -1 ? -1 : number + (bar*16);
248+
}
249+
250+
int ASCIISTEP16_channel(char ascii)
251+
{
252+
int number = -1;
253+
switch (ascii)
254+
{
255+
// ASCIISTEP16 standard (https://gist.github.com/coderofsalvation/8d760b191f4bb5465c8772d5618e5c4b)
256+
case '1': number = 0; break;
257+
case '2': number = 1; break;
258+
case '3': number = 2; break;
259+
case '4': number = 3; break;
260+
case '5': number = 4; break;
261+
case '6': number = 5; break;
262+
case '7': number = 6; break;
263+
case '8': number = 7; break;
264+
case '9': number = 8; break;
265+
case '0': number = 9; break;
266+
case '-': number = 10; break;
267+
case '=': number = 11; break;
268+
}
269+
return number;
270+
}
271+
272+
273+
274+
275+
276+
277+
278+
279+
280+
van Kammen Expires 4 March 2024 [Page 5]
281+
282+
Internet-Draft ASCIISTEP16 September 2023
283+
284+
285+
4. Quick win: trackers & 'keyjazz'-enabled software
286+
287+
Most trackers already support octave-switching, transposing-selected
288+
note(s), and instrument-switching using keyboard shortcuts. This
289+
creates very interesting ASCIISTEP16 workflows by simply implementing
290+
ASCIISTEP16.
291+
292+
| ASCIISTEP16 does not interfere with most trackers/keyjazz enabled
293+
| daws, since the uppercase characters ('Q' not 'q') are usually
294+
| unused (or simply translated to lowercase).
295+
296+
Hint: CAPS-LOCK & SHIFT act as an ASCIISTEP16 enable/disable-toggle
297+
for free!
298+
299+
5. Bar pages
300+
301+
Most stepsequencer support multiple bars (for example: the electribes
302+
offer 4), which allow for editing longer patterns by repurposing the
303+
same 16 step-buttons.
304+
305+
+==========+======================================+
306+
| bar page | step value |
307+
+==========+======================================+
308+
| 0 | 1,2,3,5,6,7,8,9,10,11,12,13,14,15,16 |
309+
+----------+--------------------------------------+
310+
| 1 | 17,18,19,20,21,22,23,24,25,26,27 |
311+
+----------+--------------------------------------+
312+
| .. | and so on |
313+
+----------+--------------------------------------+
314+
315+
Table 3
316+
317+
| Basically, each stepvalue is relative based on the current bar-
318+
| page, and evaluated as stepvalue * (page*16) (page starting at 0).
319+
320+
6. navigating bar pages
321+
322+
The ASCIISTEP16 standard is to use increment/decrement shortcuts to
323+
navigate pages:
324+
325+
*page-up/down (to switch to next/previous page, which turns step 1-16
326+
into 17-24 e.g. ) * and/or arrow up/down in page-down *in
327+
combination* with shift/ctrl/alt etc.
328+
329+
| This is easy to implement in 99% of trackers, which already
330+
| support cursor-navigation. So the implementation is deadsimple to
331+
| determine & apply the current bar-page:
332+
333+
334+
335+
336+
van Kammen Expires 4 March 2024 [Page 6]
337+
338+
Internet-Draft ASCIISTEP16 September 2023
339+
340+
341+
when entering a key ('E' which translates to asciistep16 value 2 e.g.):
342+
row = getCurrentRow()
343+
bar = row / 16
344+
editrow = asciistep16('Q') + (bar*16) // replace 'Q' with user input
345+
if( editrow > 0 ) writeNote( note, editrow) // step was entered
346+
347+
7. Scope (limits)
348+
349+
ASCIISTEP16 v1 is very simple/limited (therefore an easy standard to
350+
implement):
351+
352+
* ASCIISTEP16 focuses on laptop-friendly shortcuts (first 3
353+
alphanumeric rows + CTRL and SHIFT)
354+
* ASCIISTEP16 does not dictate how to change metadata of a step
355+
(note-value, volume-value) (see Quick win above)
356+
* ASCIISTEP16 does not dictate how to control the transport / clock
357+
(start/stop/record) e.g.
358+
* ASCIISTEP16 does not dictate how to change keyboard mappings
359+
* ASCIISTEP16 does not dictate how to toggle/control userinterface
360+
elements
361+
362+
| Most trackers/daws already have a default way of doing these
363+
| things, therefore ASCIISTEP16 stay simple to implement. Ideas for
364+
| ASCIISTEP16-NOTE, ASCIISTEP16-VOLUME, ASCIISTEP16-TRANSPORT
365+
| extensions are welcome though.
366+
367+
8. Contact
368+
369+
* leonvankammen|gmail.com
370+
371+
9. IANA Considerations
372+
373+
This document has no IANA actions.
374+
375+
10. Acknowledgments
376+
377+
TODO acknowledge.
378+
379+
380+
381+
382+
383+
384+
385+
386+
387+
388+
389+
390+
391+
392+
van Kammen Expires 4 March 2024 [Page 7]

0 commit comments

Comments
 (0)