STEPPER: A 16-step sequencer for the Game Boy Advance
A downloadable gba sequencer
STEPPER is a 16-step sequencer for the Game Boy Advance (GBA).
It features an intuitive workflow inspired by Elektron instruments with per-trigger parametrization that allows access to the 4 DMG sound channels in the console (2 square waves channels, 1 custom wave channel and 1 noise channel). Supports 6 banks of 8 patterns that can be queued for live performance.
This project is open source and can be downloaded for free here. If you want to support its development you can also get the playable rom via itch.io (Pay what you want). STEPPER is best run on real hardware but you can try it on emulators, though some can introduce sound bugs. You can also try it out directly in the browser.
Controls
- D-Pad: Moves the cursor.
- Start: Start/Stop the sequence.
- Select: Context dependent mod key. Used for:
- Quick saving the current bank.
- Copy pasting.
- Adjusting notes by octaves.
- Adjusting bpm by multiples of 10.
- B: Toggles channels/triggers and play/pause/stop, switches banks and patterns, activates nudge mode on triggers.
- A: Hold it to adjust trigger parameters.
- L/R: Change trigger notes, parameter values, or BPM.
Save/Load
STEPPER supports up to 6 banks of 8 patterns each. The current bank is saved by switching banks or selecting the current one in the bank section (If the auto-save option is active). The banks are saved to the SRAM and upon launching STEPPER the last saved state will be loaded. Use “Select + Start” to manually save the current bank.
Note selection
Notes can be changed by pressing "L" or "R" over an active trigger. If the cursor is on the channel selection mode, "L" and "R" will transpose all trigger notes instead. Holding "Select" while adjusting notes will make it jump by an octave instead of a semitone.
If a scale is selected the notes will snap to the closest note in the given key. This works for individual triggers or, when the cursor is on a channel, for transposing the notes from all the triggers in that pattern.
Parameters
Channels 1 and 2 allow us to control the square wave duty cycle and envelope (Initial volume, direction and time). Additionally, channel 1 can access the “sweep” parameters, which when the time is not zero allows for interesting FX and can also be used to create even shorter envelope sounds.
Channel 3 is the wave channel. In this channel we have access to 2 wavetables that can be played independently (Voice A or B) or one after another (Voice A + B). This channel has no volume envelope and it will only play for one step duration. Each wavetable has access to three basic shapes (sine, saw & square) and 4 different variations for each of them. When the A or B voice are selected, you also have access to a quirky and lofi Attack/Decay envelope synced to the tempo clock to further shape the selected sound.
Channel 4 is the noise channel, mostly used for percussive effects. It uses an envelope to shape the sound and has two modes of operation. Mode A is rounder and mode B sounds more metallic.
Adjust the parameters by holding “A” hovering over a trig. Parameters are stored per trigger and adjusted individually for each of them. If the cursor is on channel selection mode, when adjusting the channel parameters these will be copied to all 16 triggers. Note that this global adjustment is not stored when saving banks and patterns. The grey color on the global adjustment helps differentiate between trigs and channel parameters. A compatible trig/parameter can be pasted into a channel to apply it to all triggers.
Patterns
Patterns can be changed or edited by navigating to the left column with the cursor. Pressing the B button will queue a pattern to run on the next cycle. The queued pattern will be highlighted in blue.
We can edit different patterns other than the one that is currently playing. The pattern we are currently editing is represented by a grey/blue cursor whilst the one in play is highlighted in white.
Each pattern stores information about active channels and their trigger notes and parameters. BPM can also be stored independently for each pattern.
Patterns can be cleared with “Select + L + R”. This command is reversible until a cleared pattern has been modified to prevent pattern loss issues. Empty/cleared patterns are shown as dotted boxes.
Up to 16 patterns can be chained and these chains can be sequenced and toggled on the fly, which is very fun to do in live performances. Pressing R will add the pattern under the cursor to the next empty slot. Conversely, L will remove the last pattern from the queue. Note that a currently playing pattern can't be removed unless is the last pattern in the chain. Pressing the A button will jump into the pattern chain editor, where individual patterns may be toggled on/off (B) or modified (L/R). Press A again to exit this mode.
Pattern chains can be toggled, cleared or randomized with the corresponding buttons on the top of the pattern chain editor. The randomization only selects non empty patterns.
If a pattern chain is playing, it will also appear in the notification bar, with the current pattern being highlighted.
Note that patterns can still be queued while a pattern chain is active. A queued pattern will play until the end of the 16 steps, at which point the chain will continue from where it left.
Pattern chains are saved independently for each bank.
Copy/Paste
The GBA has a limited set of controls but using STEPPER’s contextual clipboard we can greatly speedup the editing workflow. We can use “Select + B” (Copy) or “Select + A” (Paste) to perform clipboard operations.
If the cursor is selecting a pattern, the entire pattern will be copied, including active channels, triggers and parameters. Patterns can only be pasted in other patterns.
Channels can be copied to other patterns or channels. If the paste destination is a channel other than the original one, only the notes and active triggers will be copied. If the channel is of the same type, all the parameters will also carry over.
Copying a trigger transfer its pitch (note), active state (on/off) and its parameter settings (Assuming the target is compatible, as explained above). If we only want to copy the parameters, hold “A” to enter parameter select mode and press “Select” to copy them. Now you can paste them to any compatible trigger.
Note that currently you can only copy/paste within the same bank.
Customization
Using the settings menu you can change the theme of STEPPER. Currently you can choose a number of fixed themes of different color flavours. Each theme is comprised of 6 RGB555 colors (0-31 instead of 0-255 of regular RGBA):
- Foreground.
- Background.
- Accent color 1 (Cursor).
- Accent color 2.
- Accent color 3.
- Disabled / Background elements (Grey).
If you want to contribute a theme to be included in future releases, feel free to contact me about it!
Other customization options include:
- Global mutes: Muting a channel in one pattern will also mute it everywhere else.
- Global bpm: Bpm is the same for all patterns and banks.
- Auto-save: When active, banks will be saved before switching to a different one. Otherwise banks must be saved manually. This can be good for live performance if you want to tweak parameters around but don’t want those changes to persist while queuing a different part/bank.
- Sync: External synchronization (See next section).
- Help: Shows some usage prompts on the notifications bar. Disabling this setting can add a bit more context in some cases (For example, displaying the currently playing pattern chain or the full name of the selected scale). For advanced users it’s recommended to disable the help.
Using other gear and synchronization
There are several analog sync modes available, depending on your needs and gear available. STEPPER can use audio and link cable clock out and link cable clock in for synchronizing with external gear. Analogue's Pocket to MIDI IN and Pocket to MIDI USB-A and Pocket to Analog Sync adapter cables all work with STEPPER and are currently my preferred way to clock my GBA consoles (Set to Sync In 12bpq for MIDI). Note that these adapters only send clock, no transport, notes or CC events (which are not supported by STEPPER anyway). Press play on your console and start sending MIDI clock to commence playback.
Link cable sync modes use 3.3V to send and receive clock events. The voltage can be used as a sync signal (for Pocket Operators or CV gates or to control modulation in CV enabled instruments). Note that this 3.3V signal may need amplification in order to work with certain modules or devices. You can find an example of a potential voltage upshifter circuit here if you want to build one yourself. Furthermore, when on “Sync In” mode, any 3.3V signal on any of the link ports will move the STEPPER sequencer forward while the sequencer is set to “Play”. If paused or stopped, all sound will be killed. A word of caution: be careful when using “Sync in”, as you probably don’t want to burn your precious GBA down, so make sure the sync signal doesn’t exceed 3.3-5V. If your are building your own sync adapter using a voltage regulator is recommended.
When “Audio sync” is active, a click sound will be sent to the left channel and the mono audio signal to the right channel. Using a stereo splitter cable we can route the click track to audio sync enabled devices, like Volcas and Pocket Operators. Note that the volume of your console can be too low to trigger audio sync and sometimes additional amplification may be needed. Audio sync enables emulators and devices that lack a link cable port, such as the 3DS to play well with external gear.
Both “audio out” and “link out” signals can be sent simultaneously and configured to be sent at different Beats per Quarter Note invervals (BPQ). This acts as a sort of clock divider, but some devices (like the POs) require sync signals at specific intervals (BPQ 4).
Stepper uses both the Serial Out and Serial Clock pins for sync out, and on sync in, any of the serial pins (SO, SC, SD, SI) can be used as input, though SI is recommended. This should make any link cable that fits on the GBA to be compatible with STEPPER, if you want to learn more about making your own link cables and adapters, you can find more information here.
Credits
STEPPER was created originally by Bad Diode (Design/Programming), and was later joined by Catbeats (Design/Testing). Together they form the Withered City creative collective, where they are building new music software for old technology.
Status | Released |
Rating | Rated 4.5 out of 5 stars (13 total ratings) |
Author | BD |
Genre | Rhythm |
Tags | Game Boy, Game Boy Advance, Music, Music Production |
Download
Click download now to get access to the following files:
Development log
- STEPPER v1.8Feb 09, 2024
- STEPPER v1.7Sep 15, 2023
- STEPPER v1.6Aug 04, 2023
- STEPPER v1.5Jul 19, 2023
- STEPPER v1.4Jun 02, 2023
- STEPPER v1.3Apr 30, 2023
- STEPPER v1.2Apr 23, 2023
- Fixed bug with repeating envelope in noise channelApr 09, 2023
Comments
Log in with itch.io to leave a comment.
Nice work <3
I found a problem with the CIA file, don't save the work I made. Every time I start the program it comes like never used before.
I tried running the GBA rom on my DSi XL but it seems to freeze pretty quickly after I start messing around. Has anyone else encountered this? As far as I'm aware I'm using the most up to date version of TwilightMenu++ and GBARunner2.
I know i'm a month late but can you simply not download the .cia file instead of the .gba? It will be directly added to your 3ds home menu so it'll be a much more smooth experience for you since you won't have to go through TM++ to launch the game. And GBARunner2 is frankly kinda crap.
Just use FBI to install the .cia and play it directly. And if you need to grab the save file just use Checkpoint.
At the time I was specifically trying to run it on a DSi XL, not a 3DS. I haven't personally run into any other issues with GBARunner2 but admittedly I haven't tested it out deeply either. I didn't realize there were so many holes in the compatibility list, knowing that makes this issue make a bit more sense. lol. I have other systems I can load this on though so it's not a huge deal to me, just thought it was worth noting.
Same issue with me and why it would be nice to get a .nds version.
I have the same problem with a ds lite using a TTds flashcard
any chance of getting a .nds version? my DSi wont run .cia
is there a way to export an audio track once its been created?
If using an emulator or SD based flashcart, you can just copy the .sav files somewhere else for safekeeping. To export the track as WAV you will need some other software like Audacity or a DAW to record the songs as they are performed.
Thank you! I sent you $10. This is an incredible project. I'm already having a lot of fun with it
thank you for your support! have fun and let me know if you have any more questions. Oh and be sure to tag me if you upload something on socials. Love to see what people come up with ;D
This is really nice piece of software, the UI/UX is very slick and modern. I came up with a cool little groove in 10 minutes after launching it for the first time. Any plans to expand the step amounts per pattern, or adding LFOs? I have no idea if those are even possible with GBA.
Maybe there was already something like this which I missed, but using, for example, select+D-Pad to quickly move between patterns/channels would be another useful feature.
All in all, I really enjoy it thus far, thanks a lot for sharing it! Hopefully you want to keep expanding on it even more.
Glad you like it and happy to hear it was easy to get started, that is one of the main goals of the project :D
I have some things planned for STEPPER, LFOs would be feasible within some constrains, though it may take a while for me to add them.
One of the main things I will push for next version is pattern chaining so that we can have a pseudo "song mode" available, I'll see if I can incorporate your suggestion after that. If I understand you well, you would like to switch patterns or channels while on trig selection mode right? I could see that being useful, though I'm also thinking on adding a "marking" mode so that you can copy-paste multiple trigs and was thinking select + d-pad for doing that. Unfortunately the GBA has a very limited set of buttons!
After that's done I want to do a parameter UI update so that I can include a "chance" and maybe a "panning" knob per trig.
Just keep in mind these updates will probably come out slowly, this project is not fully self-sustained at the moment of writing and can't afford to make it my full (or even part) time job.
I'm working on it when I can though and would love to push a few more updates for sure.
Cheers!
Super Cool app! Can't wait to get to know it.
Since you have the .cia, have you though of putting it on the Universal Updater/3DS Homebrew store?
Thanks! Sorry it took to long to reply but somehow missed the comment notification :)
I don't think I want to pursue putting it on any other store at the moment, it's already tough to keep up with feedback and updates in both social media and here and would prefer to funnel the interest to this itch.io page :)
Yeah man, that's totally reasonable. Keep up the good work!
I just discovered your project, it’s very cool to know there is a project like this made today! Do you plan to use samples? Normally it’s possible on gba because with FAT (furious advance tracker) you can use both dmg sounds and samples. I stopped using FAT just because it crashed too much but using dmg sounds and samples at same time is so cool! And the sound quality of samples with gba is much better than with dmg-01 in lsdj.
Thanks, it's pretty fun to work on! At the moment I'm not planning on adding sampling support but it could be something I will consider in the future.
There are two ways around it, one would be to bake the samples in the rom file, either at compile time or with an injector of sorts. The other would be to keep the samples on the save file. Both of these need extra tooling in addition to the work it's required to make it work on the sequencer side.
This can be a lot of extra work and unfortunately my time is limited and this project is not yet self-sustainable. I'll let you know if I decide to toy with this idea though.
Thank's for your response!
I use samples (only) on a (very ugly) sequencer I made on the nintendo ds in C with the help of an open source project. I use max_mod and devkitpro, there is examples on github for auto compile sample from wav files in a folder named max_mod in the project. So it's on the rom file. I don't know if something similar exist on gba but on ds it's very easy.
But yea, it would mean more works that's true, the important is making something you like :-) I tried your sequencer just a few minutes and it seems to be a lot of fun!
The implementation of CV gate written in the description would be sooo awesome! O.o For my part I use "sync" in my nds sequencer, which is just a button who transform all the sequencer to mono and pan all to left and use the right channel to send a Sync sample. It needs a Y cable and it works good with korg machines because they accept low level sync
I'll be working on the CV and audio sync this weekend, you can see a taste of it here: https://merveilles.town/@bd/110423839732385870
Stay tuned!
This is so cool! I've been wanting a good gba sequencer for years, right now I use lsdj on my gba but it's not ideal. Thank you so much, I'll be giving it a whirl as soon as I get home!
Thank you, I hope you like it! I think LSDJ is more powerful than STEPPER at the moment, but I was going for a more intuitive user experience and a bit more of a performance mindset. Hope you have fun with it!
Nice work! Nice work! Love the user interface especially. Is there a way to access more granularity in the settings to get quicker or more precise envelopes for example?
Thank you I'm glad you like it! Sadly no, the DMG sound engine is limited and STEPPER just uses the available hardware registers. For example there are 4 bits for initial envelope values (16 possible levels) and 3 bits for envelope time (8 possible values).
If you are interested in learning more, you can check out this page for a description of the sound registers:
http://www.belogic.com/gba/index.php
Nice and smooth tool!
Edit: Recently toyed a bit with version 1.6 and noticed each step can have a different waveform (didn't noticed it before?). This make it in my humble opinion very flexible!
Thank you! I hope you have fun with it :)