Every time an idea pops into my mind, I tell myself to finally get a notebook and start collecting them in there, yet every time I end up scribbling them on whatever random piece of paper I find lying around me that doesn't have a shopping list or any other thought on it yet. Well, now I finally made a scrap book of shreds of papers, old envelopes and Post-it notes related to 4chord MIDI, and turned all plans and ideas about the firmware future into Github milestones.
I'll add issues for each individual feature to the Github repository as the milestones progress, but to give everyone else an idea what will come in the near and distant future, I thought this is a good place to tell about them.
If you check the project's history, you'll see that the current state was mainly developed back in 2015, and at this point, moving from a credit card shaped PCB to a piano shaped one is the only real change that happened since. For me, this sounds like a good moment to increase the firmware's major version number and go for a 2.x path for any new feature. Keeping in mind that I want to take this project to @Tindie as soon as possible, yet have a long list of features I'd love to add, it made sense to already plan for different releases to separate need-to-have, want-to-have and nice-to-have features. These features are now planned to be implemented in firmware version 2.0, 2.1 and 2.2 respectively. Obviously that separation was done at my own discretion and may leave some definition a bit blurry.
The current firmware has on the one hand everything you need - chords and arpeggios in every key at "any" tempo - but is on the other hand too limited to have full-blown fun with it. For instance, the arpeggio playback is limited to quarter notes in 4/4 metre, and you need to know all keys by heart if you're interested to know what the submediant (vi chord) of, say, F# would be. A nice rhythm using eighth notes in either 3/4 or 4/4 (and more later on) metre as a playback mode, displaying the I-V-vi-IV chords for each key and highlighting the one that's currently played, now that's a whole different story. So is the ability to update future firmware versions without the need of any external components or even any knowledge of programming a microcontroller.
I've been looking for a reason to play around with the ATmega's bootloader memory area ever since I learned it existed. And while I should probably focus on other things in this phase, I'd still prefer being able to hand out 4chord MIDI hardware to an average person without any previous background in programming or electronics, so they can enjoy my creation.
All this being said, the plans for the version 2.0 firmware release are:
- changing quarter note based playback to eighth note playback
- adjust the playback modes to make use of eighth notes, and add some new playback modes
- adding metre choices for 4/4 and 3/4, and possibly more to come later
- displaying the tonic (I), dominant (V), submediant (vi) and subdominant (IV) of the currently selected key
- highlighting currently played chord on button press
- redesigning the UI to include all these new features
- implementing a bootloader to update future firmware releases without any need for programmers or development environments
- adding long button press to the menu keys
- cleanup the V-USB MIDI descriptors
In theory, those 2.0 changes should add a bit more flexibility and comfort, but things are still a bit generic. If I've learned anything in my life, it's that people most certainly have different preferences over very much everything, Being generic will therefore cater equally bad to most, which can be considered fair in a way, but customizing to your own taste is probably the better choice. The next firmware iteration is therefore focusing on user configurable settings.
In the big picture, this means there will be a new text based configuration menu introduced, separated from the main user interface. With long button press implemented in version 2.0, the "Select" button will be utilized to open it. This adds a few implications, such as adding support for text with a generic font, and obviously the menu handling itself. Other than that, adding a way to make the playback feel a bit less robotic by adding some timing variations int he playback is one other topic.
Features in the version 2.1 will therefore include:
- adding a generic font and functionality to display any arbitrary text
- displaying the configuration menu on long press of the "Select" button
- implementing a general configuration menu structure and its handing
- storing the configuration choices on EEPROM and reading back from it
- adding configuration for
- default key, playback mode, metre and tempo
- back light brightness
- name for the keys between A and C (A#/Bb/B and B/H)
- UART debug interface baud rate
- adding (also configurable) playback variation by deliberate timing variations to add a more human feel to it
By now, the firmware should be adjustable to make pretty much everyone happy with the amount of configurability of it.
Being able to configure "everything" might make changes from one choice to the other more complex, and is therefore potentially hurting the user experience. So while version 2.1 was adding options for customization, version 2.2 will aim to optimize these customizations by combining them into presets everyone can define for themselves.
Let's say you want to play a song in G# in 4/4 metre with 128 bpm in whatever playback mode that exists by now, and then want to continue with a different song in E at 94 bpm. Even with the same metre and playback mode, there's a lot of button pressing involved. I saw two choices to make this go smoother:
- limit the selection of available keys/modes/metre/tempo
- add presets of fixed defined key/mode/metre/tempo combinations
Only one answer seemed appropriate here: yes. Both options will be available.
In addition to this, the plan is to add a whole different way to play the chords in the first place. Instead of playing the selected playback mode while each button is pressed, a second option will be introduced to just trigger the playback on button press. Meaning a single press to the "I" chord button will play the currently selected key's tonic in the currently selected playback mode for as long as any other chord button is pressed. Pressing any other chord button will switch to the next chord - and pressing the same button again will stop the playback. Add a configuration choice to change/stop playback only at the end of the current metre and it's almost too easy to have a background track for recording your real instrument playing.
So here's the summary of new version 2.2 features:
- adding configuration options to select the available keys, playback modes, metre and tempo
- adding the concept of presets and option to the user to create their own presets of key, playback mode, metre and tempo
- adding high level playback mode to choose from:
- playback mode is executed as long as key is pressed (old)
- playback mode is executed on key press and either changed to new chord or stopped on next button press (new)
Yeah.. right. Let me get all this done first..
But yeah. as final note: these are the plans, and naturally, other things will come up along the way. Either new ideas I get, requests other people state, or unavoidable needs for bug fixes. That's just life. Either ones will get their own Github issue and assigned to the milestones accordingly.
So if something comes to your mind that's in your opinion missing from my plans, let me know.