aboutsummaryrefslogtreecommitdiffstats
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
parent0beacc8fb5986fff7eb7db01b9edb95228e66f4b (diff)
downloadstepper-45035a55f4a2809fdacdf7a1a8c6e14f83be1e39.tar.gz
stepper-45035a55f4a2809fdacdf7a1a8c6e14f83be1e39.zip
Add a READMEv1.3
-rw-r--r--Makefile2
-rw-r--r--README.md119
-rw-r--r--src/main.c11
3 files changed, 125 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index 02ee360..ead3e48 100644
--- a/Makefile
+++ b/Makefile
@@ -27,7 +27,7 @@ INC_FLAGS := $(addprefix -I,$(INC_DIRS))
27INC_FLAGS += -I$(LIBGBA_SRC) 27INC_FLAGS += -I$(LIBGBA_SRC)
28 28
29# Output library names and executables. 29# Output library names and executables.
30TARGET := STEPPER-v1.3-dev 30TARGET := STEPPER-v1.3
31ELF := $(BUILD_DIR)/$(TARGET).elf 31ELF := $(BUILD_DIR)/$(TARGET).elf
32BIN := $(BUILD_DIR)/$(TARGET).gba 32BIN := $(BUILD_DIR)/$(TARGET).gba
33 33
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
diff --git a/src/main.c b/src/main.c
index 1c4de28..f4b594d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -12,14 +12,14 @@ WITH REGARD TO THIS SOFTWARE.
12// TODO: A list of features I would like to get to implement in the near future. 12// TODO: A list of features I would like to get to implement in the near future.
13// 13//
14// UI tweaks. 14// UI tweaks.
15// - Notification support for feedback when doing some operations
16// (copying/pasting)
17// - Animations for cursor movement/current step highlight. (A fade out maybe?)
18// + Display played notes on all tonal channels when a trig or channel is not 15// + Display played notes on all tonal channels when a trig or channel is not
19// selected. If a channel is selected show active note in that channel, if 16// selected. If a channel is selected show active note in that channel, if
20// a trig is selected behaved as usual. These could be highlighted in 17// a trig is selected behaved as usual. These could be highlighted in
21// different colors to make it easier on the eyes. If a pattern is selected, 18// different colors to make it easier on the eyes. If a pattern is selected,
22// show the notes it would play on that pattern? 19// show the notes it would play on that pattern?
20// - Notification support for feedback when doing some operations
21// (copying/pasting)
22// - Animations for cursor movement/current step highlight. (A fade out maybe?)
23// - Theming support, with a number of pre-configured themes and custom colors. 23// - Theming support, with a number of pre-configured themes and custom colors.
24// 24//
25// Quality of life improvements. 25// Quality of life improvements.
@@ -31,11 +31,11 @@ WITH REGARD TO THIS SOFTWARE.
31// + Draw missing cursor. 31// + Draw missing cursor.
32// + Per-octave note adjustment with Select + L/R on a trig. 32// + Per-octave note adjustment with Select + L/R on a trig.
33// + Transpose channel with SEL + L/R on channel select. 33// + Transpose channel with SEL + L/R on channel select.
34// + Wrap around cursor left/right.
35// + Add START+SELECT for quick saving.
34// - Pattern chaining for more than 1 queue and/or song mode. 36// - Pattern chaining for more than 1 queue and/or song mode.
35// - Undo/Redo. 37// - Undo/Redo.
36// - Add a settings page to change some configuration parameters. 38// - Add a settings page to change some configuration parameters.
37// + Wrap around cursor left/right.
38// + Add START+SELECT for quick saving.
39// 39//
40// Advanced 40// Advanced
41// - Sync via MIDI via arduinoboy or something similar. 41// - Sync via MIDI via arduinoboy or something similar.
@@ -47,7 +47,6 @@ WITH REGARD TO THIS SOFTWARE.
47// - Cursor can stay in position instead of dissapering, again I can't 47// - Cursor can stay in position instead of dissapering, again I can't
48// reproduce this right now, just happened randomly. Needs investigation. 48// reproduce this right now, just happened randomly. Needs investigation.
49// 49//
50// FIXME: Update readme and project pages with control changes.
51 50
52#include "gba/gba.h" 51#include "gba/gba.h"
53 52