Orca - Livecoding Tool

I think that is what I mean, yes. Bangs are currently exempt from the “things in locked ports don’t act” rule, it seems sensible and less surprising to not have that exemption — but I don’t know all possible repercussions of that.

That’s why I was trying to understand the mechanics of banging and port locking.

How to catch that… BTW, my T* example above was misplaced, it does behave correctly and I was confusing that with the memory of https://github.com/hundredrabbits/Orca/issues/235, which is also an interesting example.

Consider couple of examples:


This one is a little contrived, but : is getting banged by Ts operand * in a locking input port. Minor, but surprising nonetheless.


These lowercase operators keep operating because they’re banged by a nearby * in what would have been their locked input port if they were active.

The logic to catch both of these cases could be: if a bang is in a locked input port of an active operator OR a bang is about to activate an operator such that it will be in its locked input port, then no bang. I understand lowercase operators don’t become active until they’re banged, so implementation may not be very straightforward. It would allow them to operate on bangs the same way active ones do, I think that would be consistent and pretty useful.

:+1: Thanks!

1 Like

What is the rate of change for the R command?

It outputs on eval, so every frame for a R, on bang for r.

1 Like

Does this run on iOS? I only use an iPad with a keyboard hooked up to it.

I don’t know, I don’t have any Apple iOS devices to test this on. I’m not sure if Safari mobile supports webMidi. Try it, if it says Midi Device Unavailable, then it’s not.

As far as I can tell, Orca does not work on an iPad. It will work on a Chromebook FWIW.

1 Like

Can I get an explanation of the Z command (lerp)? Looked at the example and I still don’t quite get it.

Also the U command (uclid). The current example for U is very clever, but there are a lot of moving parts.

Preferably something I can communicate to 8th graders (if possible). Thanks.


  • Z transitions to a target value at a specific rate, so if you’re at 4, and the target is 9, and the rate is 1, it will take 5 frames to get there. It’s usually how I handle cross-fading the velocity. Here’s an example where I lerp the colors.
  • I don’t think I have anything that you can use to explain it to 8th graders, but you could read this and try to vulgarize with some little painted boxes.

Another example of the Z operator here where I fade between channels.

If I were to explain a Euclidean algorithm to 8th grades I would say it’s a way to put N things into (or remove from) N+M places arranged in a circle so that they are as far away from each other as they can be. Before that I’d demonstrate that many world rhythms work like that, and after have the overachievers read the paper @neauoire linked for extra credit. Then I’d pick a favorite and have them code it in Haskell.

Is there a WIP to be seen? Does it separate the language part from the runtime?

I had a little backtrack on my (fledgling) ORCΛ adventures when I got the norns shield assembled yesterday: I was running Orca-c on Raspberry Pi over ssh and that worked perfectly fine for MIDI sequencing my OP-Z. Now with turning my RasPi to a norns, the norns Orca needs a physical keyboard, and while Orca-c compiles on norns, it fails to connect to MIDI.

I might get a tiny keyboard or maybe another USB HID thing (bah), try to re-arrange norns to maybe by dropping out of SuperCollider. I can hope, or better contribute code for norns Orca to support on-device input. I can boot another SD card for normal GNU/Linux on the RasPi. And ORCΛ runs on the computer of course…

Is this becoming yet another (fun) project in configuration and setup, rather than making sick bleeps and bloops as I intended :loud_sound:

Sic vita est lol!

Noob question. I’m considering to setup a Raspberry PI w/ORCA to sequence my modular. What would be the best eurorack MIDI (usb) module for the job? Any known limitations or issue I should be aware of – eg. clock out, midi management on Raspberry, etc.?


I cannot comment on the modular side of things, but compiling and running Orca-c on RaspberryPi 3 running Raspian was straightforward¹ and worked perfectly well. I connected to the OP-Z over ssh either from a computer or from smartphone. I didn’t in any push it to limits, but seems to work really well.

¹ compiling software like it’s 2003 :wink:

1 Like

Nothing online yet, it’s just a simple C89 file that processes 1 orca frame, nothing else. It’s designed to become an easy include for a barebone orca implementation for micro-controllers.

1 Like

Hello comunity. Im new to ORCA and find it quite easy to understand and such a great tool for realizing my own ideas. Im just starting to understand all the possibilities, been wondering if there is some manual with more detailed explanation for each of the operators or if you have some advice for beginner who’s not a programmer like where to start?
Another question is, if I can initialize midi input how could I process the incoming midi information? What kind of operators works with midi input?
Is it possible to get swing or groove in orca or is the output stricly quantized to the frame grid? Or I dont understand completely what is a frame and what is a bang?!
And I would like to know what is the difference between Norns and diy Norns running on Pi with the shield. Im interested in building my own Norns if its not too hard. Thank you!

Currently none. Orca will detect and sync to an incoming MIDI clock though.

A bang (*) is something that triggers other operators. All events are strictly quantized to the frames. A frame is one complete evaluation of the grid. Every frame has equal duration, there is no notion of swing. There are 8 frames per beat (as set per BPM). It is possible to control in which frame something happens, which can resemble swing, especially at higher BPMs. It is also possible to dynamically change the tempo by banging a $bpm command, alternating between different tempos can also produce a swing.

1 Like

Such a great information about the tempo operator Thank you!

Hello everyone! I’ve just started using orca, trying to get it running on linux mint with pilot. I’m having some issues with the volume, it’s very quiet even though my speakers are full volume and other applications sound normal… I installed both orca and pilot through the terminal, which isn’t something I usually do, and I’m not sure if this has anything to do with my issue. I’m just wondering if there are volume settings anywhere in orca or pilot that I should check, and how I would do this.

Glad to be using this software and join the community :slight_smile:

I feel like I found an Orca C easter egg. I was playing around with some of @neauoire’s moving sidewalk script and found this out-and-back behavior when I changed the D divider to 2. I could not reproduce in Norns Orca but I wish I could cause it’s super fun. When the Es retract, it has a bang on the tail allowing you to use a bunch of ‘j’ operators to bang along the line.

1 Like

Ah, I was hoping it would really be a VM, that would be the next logical step in Orca’s evolution.

Currently Orca’s apparent simplicity comes with a catch. On one hand it enables and encourages modification, on the other almost any mod makes your Orca unique and unsupported — this is especially true of language modifications since the language is full and every change is breaking. In the extreme case that leaves you with a particular version of Orca that plays your particular piece but doesn’t have the recent fixes and improvements without some additional work.

Changes seem to fall into two categories: language changes and runtime fixes. Wouldn’t it be great if swapping language versions was as easy as loading an .orca composition, while still running the latest and greatest Orca engine?

A whole new level of experimentation opens up if Orca were to separate into:

  • “VM” runtime, which:
    • handles clock, MIDI/file/network IO
    • handles screen drawing, mouse/keyboard input, editing
    • evaluates frames
    • exposes the grid, local cache and command API to the…
  • language interpreter which:
    • implements operators using the API exposed by the runtime
    • is modular and hot-loadable

Then multiple incompatible languages could peacefully coexist and be used in their appropriate pieces. What’s more, this would allow constructing new languages with different subsets of operators of Orca core, even share via a public repository.