Tides envelope shift phase rather than slope


Got a Qu-bit Chord module recently and had the idea of trying to get some strumming/arpeggio like patterns out of it. I’m running the 4 voice outputs into a quad VCA with the 4 outputs of Tides controlling the VCA channel amplitudes.

Thought Tides would be a perfect partner for this as I’m always using the “Different Time” / Phase Shift mode when in LFO, and it is nice in that mode for some droning patterns. But after a bit of patching and rereading the manual I’d forgotten that the envelope mode functions different to LFO mode, controlling the slope of each output rather than the phase. So I’m finding it’s not possible to get strumming or arpeggio patterns, at least not in the way I imagined.

I’m wondering if anyone has any tips for getting this behaviour out of tides (mb somehow holding the LFO and resetting it), if anyone knows of any firmware versions that do this?

Ideally I’d like to have Tides in AD or AR mode, set it to Different Times mode, then when sending a gate to the Trig input envelopes would be triggered out of phase, or effectively delayed, from each other. And you could use the Shift/Level dial to alter the phase/delay. Similar to behaviour LFO mode the dial at 12 o’clock would trigger all at the same time, shifting the dial left or right would alter the phase/delay until it reaches it’s most extreme at either end of the dial range.

Or if anyone has a bit more experience with this, would this be something achievable by an amateur coder like myself?

Having a look through the code I think it might be something to do with the “poly_slope_generator.h” file, maybe with these lines sections

Line 263:

 // Increment ramps.
  if (output_mode == OUTPUT_MODE_SLOPE_PHASE && ramp_mode == RAMP_MODE_AR) {
    if (ramp) {
      ramp_generator_.Step<ramp_mode, output_mode, range, true>(
          f0, per_channel_pw, stmlib::GATE_FLAG_LOW, ramp[i]);
    } else {
      ramp_generator_.Step<ramp_mode, output_mode, range, false>(
          f0, per_channel_pw, gate_flags[i], 0.0f);
  } else {
    if (ramp) {
      ramp_generator_.Step<ramp_mode, output_mode, range, true>(
          f0, &pw, stmlib::GATE_FLAG_LOW, ramp[i]);
    } else {
      ramp_generator_.Step<ramp_mode, output_mode, range, false>(
          f0, &pw, gate_flags[i], 0.0f);

And this section in the “compute shape” chunk of code starting on line 321:

  } else if (output_mode == OUTPUT_MODE_SLOPE_PHASE) {
    float phase_shift = 0.0f;
    for (size_t j = 0; j < num_channels; ++j) {
      size_t source = ramp_mode == RAMP_MODE_AR ? j : 0;
      out[i].channel[j] = Fold<ramp_mode>(
              ramp_shaper_[j].Slope<ramp_mode, range>(
                  ramp_mode == RAMP_MODE_AD ? per_channel_pw[j] : pw),
      phase_shift -= range == RANGE_AUDIO ? step : partial_step;

Anyone have any experience with this code before? Or any pointers on getting to grips with it? It’s a bit above my head at the moment, but I’m going to keep reading and see if I can make sense of it.

There is no trivial way of modifying the code to make it want what you want to do.

Thanks for the info @pichenettes! I think it might take considerably more reading/learning for me to be able to implement this feature then. Maybe something to aim for.

For now I’ve made a quick version in Max/Max for Live to send out of an ES8/dc coupled interface. Although I don’t have the spare 4 output channels for that most of the time.

I’ve also been looking at the new Befaco Lich version of the Rebel Tech Owl, and also the Electro-Smith Daisy Patch so I might re-write the code in Max Gen and put onto a module that way for now.

Out of interest does anyone here have the knowledge and experience to edit the firmware and implement this feature for a fee? Maybe @qiemem what with your amazing Stages adaptation which I’ve been enjoying :slight_smile:

Alas I am Tidesless and without much time for firmware hacking at the moment. Otherwise would be interested in playing with it.

FWIW, I often use Stages for strumming effects (surprise surprise :stuck_out_tongue_closed_eyes:). In this case, four red segments could be used as CV delay to add a delay of the four envelopes.


Thanks for the reply @qiemem. If you ever find yourself with a Tides and some free time let me know :). Will have an experiment with the Stages idea too!