Octocontroller Clone
  • Let's make an Audulus version of the Abstract Data Octocontroller and make @biminiroad use his ES-8 to control his modular with all 8 outputs ;)

  • i didnt even think about the es-8.. :)
  • Sounds great...
  • i just realized we can def use my tempo synced lfo for it.. cause in the original eurorack modul you can choose between free running and synced lfo´s .. where i have big problems is how to produce a clock and how to divide/multiply it... i tried to reverse engineer already existing moduls in that case but my knowlegde is far too small at this point to figure it out... still searching for good material to learn more.. i m totally thankful that @RobertSyrett joined the idea of cloning this massive modul! hope to learn alot from you guys!
  • That's quite an undertaking, but the manual's really good.

    @Phal_anx There's already a clock module and it's a case of multiplying or dividing the hz coming from it. So a start at this might look something like this patch... although there's much better and sleeker ways to express such functions, but I'm not afta8. I'm going on knowledge from the first computer studies O level and the first year of /a level maths, 30 years ago and I haven't even come across half the stuff in here yet...

    The clocks are set up as per instructions in the manual so that the lights blink longer on the first beat of the 16 bar cycle, I think, my graphics card's not accurate on the lights.
    Audulus data Octocontroller.audulus
  • I was thinking we should start by measuring the period of an incoming gate signal, since that is how the octocontroller receives information. Then when we have that we can multiply and divide accordingly. Does the octocontroller have internal clock generation?
    Screen Shot 2017-03-11 at 10.37.47 PM.png
    912 x 344 - 50K
    bpm detection.audulus
  • According to the manual, it has an external sync input that it will slave to. That's the hz input to the internal clock, although a gate trigger. That means this units clock will sync to it during any tempo change, sample accurate. Therefore this is required by the specs, is it not?

    Your lfo device has a hz input, the value which you give 1. That is the period of the incoming gate signal in hz which is what you need, if you divide that by 60, that's bpm. Maybe a gate input is needed to reset all the clock once so it's synced with everything else in the rack at the start, I'm not sure of the protocol on that.
  • @RobertSyrett - yes it has an internal clock generation and it can slave to an external clock source like jimbo said.

    EDIT: All output types can be synced to the on-board clock or to a clock supplied to the external input and
    will output a 64 beat / 16 bar cycle at tempos between 20 and 270 BPM.
    (from the ade32 manual)
  • There's just one more thing, A lot of dedication and effort by someone has gone in to this. Maybe an emulation would not be a suitable thing to do? ...Or maybe it would be good. I don't know, would it not be better to make something with a different twist. I do like this thing though, looks like just what I need to get going on my audulus journey... What are the general feelings on this?
  • i totally respect the creator of this massive tool! i dont have any eurorack or external hardware and with audulus its possible to recreate stuff like this... so why not doing a clone... you will find different clones of hardware even in reaktor etc...

    i dont know how accurate this bpm clock thing is but this is how we could easily set the range from 20-270bpm for the internal clock.. i used a crossfade with a midi trigger to change between ext / int clock source.. this needs to be automated via an expression.. if a signal comes from a take a instead of b.. something like this
    1920 x 1080 - 148K
    Octocontroller clock.audulus
  • you can still update it and add other feature if you want it with a different twist :) thats the freedom of audulus... it would be like hacking the hardware.. if you know how to do it you could just do it... my clone of the twinpeaks filter is already updated on my side... now i can choose between 12/24db also i will make an option to change from parallel to serial and back (you cant do that with the original hardware) in the next days..
  • My feeling on that is Audulus patches aren't going to cut into the margins of people creating hardware. I get the impulse, but there are enough people that are hardware only that replicating a module's functionality in Audulus isn't like, say, Behringer creating a Minimoog eurorack module and undercutting their price, too. Plus, building a library of Euro-style modules helps support great companies like Expert Sleepers, too! :)

    That said, no problem with making something better, either!
  • Ok, that sounds about right, I can see it's difference and I think the more ears it reaches, the more people will get into it, so, ok... Here's a patch but it's pretty much empty so far. Am going to have to contemplate this, I'm already stuck, how the selection knobs take over control of the lights from the previous section knobs, anyway, I'm burning myself out here, need sleep and then will contemplate this later. That clock idea's a very creative one Phalanx, I'm constantly surprised at ways and methods I'm seeing. I've never thought of blending in to another master clock but is that necessary? That's the limits of the hardware, there aren't the same limits in audulus. Audulus is already set up. The bpm range is set in the expression from the first knob. Anyway, I'm done for the moment, back after lots of rest.
    Audulus data Octocontroller.audulus
  • @Jimbo - I m still a noobie... didnt touch audulus for a very long time.. as i always had some small problems using it when i bought version 2.. now i m back as i got v3 which is far more advanced :) i just do try if it works.. i dont know about any limits hahaha
  • this is exactly something i do not understand at all... what it does is clear but how you come up with that... what programming language is that?
    1016 x 391 - 42K
  • @phal_anx - that's "If Hz is a non-zero value, pass Hz signal to the output. Otherwise, pass BPM signal."
  • @biminiroad - thanks, now that makes sense... but it would help to know which kind of language is that... i want to learn it for future projects.. i dont want to ask every time i m in need of something like this :D
  • It's Boolean Logic. Check out the attached patch:
    Logic Cheat Sheet.audulus
  • That's missing the != operator, which is "true if does not equal"
  • amazing :) now thats something to work with :D
  • My thoughts are, that we are building the octocontroller primarily for educational purposes. What will likely happen is after we finish it we will cannibalize parts of it for our other patches and projects.

    @Jimbo starting with a faceplate is a good way to conceptualize what the final product will be, however it may not be the most natural way to approach developing how it works. I would like to propose just making the components and diverging in the approaches we can take, and then converging on a final design again that will fit into the faceplate you have designed.

    Perhaps we can make a mono controller that does what one channel of the octocontroller does?
  • Exactly - reverse engineering something is a great way to learn how it works. It's also honestly a nice way to demo a module to see if you'd actually want to buy it - I mean the RCD by 4ms is a cheapo module - you wouldn't necessarily want your ES-8 on full duty doing that all the time.
  • @RobertSyrett Agreed, The face plate contains all the information so I can instantly picture it just by looking at it, so I went ahead and did that. I like the idea of building the set for one output, this is what I need to learn and is why I'm going for it, so it's a good exercise.

    I was thinking about the aspects of control and was thinking that would come together as the components have been built up. It would be a cool thing to have a mono controller for a whole channel strip of parameters.

    When converging on the final design, the menu system will need to be done slightly differently because in the hardware, a requirement is that 2 buttons need to be pressed at the same time, which can't be achieved with a mouse, so an alternative for that will need to be considered. I already have alternative ideas on this but will come back to that later.

    @biminiroad Going back to something you said earlier "no problem with making something better, either!" ...I'm new to modular so any would be good. I've thought of a different type which I think would be a good addition, a cv exp/log rise and fall envelope, quantised at the peak, meaning the offset would have to be altered to start earlier, but anyway, this all may take a while to achieve, will be a gradual process.
  • I'm going to be focusing on page 11 of the manual and try and make a bank of gate loops.
  • So I made a gate divider/multiplier that just has a ratio for it's interface. It's something I know I will find handy, and can likely be used to emulate the actual way octocontroller tempo presets work (which I am still finding a little confusing). Also I put all the patterns into a switchable bank and I make it a simple sequencer using the ^V counter. Finally I made a patch where some patterns trigger the drum sounds and other patterns mute the drum parts.
    Loop Bank.audulus
    Screen Shot 2017-03-13 at 10.23.20 PM.png
    1353 x 515 - 74K
    Screen Shot 2017-03-13 at 10.27.30 PM.png
    1468 x 1005 - 394K
    Page 11 loop demo.audulus
  • That's great but the timing is assigned through the menu system from the options on the front panel. The clock hz value is saved in a sample and hold which connects to your clock.
    1366 x 768 - 226K
  • However, if you can deal with the offset, that would be good, if you can rotate the pattern according to the amounts on the front. You'll get the menu choice for offset delivered at a sample and hold node which will be connected to your unit as you dial it in the menu.

    I've done more on the patch, you can now program in TYPE, DIV & OFFS for output 1, and recall them. I've done it slightly differently to the hardware because the same can't be achieved but I think mine's better so far. Try selecting TYPE, DIV or OFFS. The selected patch is at the red light and the knob position at the green light. If they are on the same selection, the light will go orange. Move the knob for the selected column and the knob lights will scroll. Press edit and the knob will latch on to the selection as it passes it or will jump to the knob position if you press jump, while the edit is still selected. To release editing, either press edit, select another column or select a different output, all will release edit mode. Only the mult/div function is arriving at the sample and hold for the clocks at the moment. however the selection type for the menu system are stored in them, so the settings for the output can recalled.

    I need to get the offset done next, then start doing the types...
  • Here are some more sub modules. Hopefully they will fit into the framework a little better.
    Divided Clock.audulus
    Screen Shot 2017-03-14 at 12.06.24 PM.png
    1348 x 723 - 115K
    Page 12 Arp Bank.audulus
    Screen Shot 2017-03-14 at 9.09.13 PM.png
    786 x 612 - 62K
  • Wow that's a lot of intricate workings, the arps look good. I think this will take a while but I'm sure it'll be a packed module, something which could be expanded further still.
  • What way of creating a pattern offset do you think would work best? I am trying to think of a way to use the timer module as that would be most cpu efficient. I am a little worried that we might overwhelm the cpu with 8 x a mono controller with current cpu usage. If only I was a genius like plurgid...
  • We need to find a way of delaying gate signals precisely. In an equation preferable so that variables such as hz are included.

    The first setting is to rotate foreward a 1/16 note within a bar.
    The length of a 16th note in a bar is (hz/15).
    There are 16*(hz/15) in a bar so rotating the timing forward by a 16th note means delaying it by 15*(hz/15).
    The change comes in on the next bar and there will be extra settings for when the change comes in.

    So if anyone can help us on this, to be able to control precisely the timing of the delay preferably in an equation, then I think we'll have cracked the key to this.
  • @ RobertSyrett, am looking at your timer, I didn't know there was a timer node...

    I just corrected figures in my last post. The clock method has changed slightly
  • ...Yeppers Robert, that's it!
  • Sorry, I meant timer node.
  • I think I've done it, not tested yet and I'll have to check the extra optional functions, I know of one that I need to add. It's programmable from the front panel too. I cleared up a few mistakes as well, will come back to it shortly.

    Edit: am dealing with a z that moved, latching stopped working in the programming but I can fix that.
  • What's that one counter doing waaaaay off in the corner?
  • i think this was by mistake :) maybe he included a counter but didnt find it :D
  • btw i shocked how far you guys are already!!
  • Ok, the offset is working better, more work to do on that concerning when to trigger numbers like 1/3s. but somewhere along the line the latching mechanism for divs and offs stopped working because a z moved and I haven't worked out why yet. The type column latches ok because the z is in the right place in the multiply node. Why aren't the div and off mechanisms zs' in the right places?

    I couldn't find that node right out there earlier, got it now.
  • Here is an isolated version of the gate offset mechanism along with a noodle patch.
    Offset Noodle.audulus
    Gate Offset.audulus
    Screen Shot 2017-03-15 at 1.39.11 PM.png
    964 x 690 - 110K
  • Wow, It looks amazing but I find it so difficult to follow, am going to need more time to conceptualize it all.
  • Each clock pulse is a quarter note, so you measure the period and multiply it by 4 to get the period of the bar. Then you multiply that by the 1/16 or 5/8 or whatever and that is your offset in seconds.

    You set a timer node to be triggered at the start of each bar, when it is greater than the offset value, it resets the internal clock and your output will be offset!

    I also put a sample and hold in there to make it change the offset value at the start of bars.
  • Ok, got that, If the division is a third though, it will keep retriggering but it needs to keep it's 1/3 note timing. Also, if you have a division of say, 8 bars, that needs to be offset but still triggered every 8 bars rather than every bar. I didn't make that clear before but some of these things only come to me as I work my way through it. Sorry about that.

    And if anyone can help with zs, that would be great.
  • z problem solved, it was because I unhooked a value meter from the node before it. I put it back on and it's working now!? Time for a break!
  • Yeah, I have a hard time conceptualizing data feedback loops in audulus also. I think the gate offset can be modified to work with resetting a sequence over a number of bars, but it will require some tweaking.