Zynseq - A native step sequencer

You don’t have to be sorry for being late… you will just have a lower salary… that’s all…
Eh eh…

You mean I am going to have to start paying for the privilege of doing this work??? :neutral_face:

5 Likes

Yes, people always said nobody would laugh at my comedy routines, but I won!
They are not laughing now…

Nobody said figuring a workable business model around open source was easy :rofl:

No. It just means wileu will give you 2 :face_with_monocle::face_with_monocle: requests for you to show the thing working.

Isn’t that the way people pay stuff here? (Not to Jofe of course) :grin:

3 Likes

He needs a wider stage… I’m just encouraging that !! :smiley:

2 Likes

Hi @riban!

I’m testing the recently added qmidiarp MIDI-LFOs with the stepseq (master branch), everything synced with the internal clock, and it works really nice … except a little bug :wink:

Look at this simple sequence:

zynthian_ui_seq_issue_noff

and found that note off are sent before the starting of next note, although they are joined. Listen it:

I checked the MIDI log and the note off is sent 2-4 steps before it should. I don’t know if it’s fixed on the devel branch. Do you remember to have detected and fixed this problem?

Ahhh! It would be nice to have the possibility of having “infinite” notes in a pattern. I mean, when a note is joined with itself (it starts on beat 1 and its duration is the num of steps in the pattern), you could “omit” the note off … or something like that :wink:

Thanks!

2 Likes

Note off is sent one clock before the length of the note. This is so that the same note will retrigger, e.g. of you have four crotchets on same note in a 4/4 measure then you want to hear it as four distinct notes. This is by design. I thought I had a mechanism to allow pedal notes but don’t recall whether that is actually implemented. I will check and get back to you.

Regarding Transport&Tempo control, we have to think the best way of integrating this on zynthian UI. It should be easily available from anywhere, as there are several synth engines that already use it natively:

  • NoizeMaker
  • Helm
  • Surge
  • arpeggiator
  • qmidiarp (arp, step, lfo)
  • etc.

Perhaps it’s time to have a dedicated transport bar/widget that can be easily callable from anywhere and the v4 has 4 lazy push buttons …

Regards,

But having notes “visually” overlapped when you want joined notes is not intuitive nor natural. And when you want to really overlap notes, then you have to visually overlap more than the desired overlapping. It’s quite confusing. When 2 notes are “visually” joined, the note-off should be sent just before the next note-on . I mean, send the note-on on the first tick (jack’s frame) of the specified step and note-off in the last one. In such a way, when you see a note with 1 step duration, its duration is really 1 step and not 0, like now.

Regards,

1 Like

I experimented with this when I designed it and am effectively doing what you say. Note off is on last tick before next beat. This resulted in the best dynamics with fairly simple rule but I am aware it is not optimal, e.g. the gap between off an on depends on factors such as tempo and time signature. If you want a pedal note then you create a single note. There needs to be a way to join (tie) notes which I alluded to earlier. There also needs to be a way to slur notes, e.g. for monophonic legato. The problem I found with too short a gap between the note off and subsequent note on was that it sounded wrong and was sometimes poorly handled by the synth engine. I had planned to revisit this so your comments are a timely reminder. I am hoping that the code is already there but that will be a surprise or disappointment for another day.

Time is quite challenging. There are several different clocks that need to be considered. I have lost some sleep (and hair) over this. I am hopefully in the last phase of consolidating the move to using JACK transport clock. Once this is sufficiently stable I will commit to GitHub then take a look at note lengths. Maybe it might work that we only truncate the note by a clock cycle if it butts up against repeat of the same note. That might have odd effects of having notes apparently the same length but actually ~20ms difference.

I think your example expects an overlap of notes? I had envisaged that would be implemented by overlapping notes in the sequence. You say it isn’t intuitive but if I wanted the effect when playing live, e.g. legato I would have to release a note after I played the next note so overlapping is intuitive. How do other sequencers work?

Also, notes are never zero length. I do want to be able to play shorter notes (than one step) which gives different dynamics.

Regarding tempo and transport, this can be controlled elsewhere and I have considered this at length. There are some challenges…

If you stop the transport then start it again sequences will stop and start. This may not be the expected behaviour in all situations. There are bits of code that may need to be optimised but it should mostly work. I had already added transport control to the to bar as (hidden) drop-down touch interface which we can expose to other controls, e.g. CUIA.

Tempo can be changed affecting all consumers of clock. For sequencers like zynpads this is fine. The song has a tempo (and time signature) map so if you play a song then these are automated. Of course you can manually ride the tempo but a subsequent programmed event will change it.

I suggest we expose transport to CUIA allowing full control from a range of controllers.

The next implementation of zynseq will use jack-transport but I anticipate enhancing or replacing this later so we can integrate it better. For now we can simply expose you transport engine via CUIA. Note that the song will not start when the transport starts to roll unless it is in play mode, i.e. starting jack-transport isn’t enough to start the song playing but that makes sense (or will do when you see it).

Hi, i’m still trying to experiment with the sequencer. Is it possible to save and load? Everytime i try nothing is saved and nothing can be loaded. Another problem is that i can’t connect to the web configuration tool using the feature/stepseq branch. Any suggestion? Thanks!

Hi @Nicolaz

I found an issue with save/load which will be fixed in next update. I have done a lot of work on this version which means lots to fix :laughing:. I am hoping to get it out soon but realized today that an element I had hoped to defer really needs implenting more so further delay.

Someone else reported an issue with web. I don’t see that. Can you reach it by IP address?

Nope, it works only the first time. Then i change branch, update, set all basic stuff and wi fi. When i turn off and then on again it’s impossible to open the web comnfiguration tool, even using cable instead of wi fi.

I agree with the CUIA exposing of the transport API. I will implement it ASAP.

Regards!

Regarding the transport control UI itself, i think that the stepseq is a perfect place for having this UI. In fact, it already implements PLAY/PAUSE on short-snapshot. I would suggest for the pattern editor:

  • short-snapshot => START/PAUSE (exactly like it’s working right now)

  • rotate-snapshot => velocity adjustment. It should have a visual feedback on screen that would be hidden after 1-2 seconds of inactivity.

  • bold -snapshot => Menu Transport with stepseq specific transport modes: play, record, overdub, metronome

  • short-layer => rotate stepseq screens (pattern, zynpad, song)

  • bold-layer => screen specific menu

  • rotate-layer => ???
    (on song-editor) => transport position (backward, forward)

  • short-select => add/remove note

  • bold-select => “note-adjust”- mode => short/bold-select for returning to edit-mode

  • rotate-select => move cursor on time axis
    (‘note-adjust’ mode) => adjust duration (1st derivate of time)

  • short-back => exit from stepseq

  • bold-back => main menu

  • rotate-back => move cursor over keys (notes)
    (‘note-adjust’ mode) => adjust velocity (it’s the other param in the MIDI event)

I think this UI-control assignment map is kind of coherent with the rest of UI, or try to maintain some parallelism or symmetry.

For the zynpad, i would suggest to add the possibility of selecting using select-rotate/click.
Although I have to spend more time with both the zynpad and song editor. …

Thanks!

2 Likes

An update - of sorts… There is no update!

Elves continue to work behind the scenes to bring you the stable feature you desire but this is not yet ready. What is available is a wiki page which acts as a tutorial on how to use the step sequencer, based on the not yet released version, i.e. this will not represent what you can currently access. If anyone was very bored they might want to give it a quick preview to see what is planned in the initial release and give feedback. I have not yet added any pictures which would be useful and this is pretty much me writing in one session how I think it works (or should do). I haven’t really been through and edited it for consistency or readability but wanted to get it somewhere that we could all access (rather than shifting it around whatever machine I happened to be working on). Much of it was written from memory and without reference to @jofemodo’s last post which I need to revisit. One purpose of the wiki page is to act as a test script, i.e. if one follows the tutorial then all functions should work as described.

As mentioned above, if you do happen to read it then feedback would be appreciated both on the wiki content and zynseq functionality it describes.

A couple of things I put in there are the idea of having a demo supplied out of the box so that one may follow a tutorial more simply and consistently and to demonstrate the functionality to new users and the idea of saving and restoring sequences with snapshots that I think was previously suggested. Maybe we should consider combining these two ideas and have some snapshots provided in the build that demonstrate Zynthian sounds and features?

Now! I really must get on with making that tutorial a reality…

7 Likes

Wow, this is a huge wiki page @riban.
I will look at it carefully.
Thank you.