aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-04-30 19:23:17 +0200
committerBad Diode <bd@badd10de.dev>2023-04-30 19:23:17 +0200
commit45035a55f4a2809fdacdf7a1a8c6e14f83be1e39 (patch)
treeb381a993041a0edba911390cabc14eecd1e1d577 /README.md
parent0beacc8fb5986fff7eb7db01b9edb95228e66f4b (diff)
downloadstepper-45035a55f4a2809fdacdf7a1a8c6e14f83be1e39.tar.gz
stepper-45035a55f4a2809fdacdf7a1a8c6e14f83be1e39.zip
Add a READMEv1.3
Diffstat (limited to 'README.md')
-rw-r--r--README.md119
1 files changed, 119 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..77c0720
--- /dev/null
+++ b/README.md
@@ -0,0 +1,119 @@
1# README
2
3[STEPPER][stepper-itch] is a 16-step sequencer for the Game Boy Advance (GBA).
4
5It features an intuitive workflow inspired by [Elektron instruments][elektron]
6with per-trigger parametrization that allows access to the 4 DMG sound channels
7in the console (2 square waves channels, 1 custom wave channel and 1 noise
8channel). Supports 4 banks of 8 patterns that can be queued for live
9performance.
10
11### Controls
12
13- D-Pad: Moves the cursor.
14- Start: Start/Stop the sequence.
15- Select: Context dependent mod key. Used for:
16 - Quick saving the current bank.
17 - Copy pasting.
18 - Adjusting notes by octaves.
19 - Adjusting bpm by multiples of 10.
20- B: Toggles channels/triggers and play/pause/stop, switches banks and patterns.
21- A: Hold it to adjust trigger parameters.
22- L/R: Change trigger notes, parameter values, or BPM.
23
24### Save/Load
25
26STEPPER supports up to 4 banks of 8 patterns each. The current bank is saved by
27switching banks or selecting the current one in the bank section. The banks are
28saved to the SRAM and upon launching STEPPER the last saved state will be
29loaded. Use "Select + Start" to quick save the current bank.
30
31### Patterns
32
33Patterns can be changed or edited by navigating to the left column with the
34cursor. Pressing the B button will queue a pattern to run on the next cycle. The
35queued pattern will be highlighted in blue. Only on pattern can be chained at
36the moment.
37
38We can edit different patterns other than the one that is currently playing. The
39pattern we are currently editing is represented by a grey/blue cursor whilst the
40one in play is highlighted in white.
41
42Each pattern stores information about active channels and their trigger notes
43and parameters. BPM can also be stored independently for each pattern.
44
45### Note selection
46
47Notes can be changed by pressing "L" or "R" over an active trigger. If the
48cursor is on the channel selection mode, "L" and "R" will transpose all trigger
49notes instead. Holding "Select" while adjusting notes will make it jump by an
50octave instead of a semitone.
51
52### Parameters
53
54Channels 1 and 2 allow us to control the square wave duty cycle and envelope
55(Initial volume, direction and time). Additionally, channel 1 can access the
56"sweep" parameters, which when the time is not zero allows for some interesting
57FX.
58
59Channel 3 is the wave channel. In this channel we have access to 2 programmable
60waves that can be edited manually or selected with 4 available presets (sine,
61saw, square, random). The waves can be played independently (mode A or B) or one
62after another (Mode A + B). This channel has no volume envelope thus a note will
63keep playing until it encounters an active trigger with zero volume or
64a different pitch.
65
66Channel 4 is the noise channel, mostly used for percussive effects. It uses an
67envelope to shape the sound and has two modes of operation. Mode A is more
68rounder and mode B sounds more metallic.
69
70Adjust the parameters by holding "A" hovering over a trig. Parameters are stored
71per trigger and adjusted individually for each of them. If the cursor is on
72channel selection mode, when adjusting the channel parameters these will be
73copied to all 16 triggers. Note that this global adjustment is not stored when
74saving banks and patterns. The grey color on the global adjustment helps
75differentiate between trigs and channel parameters. A compatible trig/parameter
76can be pasted into a channel to apply it to all triggers.
77
78### Copy/Paste
79
80The GBA has a limited set of controls but using STEPPER's contextual clipboard
81we can greatly speedup the editing workflow. We can use "Select + B" (Copy) or
82"Select + A" (Paste) to perform clipboard operations.
83
84If the cursor is selecting a pattern, the entire pattern will be copied,
85including active channels, triggers and parameters. Patterns can only be pasted
86in other patterns.
87
88Channels can be copied to other patterns or channels. If the paste destination
89is a channel other than the original one, only the notes and active triggers
90will be copied. If the channel is of the same type, all the parameters will also
91carry over.
92
93Copying a trigger transfer its pitch (note), active state (on/off) and its
94parameter settings (Assuming the target is compatible, as explained above). If
95we only want to copy the parameters, hold "A" to enter parameter select mode and
96press "Select" to copy them. Now you can paste them to any compatible trigger.
97
98Note that the clipboard doesn't currently transfer between banks due to the
99platform's limitations.
100
101### Using other gear and synchronization
102
103Currently STEPPER has no MIDI sync but I've began research on implementing CV
104gate out using the GBA's link cable. No ETA for this, since I'm missing a few
105things to test my theories in hardware, but I'll keep you all posted. In the
106future something like [ArduinoBoy][arduboy] could be implemented to provide this
107functionality, but in the meantime STEPPER can work with other gear by manually
108timing the playing head using a click/metronome or sampling patterns from
109STEPPER to later arrange it into a full song in your DAW or sampler of choice.
110The latter is my preferred approach.
111
112Keep in mind that the BPM reported by STEPPER can be a bit off since it uses
113whole integer values for timing adjustments, meaning that you may need to set up
114your DAW/sampler to a fractional BPM value or use time stretching to get the
115loops perfectly in time (For example 107 BPM in STEPPER and 107.6 on your DAW).
116
117[arduboy]: https://github.com/trash80/Arduinoboy
118[stepper-itch]: https://badd10de.itch.io/stepper-gba
119[elektron]: https://www.elektron.se/en