0.3.0: Cue system

Hey all,

At Superbooth I’ve already shown the cue system, but that is certainly not the only thing I’ve been working on the past months:

Highlights:

  • Added Cue system:
    • Create cues: timelines with ‘cue steps’ that can trigger actions such as: setPattern(), setNoteList(), setMotion()
    • Chain cues together with switchCue() or embed cues into other cues with startCue()
  • Optimizations in to amp envelope code resulting in reduced CPU usage for several sound engines:
    • Subtractive: 3.3% → 2.7%
    • FM: 4.1% → 3.3%
    • Additive: 6.8% → 6.0%
    • Resonator: 5.6% → 4.7%
  • Lowered CPU usage for additive when fewer partials are active.
  • Added turbo oscillator type to subtractive: 8 bright oscillators that can be shaped from saw to pulse, with pulse width and (hard) sync parameter.
  • Added algo parameter to limiter: the new fast algorithm (~2.0%) uses significantly less CPU than the old clean algorithm (~7.0%).
  • Added chance parameter to granular which sets the chance of grains actually triggering.

Other changes and bugfixes:

  • Added option for setting a static IP address.
  • Added the ability to change the BPM by tapping the BPM encoder.
  • Improved resonator tuning in high octaves.
  • Reduced clicks when modulating additive parameters that affect the loudness of partials (such as volume x, partials, peak and comb filt.)
  • Improved granular visualisation: shows analysis progress % or highlights the most recently picked grains.
  • Added indicator when changing sample preview volume in the file browser with Y.
  • Removed preview samples parameter: sample preview in the file browser can now be disabled by turning down the volume.
  • When recording audio from the outputs or one of the tracks, the audio recorder now automatically determines what channels are used instead of just recording channel 1 and 2.
  • Fixed bug where loading projects with very long samples caused a crash.
  • Fixed bug in the note list editor where a note’s octave jumps to an incorrect value after multiple are added.

Here is the new firmware: polypulse-firmware-0.3.0.zip (976.0 KB)

See here how to update your PolyPulse . Note that the file manager only recognizes *.zip files whose name starts with polypulse-firmware- as firmware updates.

Enjoy! :yellow_heart:

5 Likes

So looking at the cue and it’s function system in the manual I’m a bit lost in the terminology you have adopted… It’s fine and likely very understandable in practice…

But for a non user looking in I a bit lost at see (in between arguments and statement of loops that may or may not be true or false if or else (XOR?) to stay afloat and all the decimals in-betweens…

I can sense the brilliance of an highly evolved song mode that’s liquor of free flow vs the standard pattern chaining yet outside the normal sets of pattern, note list and XY motifs the cue’s seam very foreign… I’m sure I’m not the only one who has never seen anything like this

Can you comment on how you’ve invisioned these cue functions, the philosophy and some examples in practice :yin_yang:

So the cue system has two parts:

  • Each cue has a timeline where at certain points in time (‘cue steps’) you can have stuff happen.
  • Each ‘cue step’ is a list of things that are done (switch to pattern/notelist/morph etc) once that ‘cue step’ has been reached.

The cue system can be used for:

  • A way to have multiple changes when a button is pressed. In this scenario you put everything you want to happen in the first ‘cue step’ so that when the cue is triggered by pressing [cue]+[a keyboard key] all the commands are done. You can see it as shortcut to do multiple things at once.
  • A song mode or arranger with some algorithmic tricks. Put switching patterns/note lists on a timeline to compose a song. You can also use multiple cues: each cue being a section of a song such as the chorus, verse, bridge etc. Then cues can be chained with switchCue() or nested with startCue().

In practice when using the cue system, most stuff you need to know is here Cues - PolyPulse manual and all the extra info here Programming reference - PolyPulse manual you mostly don’t think about when using the PolyPulse.

2 Likes

Thank you!

Just a quick follow up so I can get my head around this

Where does this cue timeline live? Is it a global linier timeline and all the tracks responded to?..

Each of the 25 cues has its own timeline that has at least 1 cue step or a lot of them. Playback of the timeline is synced to the main BPM, and when triggered by [cue]+[#] the timeline starts directly, on the next beat or on the next x clock ticks.

2 Likes

Interesting approach… So you can set up a cue on bar 16 as drum roll /fill and another on bar 64 to change from say the " intro" to " groove1" and so on and so forth…

Love it!.. As you can easily “view” /jump to any point in a song by just hitting the affiliated cue

Also the note assignment to cue’ s is a very nice way to sequence the PP externally…

Awesome!!.. Just awesome!!

Ps can u freely copy and or move cues around the 24 trigger keys?.. I’m guessing the answer is of course :smirking_face:

One more thing…

How do you chain cues into a song mode? I realize there’s no song or playback-head location markers/controls—just a clock on/off.

Ideally, in a studio setup, program/note commands work great, but sometimes you just want to sit down with a clear, simple workflow. So I’m curious: how is a song structured on the unit itself?

1 Like

So there is several approaches to doing it:

You could make one big long cue with the whole track in it. The downside would be that currently you can only start a cue at the beginning, so then editing the track might be annoying as it starts from the beginning each time.

A better way would be to split the track into separate cues with each section being stored in a separate cue. There’s two ways to approach this:

  1. Put a switchCue() at the end of each section: after the cue is done it will start the next cue once the end is reached. The limitation here is that cue X will then always go to cue Y. This approach you could call this ‘chaining cues’.
  2. Create one cue that contains the ‘main’ track structure (chorus - verse - bridge - chorus - etc…). The ‘main’ cue contains several startCue() commands to start the right sections at specific points in time. The benefit here is that the ‘main’ cue decides for how long each section plays: you could play the verse shorter the after the second chorus for instance.
1 Like

this calls for ‘Follow’ actions
(what to do when cue is at the end/finish)
like, repeat, jump to, stop, restart etc etc