Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Metro-like sequencing #259

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
Open

Conversation

vafu
Copy link

@vafu vafu commented Dec 5, 2020

This is a WIP PR, any suggestions and improvements either in code or in UX are welcome!
This PR adds basic Metropolis-like sequencing with steps repeats and few different gate modes.
Metropolis gate modes for reference
Снимок экрана 2020-12-05 в 06 52 58

**This works only in Free track mode, so make sure your track Play Mode is set to "Free" under Track page
image

Under Gate layout you can find 2 (for now) new layers
REPEAT` which repeats current step N times
Снимок экрана 2020-12-05 в 06 50 07

REPEAT MODE` which is like a switch on metropolis that determines how to send gates

  • EACH -- sends a gate for each step
  • FIRST -- sends first gate and waits for N - 1 pulses
  • ODD -- sends gate for each odd step (1, 3, 5)
  • TRIPLET -- sends gate for each third step, (1, 4, 7) creating triplet feel.
    image

Some gate modes were available on unit already
mode 1 (gate for N steps long) -- simply go to step LENGTH and increase it to 100%
mode 4 (no gate for N steps) -- simply disable the gate in GATE page

TODO

  • add step Skip function (stage button double tap on metropolis).
  • new modes shortcuts

only stage sequencing
with negative offsets.zip

@dragosandriana
Copy link

dragosandriana commented Dec 5, 2020

If I would be a programmer, I would like to help; not the case.
If is there anything else I can do, I'm in; I would really like to see this feature implemented in Performer.
Here is an image with the RYK M185 gate modes, maybe it helps.
EDIT:

  • the ----------- mode is mute step
  • the last mode is continuous sound
  • the ?????? mode is the random mode (random meaning chosing one of the presets)

Maybe editing the gates mode sequence could be an option, apart from preset ones?!

RYK M185

@hotelbachelard
Copy link

Hey this looks amazing!

So, stupid question....how do I put this into my Performer to test?

@vafu
Copy link
Author

vafu commented Dec 5, 2020

@hotelbachelard Thanks for the interest!
To install this follow installation guide from README page but instead of
git clone --recursive https://github.com/westlicht/performer.git do

git clone --recursive https://github.com/vafu/performer.git
cd performer
git checkout vafu/metro-pr

and proceed with installation

@hotelbachelard
Copy link

@hotelbachelard Thanks for the interest!
To install this follow installation guide from README page but instead of
git clone --recursive https://github.com/westlicht/performer.git do
cd performer

git clone --recursive https://github.com/vafu/performer.git
cd performer
git checkout vafu/metro-pr

and proceed with installation

oh boy, ok. i'll have to read through that.
thanks for taking the time to develop all these features!!! the screenshots look really promising already :)

@vafu
Copy link
Author

vafu commented Dec 5, 2020

@hotelbachelard how do you update the module usually ?

@hotelbachelard
Copy link

@hotelbachelard how do you update the module usually ?

I've only updated the module once for the latest firmware, and just copied the firmware file onto SD card.

@vafu
Copy link
Author

vafu commented Dec 5, 2020

@hotelbachelard oh, ok, I think I can prepare the update so you could update is without compiling code yourself

@vafu
Copy link
Author

vafu commented Dec 5, 2020

@hotelbachelard
please try this, it contains some update files, I'm not sure which you've used before so included some of them.
metro_update.zip

LMK if it worked for you!

@hotelbachelard
Copy link

hotelbachelard commented Dec 5, 2020

@hotelbachelard
please try this, it contains some update files, I'm not sure which you've used before so included some of them.
metro_update.zip

LMK if it worked for you!

Works great!! Just needed to put the UPDATE.DAT onto the SD and follow the manual update procedure.

Would you mind putting your negative gate offset test on this too?

Screen Shot 2020-12-05 at 12 20 57

Screen Shot 2020-12-05 at 12 20 43

@rotadsr
Copy link

rotadsr commented Dec 6, 2020

This is awesome man! Thank you!

@vafu
Copy link
Author

vafu commented Dec 6, 2020

@hotelbachelard this is a version with offsets metro_offset_update.zip

@hotelbachelard
Copy link

hotelbachelard commented Dec 6, 2020 via email

@vafu
Copy link
Author

vafu commented Dec 6, 2020

@hotelbachelard unfortunately there's a memory limit which doesn't allow us to go any more detailed that those few values. this would require hardware changes, using another MCU etc.

Glad to help, thanks for testing this!

@vafu vafu closed this Dec 6, 2020
@vafu vafu reopened this Dec 6, 2020
@westlicht
Copy link
Owner

It's very cool to see some firmware hacking happening, after all, this is part of the reason why I made this project open source from the beginning, so people can add new functionality as they see fit. I know that the multi-stage feature was requested by quite some people for quite some time now and the reason it hasn't happened yet is that I haven't really found a good way to implement this properly. Some background: Up until a few month ago, I was under the false assumption that I don't really have enough bits per step left to add these additional layers. Originally the step data was 6 bytes and pretty much used up. I then realised that a step was actually using 8 bytes due to alignment in the struct, which was a silly mistake. So yay, an extra 16bits was suddenly available for extensions. However, the multi-stage feature still seemed quite tricky to get right. Your current implementation is sort of "added on top" triggering the same step multiple times. Now this works, but is breaking some assumptions. To begin with, as you mention right from the beginning this only works if play mode is set to "free". I always try to make things in a consistent way, this means that it should also work with the aligned mode. It's arguable that this is not really necessary, but I don't like breaking existing concepts. So there are two possibilities, either this is implemented in a way that allows it to work in aligned mode, which is tricky, or we would implicitly switch to "free" mode when there is a step with multiple stages. It's weird if a feature is not working just because some seemingly unrelated settings are used. But even when implicitly switching, things are not behaving as expected, which is confusing IMO. It doesn't stop there. This interacts with so many existing things it's hard to make sure nothing breaks. Is this working properly (in an expected way) with track linking, recording, conditions, gate lengths, etc etc. Back when I put some thought into this I found it super tricky to get consistent and "right". So what I ended up doing was adding a new track mode which would offer a different sequencing concept more in line with the RYK/metropolis style of sequencing. This allowed me to make something that is self-contained and easier to understand/reason about. The downside is that it adds a whole new track mode and will probably leave out a lot of features that are already in the note track. So naturally people will ask why feature X is not available in stage mode when it is in note mode. Bottom line of all of this, I didn't yet come up with a concept to make this all work without it feeling "out of place".

Now, I really don't want to discourage this kind of development and I really hope you don't take this the wrong way. But I hope you understand when I don't merge this pull request right away and cannot even offer concrete steps to make the merge happen. This change has far reaching consequences and I really need to think about it before deciding which way to go. The great thing here is that people can still use the modified firmware and get their hands on this feature even if it's not in the main release. And I always hoped for this to happen, so please keep up the great work!

@vafu
Copy link
Author

vafu commented Dec 6, 2020

@westlicht I absolutely understand your concerns, that's why PR is still marked as WIP and probably will be that way for quite some time until it will be extensively tested by me and anyone willing to help :)
Though so far from my testing everything works as I would expect it to, including track linking, gate length, conditions etc. I've not yet tested tons of things but I've tried to touch as less code as possible and not break everything else.
Regarding Aligned/Free -- yes, I don't like either that we see some new NO-OP layers in Aligned mode so I was thinking to make every new layer this PR adds appear only if Free mode is selected. Or maybe to keep everything consistent we can create new Stage track mode which will be using same NoteTrackEngine but with Free mode by default and no way to switch to Aligned.
By no means I'm not trying to merge this right away, I've been in development for quite some time and I'd rather make sure that my PR is working as expected instead of creating tons of bugfixes later :D

I really love the codebase, it's a pleasure to work with the code, it's very well-thought and transparent, so thank you so much for this platform and making it open source!

@vafu
Copy link
Author

vafu commented Dec 6, 2020

@dragosandriana As suggested by you, I've added few more gate modes:

  • EACH ( |||| ) -- sends a gate for each step
  • FIRST ( |... ) -- sends first gate and waits for N - 1 pulses
  • ODD ( |.|. ) -- sends gate for each odd step of the stage (1, 3, 5)
  • TRIPLET( |..| ) -- sends gate for each third step of the stage, (1, 4, 7) creating triplet feel.
    image

compiled firmware is in description

@hotelbachelard Please try this as well :)

Also, as I wanted I've changed shift+function a bit for quick access

  • Shift + RETRIG enables REPEAT layer
  • Shift + LENGTH enables gate mode layer

@hotelbachelard
Copy link

Hi @westlicht - so great to hear from you, and thanks for taking the time to respond to these recent changes that @vafu made.
I absolutely appreciate your principles as a designer, and agree that for a module this complex and flexible and, as you say, where each part of the sequencer is related to many other functions, consistency and rigorous and thorough testing and thinking through implementation of new features are really important. And to be honest, being far, far away from being a designer and programmer, I was just excited primarily about the musical and rhythmic possibilities of the Step Repeat addition, as well as the negative offset.

I played with vafu's unofficial update today, and so far things are working pretty consistently on my end as well. Overdubbing the note track will erase any Step Repeat, as expected. I do like that the Step Repeat is part of the Gate menu rather than in a totally different track mode – for now. Even in its current state,

The only thing I found, as mentioned above, is that now, Gate on/off is now affected on every page/menu in the Step sequence, and not just available with the Gate page. I would like that fixed if possible, as I've been inadvertently turning steps off when I'm changing notes or other things.

Again, really really appreciate Simon's original fantastic design on the Westlicht and vafu's current flurry of work on it. It's really become a centerpiece in my system.

@vafu
Copy link
Author

vafu commented Dec 6, 2020

@hotelbachelard Ah, gate on/off from each page was my own changes that I did not intend to add here, sorry about that, let me revert those!

@vafu
Copy link
Author

vafu commented Dec 6, 2020

@hotelbachelard
metro_gate_fix.zip

here's update with fixed gate on every page

@hotelbachelard
Copy link

@hotelbachelard
metro_gate_fix.zip

here's update with fixed gate on every page

You're the best!!

@franq87
Copy link

franq87 commented Dec 28, 2020

has this version the midi fixes and improvements added on v0.1.38?

@vafu
Copy link
Author

vafu commented Dec 28, 2020

hi, @franq87, yes, this is branched out from latest upstream master (after v0.1.39)

@franq87
Copy link

franq87 commented Dec 28, 2020

hi, @franq87, yes, this is branched out from latest upstream master (after v0.1.39)

Cool, will check it this week for sure, thanks for this @vafu

@franq87
Copy link

franq87 commented Dec 29, 2020

@vafu I think I found an issue, when you copy a track that has different repeat values to another track, it copy the values but it only works as a x1 value, you can modify the value but it still playing only at x1

I'm having a lot of fun with this btw

@franq87
Copy link

franq87 commented Apr 27, 2021

@vafu Hi, just wondering if you had your branch updated to last v1.40

also, thanks for this branch

cheers

@vafu
Copy link
Author

vafu commented Jun 28, 2021

@franq87 sorry it took me so long to get back to you! I tried to reproduce the issue you've described, but copying all values to another track worked for me. did I get the steps right?

  1. set track 1 and track 2 mode to "Free"
  2. create a sequence using repeats on track 1
  3. copy pattern
  4. go to track 2
  5. paste pattern

@vafu
Copy link
Author

vafu commented Jun 28, 2021

@franq87 here are firmware files with metro updated to latest upstream version
only stage sequencing
with negative offsets.zip

@franq87
Copy link

franq87 commented Jun 28, 2021

@franq87 sorry it took me so long to get back to you! I tried to reproduce the issue you've described, but copying all values to another track worked for me. did I get the steps right?

  1. set track 1 and track 2 mode to "Free"
  2. create a sequence using repeats on track 1
  3. copy pattern
  4. go to track 2
  5. paste pattern

Hey hi! I've just repeated again and it is all working, It seems I forgot to put the track on free mode

all working like a charm, super thanks for the update!

@franq87
Copy link

franq87 commented Jul 5, 2021

@vafu this is not related with metropolis sequencing but, I was just wondering if you see possible to enable step up as a destination on the CV assignments? Maybe running the track in free mode as your metropolis sequencer does? This would be super handy for using the performer to quantize random trigs/gates when dropping some s&h in

@vafu
Copy link
Author

vafu commented Jul 7, 2021

@franq87 what do you mean by "step up" in this context?
like advancing the step by external trig?

@franq87
Copy link

franq87 commented Jul 7, 2021

@franq87 what do you mean by "step up" in this context?
like advancing the step by external trig?

that's right, not sure if it would be very difficult to implement as the track should remain static until an impulse is received to one of the four CV inputs as long as the other tracks keeps running, but having that option would open the possibility of using a track as an arpeggiator, a quantizer for S&H sequencing among other things

@drChungus
Copy link

Hey, absolute joy to have this alternate firmware, thanks for the contribution.
I wanted to note that after updating the module to this FW the Arturia Keystep became compatible with the device. I wonder if any tweaks were done to facilitate this?
In any ways, I take it! :D

@MF303
Copy link

MF303 commented Jan 14, 2022

Hi nice work on this feature @vafu
Is there a firmware file available with this feature for the latest upstream version? (v0.1.41)

Btw the negative offset (1.40) firmware is missing the gate probability page not sure if this can't be implemented with the negative gate offset or you just forgot to add it in that firmware.

@jbjhjm
Copy link

jbjhjm commented Jan 21, 2022

ohhh that looks neat!

@westlicht did you consider adding this as optional 4th sequencer mode - note, cv/midi, curve, metro-note?
Or are your concerns more about cluttering the codebase?

@franq87 I was thinking about that idea too, it would be cool for generative sequences to be able to index steps by cv or advance manually. But I found an older issue where westlicht stated it would be quite troublesome to introduce such behavior into the current code logic.

@drChungus
Copy link

@franq87 : you can abuse routing to address notes in a sequence byan external voltage. Route VCin to Fisrt AND last note (using two different but related routings) and you can have a one step long sequence, where the note is selected by the CV in and the step is triggered the conventional way. You can also use an internal sequence to route this instead of an external CV btw...

@franq87
Copy link

franq87 commented Jan 21, 2022

@franq87 : you can abuse routing to address notes in a sequence byan external voltage. Route VCin to Fisrt AND last note (using two different but related routings) and you can have a one step long sequence, where the note is selected by the CV in and the step is triggered the conventional way. You can also use an internal sequence to route this instead of an external CV btw...

I haven't explored this way, will try definitely

@hotelbachelard
Copy link

@franq87 : you can abuse routing to address notes in a sequence byan external voltage. Route VCin to Fisrt AND last note (using two different but related routings) and you can have a one step long sequence, where the note is selected by the CV in and the step is triggered the conventional way. You can also use an internal sequence to route this instead of an external CV btw...

That's exactly what I was going to suggest as well. It's one of the reasons the Westlicht is a keeper for what I need, that you can CV not only the last step (which merely changes pattern length on most other sequencers), but also the FIRST step, which allows you to loop/"window" smaller sequences within a longer pattern.

I can say that @vafu's firmware is great. I've been using it for a while now. The only bug I still see is that the Gate probability bar for each step is not visible, as it usually is when you're on that page in the official firmware—the function still works and you can see the probability percentage bar if you press on a particular step. I have not tested all the conditional stuff though.

@jbjhjm Yes, Simon has been quite meticulous on what sorts of features he "officializes," since any additional mode or feature can impact a number of other functions in the sequencer. Despite selfishly wishing for a few more features, I really appreciate Simon's vision of consistency.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants