Skip to content

Performance keyboard layout API and in-key only layout#138

Merged
jamiefaye merged 51 commits intoSynthstromAudible:communityfrom
PaulFreund:feature/extendedKeyboardView
Jul 28, 2023
Merged

Performance keyboard layout API and in-key only layout#138
jamiefaye merged 51 commits intoSynthstromAudible:communityfrom
PaulFreund:feature/extendedKeyboardView

Conversation

@PaulFreund
Copy link
Copy Markdown
Collaborator

@PaulFreund PaulFreund commented Jul 3, 2023

This draft PR is to track work on the keyboard layout API and in-key only layout. Feel free to watch the PR to get updates and please help improving it with your feedback!

Demo

Demo Video

Progress

  • Refactor keyboard_screen
  • Move note input of Isomorphic layout to new API
  • Move note rendering of isomorphic layout to new API
  • Allow changing layouts with selection encoder
  • Move drum kit layout to new API
  • Finish feature description
  • Implement In-Key only layout

Scope

  • Layout system
    • Easy implementation of new layouts
    • Quick switching with keyboard button + selector scroll
    • Harmonization between kit and instruments layouts
  • In-Key only layout
  • Scope Creep: Extend Drum mode

Out of scope ideas

Once the layout API is implemented new layouts should be done as separate PRs, for example

  • Playing modes
    • Chord/Harmony mode
    • Velocity mode (notes layed out horizontically with velocity layed out vertically)
    • Piano mode, see Piano keyboard  #55
  • Sidebar modes (currently unused)
    • Velocity changing
    • Depending on note quick performance related changes (harmonies/chord types)

UX changes

  • Change instrument layout by holding keyboard button and turning select knob. Only layouts supporting the current clip will be displayed
  • In Drums keyboard mode Shift+turning horizontal knob will change the edge size of every note between 1 and 8 instead of 4 fixed
  • Switching between kit and non kit types now works in keyboard mode
  • In keyboard mode while in scale mode holding scale and turning the selection encoder will cycle through root notes (required)
  • In keyboard mode while in scale mode holding scale and pressing the selection encoder cycles through scales (convenience)

Layout API

The idea is to introduce a base class that can be easily extended for implementing new keyboard layouts. Some functionality like scale handling will be kept in keyboard_view but the rendering of pads and evaluation of presses will be done in the layouts

The layout API will contain the following functionality:

  • Rendering pad leds of both main pads and the sidebar ( to allow using them)
  • Handle pressed pads and returning notes to sound
  • Handle vertical and horizontal selection encoder changes

@litui litui added the enhancement New feature or request label Jul 3, 2023
@PaulFreund PaulFreund changed the title [Draft] Extended Keyboard view [Draft/RFC] Extended Keyboard view Jul 4, 2023
@PaulFreund PaulFreund changed the base branch from community to synthstrom_official July 10, 2023 10:48
@PaulFreund PaulFreund changed the base branch from synthstrom_official to community July 10, 2023 10:48
@take0ut
Copy link
Copy Markdown

take0ut commented Jul 14, 2023

The Squarp Hapax has a really satisfying chord mode. To paraphrase the Hapax manual:

Entering chord mode presents the user with two lit grids—an 8x2 row (chord trigger) at the bottom of the array, and a 8x6 box (modifiers) at the top left.

The length of the chord trigger row(s) match the number of degrees in the currently selected scale. Chords ascend left to right by stacking thirds:

Harmonizing a scale is done by stacking thirds of a scale.

C Major Scale harmonisation leads to these chord degrees:
Maj7, min7, min7, Maj7, Dom7, min7, half-dim.

Pressing a chord trigger button triggers the chord, (duh), but things get more interesting with modifiers selected. Current modifiers in the Hapax contain: Octave spread, inversion rotation, octave transpose, voicing, extended qualities (add9, add11, etc).

Additionally, the Hapax allows you to automatically select voicings based on the chords you are selecting by enabling a setting. The manual defines this as "taking the fewest steps between two chords".

@PaulFreund PaulFreund changed the title [Draft/RFC] Extended Keyboard view [Draft/RFC] Performance keyboard layout API and in-key only layout Jul 16, 2023
@weavermedia
Copy link
Copy Markdown
Contributor

weavermedia commented Jul 17, 2023

I'd like to work on a mode where a kit sound can be played chromatically from a standard keyboard view. It could be accessed by holding the kit sound audition pad and pressing the keyboard button. Would the concept of accessing the keyboard view from key combos like PAD+keyboard or SHIFT+keyboard be in the scope of this draft? Or would that behavior be implemented outside this code?

@PaulFreund PaulFreund changed the title [Draft/RFC] Performance keyboard layout API and in-key only layout Performance keyboard layout API and in-key only layout Jul 26, 2023
@PaulFreund PaulFreund marked this pull request as ready for review July 26, 2023 20:48
@PaulFreund
Copy link
Copy Markdown
Collaborator Author

PaulFreund commented Jul 27, 2023

@jamiefaye Ready when you are :D

PS: I thoroughly tested it :)

@jamiefaye jamiefaye added this pull request to the merge queue Jul 28, 2023
Merged via the queue into SynthstromAudible:community with commit 57823ac Jul 28, 2023
@ok-reza
Copy link
Copy Markdown
Collaborator

ok-reza commented Aug 9, 2023

i know specifically of one person that will now get a deluge because of this work, haha.

great job.

i'm curious about two UX changes (or additions in this case)

  1. In keyboard mode while in scale mode holding scale and turning the selection encoder will cycle through root notes (required)
  2. In keyboard mode while in scale mode holding scale and pressing the selection encoder cycles through scales (convenience)

both of these features were already implemented in the official firmware, is there a reason for there being two ways to perform them now?

  1. this was done by holding SCALE and pressing a note in keyboard or clip view audition pads to set root. (only benefit in this PR's way is it displays the new root note rather than the scale which is more useful)
  2. this was done by holding SHIFT + pressing SCALE to cycle.

the annoying thing about how 1) is implemented (for both versions) is that it resets the scale to MAJOR anytime you change the root note. it would be nice to maintain scale mode when adjusting root note. (one button combo for each function; preserve SCALE when changing ROOT NOTE, just like how changing SCALE doesn't affect ROOT NOTE)

@entzmingerc entzmingerc mentioned this pull request Feb 20, 2024
7 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants