diff options
author | Bad Diode <bd@badd10de.dev> | 2023-04-30 19:23:17 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-04-30 19:23:17 +0200 |
commit | 45035a55f4a2809fdacdf7a1a8c6e14f83be1e39 (patch) | |
tree | b381a993041a0edba911390cabc14eecd1e1d577 | |
parent | 0beacc8fb5986fff7eb7db01b9edb95228e66f4b (diff) | |
download | stepper-1.3.tar.gz stepper-1.3.zip |
Add a READMEv1.3
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | README.md | 119 | ||||
-rw-r--r-- | src/main.c | 11 |
3 files changed, 125 insertions, 7 deletions
@@ -27,7 +27,7 @@ INC_FLAGS := $(addprefix -I,$(INC_DIRS)) | |||
27 | INC_FLAGS += -I$(LIBGBA_SRC) | 27 | INC_FLAGS += -I$(LIBGBA_SRC) |
28 | 28 | ||
29 | # Output library names and executables. | 29 | # Output library names and executables. |
30 | TARGET := STEPPER-v1.3-dev | 30 | TARGET := STEPPER-v1.3 |
31 | ELF := $(BUILD_DIR)/$(TARGET).elf | 31 | ELF := $(BUILD_DIR)/$(TARGET).elf |
32 | BIN := $(BUILD_DIR)/$(TARGET).gba | 32 | BIN := $(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 | |||
5 | It features an intuitive workflow inspired by [Elektron instruments][elektron] | ||
6 | with per-trigger parametrization that allows access to the 4 DMG sound channels | ||
7 | in the console (2 square waves channels, 1 custom wave channel and 1 noise | ||
8 | channel). Supports 4 banks of 8 patterns that can be queued for live | ||
9 | performance. | ||
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 | |||
26 | STEPPER supports up to 4 banks of 8 patterns each. The current bank is saved by | ||
27 | switching banks or selecting the current one in the bank section. The banks are | ||
28 | saved to the SRAM and upon launching STEPPER the last saved state will be | ||
29 | loaded. Use "Select + Start" to quick save the current bank. | ||
30 | |||
31 | ### Patterns | ||
32 | |||
33 | Patterns can be changed or edited by navigating to the left column with the | ||
34 | cursor. Pressing the B button will queue a pattern to run on the next cycle. The | ||
35 | queued pattern will be highlighted in blue. Only on pattern can be chained at | ||
36 | the moment. | ||
37 | |||
38 | We can edit different patterns other than the one that is currently playing. The | ||
39 | pattern we are currently editing is represented by a grey/blue cursor whilst the | ||
40 | one in play is highlighted in white. | ||
41 | |||
42 | Each pattern stores information about active channels and their trigger notes | ||
43 | and parameters. BPM can also be stored independently for each pattern. | ||
44 | |||
45 | ### Note selection | ||
46 | |||
47 | Notes can be changed by pressing "L" or "R" over an active trigger. If the | ||
48 | cursor is on the channel selection mode, "L" and "R" will transpose all trigger | ||
49 | notes instead. Holding "Select" while adjusting notes will make it jump by an | ||
50 | octave instead of a semitone. | ||
51 | |||
52 | ### Parameters | ||
53 | |||
54 | Channels 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 | ||
57 | FX. | ||
58 | |||
59 | Channel 3 is the wave channel. In this channel we have access to 2 programmable | ||
60 | waves that can be edited manually or selected with 4 available presets (sine, | ||
61 | saw, square, random). The waves can be played independently (mode A or B) or one | ||
62 | after another (Mode A + B). This channel has no volume envelope thus a note will | ||
63 | keep playing until it encounters an active trigger with zero volume or | ||
64 | a different pitch. | ||
65 | |||
66 | Channel 4 is the noise channel, mostly used for percussive effects. It uses an | ||
67 | envelope to shape the sound and has two modes of operation. Mode A is more | ||
68 | rounder and mode B sounds more metallic. | ||
69 | |||
70 | Adjust the parameters by holding "A" hovering over a trig. Parameters are stored | ||
71 | per trigger and adjusted individually for each of them. If the cursor is on | ||
72 | channel selection mode, when adjusting the channel parameters these will be | ||
73 | copied to all 16 triggers. Note that this global adjustment is not stored when | ||
74 | saving banks and patterns. The grey color on the global adjustment helps | ||
75 | differentiate between trigs and channel parameters. A compatible trig/parameter | ||
76 | can be pasted into a channel to apply it to all triggers. | ||
77 | |||
78 | ### Copy/Paste | ||
79 | |||
80 | The GBA has a limited set of controls but using STEPPER's contextual clipboard | ||
81 | we can greatly speedup the editing workflow. We can use "Select + B" (Copy) or | ||
82 | "Select + A" (Paste) to perform clipboard operations. | ||
83 | |||
84 | If the cursor is selecting a pattern, the entire pattern will be copied, | ||
85 | including active channels, triggers and parameters. Patterns can only be pasted | ||
86 | in other patterns. | ||
87 | |||
88 | Channels can be copied to other patterns or channels. If the paste destination | ||
89 | is a channel other than the original one, only the notes and active triggers | ||
90 | will be copied. If the channel is of the same type, all the parameters will also | ||
91 | carry over. | ||
92 | |||
93 | Copying a trigger transfer its pitch (note), active state (on/off) and its | ||
94 | parameter settings (Assuming the target is compatible, as explained above). If | ||
95 | we only want to copy the parameters, hold "A" to enter parameter select mode and | ||
96 | press "Select" to copy them. Now you can paste them to any compatible trigger. | ||
97 | |||
98 | Note that the clipboard doesn't currently transfer between banks due to the | ||
99 | platform's limitations. | ||
100 | |||
101 | ### Using other gear and synchronization | ||
102 | |||
103 | Currently STEPPER has no MIDI sync but I've began research on implementing CV | ||
104 | gate out using the GBA's link cable. No ETA for this, since I'm missing a few | ||
105 | things to test my theories in hardware, but I'll keep you all posted. In the | ||
106 | future something like [ArduinoBoy][arduboy] could be implemented to provide this | ||
107 | functionality, but in the meantime STEPPER can work with other gear by manually | ||
108 | timing the playing head using a click/metronome or sampling patterns from | ||
109 | STEPPER to later arrange it into a full song in your DAW or sampler of choice. | ||
110 | The latter is my preferred approach. | ||
111 | |||
112 | Keep in mind that the BPM reported by STEPPER can be a bit off since it uses | ||
113 | whole integer values for timing adjustments, meaning that you may need to set up | ||
114 | your DAW/sampler to a fractional BPM value or use time stretching to get the | ||
115 | loops 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 | ||
@@ -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 | ||