Orca - alternative firmware for white whale


#81

yeah, there is something super exciting about seeing Orca respond to a typed command. i only have 2 commands implemented so far (bank and preset select), partially because i tried using TT pattern for bank selection (especially when triggering TT with one of the Orca triggers) and it was so much fun i lost track of time!

so here is what i’m thinking for Orca command set:

ORCA.SCALE - select scale
ORCA.RANDOM - randomize current preset
ORCA.BANK - select bank
ORCA.PRESET - select preset
ORCA.RELOAD - reload preset (value of 8 reloads all presets in the current bank)
ORCA.ROTATES - rotate scales
ORCA.ROTATEW - rotate track weights
ORCA.MUTATE - mutate current preset
ORCA.GRESET - global reset
ORCA.CLOCK - advance specified track counter

then there are commands for individual tracks. instead of repeating each of these 4 times for each track what i’m planning to do is have one command for each parameter which will apply to the currently selected track, and there will be a command to select current track.

ORCA.TRACK - select current track
ORCA.DIVISOR - set the divisor
ORCA.PHASE - set phase
ORCA.RESET - reset the current track
ORCA.WEIGHT - set the weight
ORCA.MUTE - mute or unmute trigger

this does mean you might need to use 2 commands to set a parameter:

II ORCA.TRACK 0
II ORCA.DIVISOR 5

but i actually like this because then you can do interesting things like using trigger scripts to change parameters but have something else select the current track (like M script going through the pattern).

it’s worth noting that if you change presets via TT the change takes place immediately to allow for tight sync (when you change presets using grid the change happens on the next clock so you don’t have abrupt changes).

one of most interesting things TT/Orca integration brings is individual clocks for each track. this should really open it up in the way that wasn’t possible in Orca alone. i thought of how this should integrate with the master clock, one option would be to provide another command to stop track from following the master clock, but then it would be strange if you forget you did that and you can’t figure out why some tracks don’t move!

so instead tracks will follow BOTH the individual clocks and the master clock. this could actually make for some interesting results as well, especially if they are out of sync. but if you don’t want them to follow the master track then just simply insert a dummy cable into the clock input so the master clock stops, and supply individual clocks for each track, and you can share the same clock between different tracks like this, for instance (don’t remember if Loops can be used with remote commands?):

L 0 3 : II ORCA.CLOCK I

#82

Very exciting!

Two suggestions I would make are:

  1. consider using fewer characters for the commands. For example instead of full ORCA, why not just OR or OC? And instead of DIVISOR, just DIV, so instead of ORCA.DIVISOR, you’d have OR.DIV which is using half as many characters.

  2. I would reconsider the idea of having to use two lines to address specific track. I think it would be much better to say:
    II OR.DIV 0 5
    instead of:
    II ORCA.TRACK 0
    II ORCA.DIVISOR 5
    so, only using 10 characters instead of 28.

Both of my comments come from consideration for the very limited “realestate” on teletype. Commands have to fit in one line, and you only get 6 lines per script. Based on my experience with teletype so far, there are definitely situations when I bump into those limits.

p.


#83

I totally agree with point #1 here.

Unfortunately, II commands can only accept a single argument, so it’s not possible to use your suggested implementation. Personally I don’t mind the requirement of having to explictly select the track, as it aligns closely with the way the pattern system works.

Oh, and this is super exciting to see community development like this! Keep up the awesome work.


#84

1 - makes sense, i’ll shorten the names. it does look nicer with the full name :slight_smile: but you’re right about the limited space.

2 - yep, what @Galapagoose said! it would be nice to be able to have a second parameter for remote commands but it would be a pretty significant change.


#85

Good to know.

As to the pattern selection system.
I kind of wish it was possible to not have to call out the pattern “to foreground” with a separate command either :smile:

Just to learn: what is the reason for this approach? Why not two or even three (when setting a value) arguments?


#86

forgot to add: with Orca i could also implement another option where you would incorporate 2 parameters into one. say, using track div as an example could do something like this:

OR.DIV x - sets the divisor for the current track to x 
OR.DIV 1tx - sets the divisor for track t to x, for instance:
OR.DIV 125 - set the divisor for track 2 to 5

not very readable though, and you will need to use up a line to compute unless you’re using it with fixed values.


#87

it’s due to the teletype language syntax. commands need a fixed number of arguments otherwise things gets very difficult to understand (and impossible to parse) without parens etc. tele was designed to be “dumb” and hence quick/easy to understand.

we could make more II commands ie II2 or II3 for multi-byte commands.

i think the track selection is a pretty decent approach.


#88

Also to note, there are the PN commands which allow you to directly get/set indices of a not-in-focus pattern. This doesn’t allow the full tracker implementation (eg. P.NEXT) but does allow you to use additional patterns as simple lookup tables without having to change pattern focus.

From another angle, I think the separation of pattern selection from pattern operations actually opens a lot of functionality not available in the connected context. It’s really great to enter four different scales in the patterns which are being selected by one trigger, but cycled through by a different trigger. Finally it’s a nice introduction not to need to worry about bank selection – one simply can start using the pattern data directly, then step up to multiple patterns after they’re comfortable with one.


#89

you could see it as a separation of “event sequence” from its destination. so you describe a series of events that should happen and have something else set the destination for these events. it’s like abstracting the action.

and this applies to TT’s own outputs, since you can overwrite A-D variables with different values. so you can have a script that generates a burst of triggers and outputs it to A but then have Metronome script set A based on P.NEXT or something like that, so P becomes your destination sequencer.


#90

Finally installed Orca 2.1 pre-release on my WW. Absolutely next level stuff! The last 2 hours just disappeared playing with it, 2 Mangroves and a few other modules. Thank you, @scanner_darkly!

Excitedly waiting now for a release of the TT integration since my TT just arrived end of last week as well.


#91

awesome, glad to hear!

TT integration almost done, sadly didn’t have as much time as i hoped but only 3 commands are left to implement, and the plan is to finish it tonight and start testing. i can send you updated firmware before the “official” release if you want to give it a try!


#92

That’d be very cool! Will have the headers soldered on by the weekend, so could start to help testing then.


#93

sounds good, i’ll make sure to post a new release and update the docs before the weekend!


#94

took me be a bit longer than expected (having to do overtime at my day job) but Orca/Teletype integration is done and so far appears to be working as expected.

the main change is individual clocks for each track - this is really only possible through Teletype, and since you don’t have to have them synced to each other at all you get some crazy polyrhythms you wouldn’t be able to get otherwise. other commands allow for even more playability, it’s quite fun to reset tracks or rotate scales with Pressure Points as just one example.

grab it here: https://github.com/scanner-darkly/monome-mods/releases/tag/v2.2

you will need to update teletype as well, i’ve included the hex file, unfortunately you will lose all scenes on Teletype and all presets on Orca when updating. of course you can always restore the default Teletype scenes by reflashing the official firmware. and the good news is that whenever the next official version of Teletype firmware is released it will include Orca support.

detailed doc is here: https://github.com/scanner-darkly/monome-mods/wiki/Orca#teletype-integration


#95

For Orca, have you considred some type of clock reset? Sorry for beating an old horse (clock) but it would be nice to have for us who have some way to go before Teletype. Reset could possilby be achieved by a switchable timer which resets when there hasn’t been any clock for a while? Thank you.


#96

so sounds like the case you have in mind (based on your proposed solution) is this: Orca is clocked from some master sequencer, you then stop that master sequencer and you want Orca to start from 0 when it’s restarted?

you can achieve the same result by stopping the main sequencer and then resetting Orca manually by double pressing the Global Reset page button. when you restart the clock Orca will start from 0. would that work?

it is possible to do “intelligent” clock detection as you describe, but it’s a little counter intuitive, you might actually have some slow changing sequence or just want to pause it for a bit by inserting a dummy cable, so it would be confusing when it resets all of a sudden.


#97

As far as intuition goes I guess I’m just locked in to the old habit of keeping everything in sync from one transport control. Will spend some more time with global resetting and see what it’s like. Thank you.


#98

yeah, i think the key here is “transport control”, i guess what you mean is like pressing a “stop” on a sequencer will reset it to 0, as opposed to “pause”.

so something like that would be doable, using the clock input as the transport control (so when a gate is applied it runs and when not it stops and resets to 0). it’s possible but then you’re limited to internal clock only as there is only one input on WW.

could probably make it configurable, but then i’d need a way or a page where you could change it. let me think if there is an elegant way to add it without making the interface too cluttered. in the meantime i could make a separate version that would support a special key combo to switch into this mode, easy enough, let me know if that would work.


#99

I think I’d need to toy around more with what you have done already before ssuggesting or even requesting a specific build. Thanks @scanner_darkly!


#100

Wow this this comunity is amazing, so glad i got into this, so many things to learn though… Thx scanner! i was looking for a WW, now i guess i have to look for two!