Modifying sheep to quantise
  • I’m hoping mqtthiqs sees this one and Olivier could confirm space left.

    I’ve wondered if it would be possible to take the sheep firmware and add the quantiser code from the tides parasite. I love both of the firmwares and the addition of the quantiser to the standard tides code makes it possibly one of the most useful additions freeing up hp and other things to deal with random cv’s thrown at them. Useful additions to turing’s especially. ( 6 when I run all my peaks with DMC )

    So in trying to build something that resembles a 259e type of block I have an Sto and tides with the sheep firmware. With a disting to quantise. However the Disting is a power hungry little thing and the deepest module in there, so getting rid of it for a elektron cv adapter plate I made up would be great.

    Olivier, would it be considered to add this across the board on tides? As with the extension of the low pass when the standard tides is running as an osc? The parasite additions in these two cases could take the out the box functionality of sheep and tides to a meteoric level.

    I’d probably end up with a couple more if this was the case, although as it stands my big case already looks like it should have “sponsored by mutable instruments” emblazoned on it :)

  • Hi Steven. I Did see this :)
    It’s possible, yes, and should not require huge efforts either, unfortunately I am rreally, really lacking the time… Maybe some of the other modders could try (code is on my Github)?

  • Great! I’ll have to have a look through the code and see if can work out where it sits. In your tides repo did you remove the wave table switches? In which case it should be simple enough from what else I remember and have read

  • No, the WAVETABLE_HACK macro is still there, but there will probably be more of my code to comment to fit everything into flash.

  • Anyone get started on this? I cherry-picked what I think are the relevant commits for the quantizer from @mqtthiqs repo onto the latest MI code on this branch

    It seems to work, after compiling with WAVETABLE_HACK however there were a lot of audio glitches. On a hunch I used IN_RAM on the SR/ProcessWavetable functions and the artifacts went away, but it might just be coincidental and need further investigation (and I’ll double-check it’s not just my env by building it in the VM). I seem to remember @pichenettes mentioning subtle code changes sometimes leading to timing issues on Braids (weird flash read delays?) so the buffer update might have been a smidgen too slow.

  • I’ve been trying to find time to start, hopefully work calms down for a bit.

  • Haven’t gotten around to investigating the glitches further… Although I think now that IN_RAM for code might actually be slower on f103, but possibly more consistent. Having trouble keeping my platform specs sorted :)

  • Just dropping a vote here for support! Such an addition would be more than great!

  • Any news on this project guys?

  • So! Any developer have tried this? Is Sheep able to quantise? At least one scale, maybe the Chromatic? Wavetables are extremely lovely when they are sequenced by musical notes…

  • @norde, yes, @pld has tried it, as he notes above – it just needs more testing, but Patrick made the necessary mods to the firmware back in Feb. I’ll try to find some time to test his code, would be good if others could as well.

  • ok thank you very much for your efforts!

  • Just ordered a Tides so interested in how this pans out!

  • Yes, I guess I didn’t make it very clear: the code I linked above uses Parasites’ quantize code/UI and “it worked for me” in a quick test when compiled as Sheep. I haven’t gotten around to looking into the artefacts that were present before I added the IN_RAM hack, so it’s still ‘experimental’ though.

  • Hi guys, finally dug out some time to have a look at try testing this. However I was wondering if I need to set a flag anywhere when compiling tides to use the sheep mode? As in where do you modify / or set the “compiling with WAVETABLE_HACK” point? Been searching the source with no luck.

    Any help is greatly appreciated.

  • Hehe, totally forgot about that… I think what I was doing to compile it was:

  • Alas, no joy, tried various combo’s will see if I can locate it. Unless of course you have a wav kicking about anywhere.

  • The #define gets used in generator.h.
    I don’t think I ever made a WAV since it wasn’t really releasable and I have JTAG...
    And that should of course be:

  • Brilliant! I was placing the -f in the wrong order.

  • I’ll test a little tonight and if the wav works I’ll post a link for anyone else who wishes to tentatively try this. As for me it saves a nice modules’ worth of space not needing a quantiser as well as sheep.

  • just tried the firmware file there, unfortunately it seems not to compile with the quantizer using that. Just out the box sheep.

  • Are you compiling the `tides_quantizer` branch from my repo? And the quantizer isn’t enabled by default, it uses the same button combo as parasites to activate it/select scale.

  • Doh! I didn’t change branches.. I think my mind is a little broken just now.

  • IT LIVES!! So far no noticeable issues modulating the living daylights out of everything.

    The most fun so far is taking tides with the parasite too and a couple of turing machines then the bi-polars out of sheep and tides to a CFM bipolar wave half rectifier. it’s like a never ending possessed music box.

    PLD, thanks!

  • So do you mean that there is a wav with a firmware that quantises Sheep somewhere in this world? For real?

  • Cool. Like I said, it works (mqtthiqs code is obviously sound) but there’s something fishy going on that can cause audio glitches (continuously). That appears to be compiler/build related, but 99% of the time when I want to blame the compiler, it’s not ;)

  • Cool to see this (almost) happening!
    Did you keep my set of scales intact? The choice wasn’t very though out, now I wish we had a more thorough selection… Maybe someone will have a better set?

  • > Did you keep my set of scales intact?
    Yes, I really just cherry-picked your commits and merged/made things compile where necessary. There’s a bunch more scales in Braids’ quantizer for example, although they’ll need some reformatting at least.

  • I’ll maybe do a bit of that this weekend. Might even lob a couple of microtonals in for fun

  • Just to clarify, @mqtthis

    the following code defines a semitone limited frequency of 12 steps in each case with the multiplier of *128 indicating the limit for the CV in or the Frequency out? Just to try to work back from scala outputs.

    #define SE * 128

    const uint16_t quantize_lut7[12] = { /* semitones */ {0, 1 SE, 2 SE, 3 SE, 4 SE, 5 SE, 6 SE, 7 SE, 8 SE, 9 SE, 10 SE, 11 SE}, /* ionian */ {0, 0, 2 SE, 2 SE, 4 SE, 5 SE, 5 SE, 7 SE, 7 SE, 9 SE, 9 SE, 11 SE}, /* aeolian */ {0, 0, 2 SE, 3 SE, 3 SE, 5 SE, 5 SE, 7 SE, 8 SE, 8 SE, 10 SE, 10 SE}, /* whole tones */ {0, 0, 2 SE, 2 SE, 4 SE, 4 SE, 6 SE, 6 SE, 8 SE, 8 SE, 10 SE, 10 SE}, /* pentatonic minor */ {0, 0, 3 SE, 3 SE, 3 SE, 5 SE, 5 SE, 7 SE, 7 SE, 10 SE, 10 SE, 10 SE}, /* pent-3 */ {0, 0, 0, 0, 7 SE, 7 SE, 7 SE, 7 SE, 10 SE, 10 SE, 10 SE, 10 SE}, /* fifths */ {0, 0, 0, 0, 0, 0, 7 SE, 7 SE, 7 SE, 7 SE, 7 SE, 7 SE},

  • Since it came up recently elsewhere, you can convert from cents by x1.28, or from ratios using 1536 * Log(ratio)/Log(2) — the Braids quantizer we re-/abused in O&C is slightly different, but uses the same span so some of this might be interesting.

    The CV input converted to octave & semitone, then the semitone is used to lookup an entry in the scale LUT to generate an output pitch. So each scale has to have a fixed number of entries (12) and defines the notes in one octave. An octave spans 12 x SE(128) = 1536 steps (7mus as I recently learned) so you can setup the LUT entries around that. If the scale uses fewer than 12 notes, they’re repeated to pad the table.

  • This is it, I need a second Tides. God damn

    Thanks for doing this!!

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

In this Discussion