zynthian / zynthian-issue-tracking

Centralized Issue Tracking for Zynthian Project
https://github.com/orgs/zynthian/projects/1
11 stars 3 forks source link

ZynSeq: Note lengths shorter than a step #327

Closed riban-bw closed 2 years ago

riban-bw commented 3 years ago

Is your feature request related to a problem? Please describe. Each ZynSeq pattern is made from notes that are at least one step long. You can get great effects with shorter notes, e.g. short percussive organ sounds.

Describe the solution you'd like Ability to reduce duration of a note to less than a step.

Describe alternatives you've considered Increase quantity of step per beat but becomes awkward to align within existing tracks.

Additional context Probably minimum duration is the clock rate which is currently 24 pulses per quarter note.

mark-orion commented 2 years ago

Please implement this soon. I am controlling an external monophonic, analogue synthesizer via MIDI, and have the problem that the envelope generator does not trigger with any "back to back" notes and I am stuck with legato unless I insert rests. Notes shorter than a step would solve problems like this.

riban-bw commented 2 years ago

Unfortunately this is a bit tricky, requiring some careful design and planning. I may not have time to work on this in the near future. If someone wants to take a look and submit a pull request then feel free. If I find time I will of course investigate but it isn't the highest priority right now, sorry.

mark-orion commented 2 years ago

@riban-bw would it be easier to implement a feature to select all notes and change their parameters (e.g. length) as I just suggested in the forum ? That would be a good workaround for the problem (at least for me), as you just increase the number of steps per beat and then reduce the note length.

riban-bw commented 2 years ago

That might be a useful feature but I anticipate it may be more challenging to implement. Add it as another feature request so it doesn't get lost.

On this one:

mark-orion commented 2 years ago

To answer your questions: As one who is used to that type of sequencer, I would implement a design that is similar to that one found on the Arturia KeyStep. I am aware that others might have different preferences, but my suggestion is based on myself being not so much of a "DAW musician", but mainly playing live, both just for myself or jamming with others:

riban-bw commented 2 years ago

Some interesting ideas!

Percentage may require significant reworking of the code. Durations are currently based on a quantisation level similar to MIDI clock. It would certainly be advantageous to change this as it would facilitate other temporal changes such as swing tempo. This may be in the future but assuming this work was done before such a change, the quantisation may be more coarse and less consistent.

Adjusting just the last step of the note duration sounds interesting but of course would require a dedicated control for this parameter, separate from the note duration control.

The pattern editor is not really a performance tool hence dynamically changing parameters from CC does not fit the model well. An ability to impact all notes in a sequence feels a bit extreme. I need to consider what might be possible / sensible here.

I would prefer to allow control of individual notes because a pattern may benefit from having some shorter and some longer notes. Applying globally to a pattern would apply to a specific type of music / workflow. Maybe combining the other feature request for acting on all notes might provide the feature you desire, i.e. select all notes then adjust duration.

This is all good discussion and we are forming a plan. I can't guarantee any activity on this soon though due to other commitments.

riban-bw commented 2 years ago

I have implemented something in development branch feature/327_zynseq_short_notes. When adjusting note parameters you can use the SNAPSHOT encoder to adjust the fractional part of the note duration. The display shows the actual note duration in white and a shadow for the remainder of the step which works well to indicate the step contains content when note is very short. Notes may be very short or of varying length beyond a single step, e.g. 1.5 steps. Resolution is approx. 1% but implemented in 10% steps in UI. This is not necessarily 10%, depending on other configuration elements but it seems to work okay (and this is art - not science!).

The change affects the selected note and subsequently added notes. Note lengths are saved and recalled in sequences in snapshots and current value is remembered until changed but not recalled after a restart when the value for new note length reverts to the default 1 step duration.

An additional enhancement is that adding a note to a pattern now plays the note at the currently configured velocity and for approximately the currently configured duration (actually the step duration x 200ms). Notes played with onscreen keyboard still play at velocity 100 and duration 200ms.

Touchscreen interface is not optimised for this new workflow. You have to click on the actual note to change it which could be too small to accurately register. This should be enhanced but consideration is also required for the click and drag feature available to touch screen operation.

riban-bw commented 2 years ago

This change is merged into testing. I will close this issue and we can revisit after some user testing as necessary.