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.

Sure,

  • 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.?

Thanks

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.

@unthankable

What you mean by VM is what I call a client, a way to interface with the interpreter(server). I don’t have a clear roadmap, but this is kind of where I’m going:

  • Build a strong orca benchmark file, and test the current implementations of the alphanumeric operators against it.
  • Complete the super simple frame interpreter, so this little server spits out the next frame and the associated IO messages.
  • Build a small SDL client that handles syntax highlight, input, timing talking to the interpreter(server).
  • Use this for my next livecoding gig.

The orca alphabetic operators should be the “spec” and not change from one implementation to the next, anything that would fail the benchmarks is not orca compatible, and that’s fine, there can be other versions too if someone doesn’t like one operator or another.

Typically, if someone finds a problem with the 26 core operators, they’ll raise an issue on here, but that hardly ever happens. Typically, it’s people who misunderstand their usage.

While the letters are interpreted normally, the special characters(IO operators) should each send their values across so the client can handle the messages as they like.

For example, the C89 server outputs the messages in a separate buffer, so something like :03C3. is not interpreted but instead sent to the IO buffer so the client can have access to it and choose to do whatever is needed with that.

Modules, IO, etc should be done with special characters. So for instance, my 6502 implementation doesn’t use any of the midi/osc operators, since their usage is different and specific for the NES platform.

3 Likes

Interesting! I admit to not fully understanding the intended use case (is it to perform on NES?), but I see that we’re talking about the same concept and goal of separating the interpreter, albeit somewhat inverted and different. My pitch was a solid Orca “platform” that opens up the language spec while taking care of the low level basics, and in your case that platform is the client and the server could be swappable. It is a different grouping of components, (grid model, lang)+(UI, IO, clock) vs (grid model, IO, UI, clock)+(lang).

At first glance having a compiled “spec” on a server makes it less hackable/portable than I was imagining, but at the same time this could be flexible in other interesting ways. Are server and client separate processes communicating over network or is it all one runtime?

I’m okay with being atypical. There is no problem with the operators per se, it’s rather that the current Orca language spec is just one of the possible Orca-like languages with that exact paradigm. This is more about the freedom to explore them experimentally without the friction of worrying about compatibility (of both the language and the platform) or the implementation details of the VM — that’s my use case. Adding multiple implementations could also include prior versions of the language, big help for those with older compositions.

I think what I’m describing is fairly feasible with Electron Orca by having a map of swappable library modules.

1 Like

Hi. I’m the person who implemented the C version of Orca.

It’s already built as a separated VM, and meant to be easily hackable. The frontend and VM behavior are already separated, to a reasonable extent. If you want to change the way the language works, you can edit sim.c, which has all of the definitions for the opcodes in it, with each one in a separate block, carefully designed to be hackable. (I hope.)

If you want to change the existing livecoding IDE, you can edit tui_main.c. (There are also some helper files with it.)

If you want to make a new frontend, it’s straightforward. Someone has already done it – there is a Plan 9 frontend for Orca that lives alongside the TTY TUI frontend. The TTY TUI frontend is the livecoding IDE that you normally use with the C version of Orca.

If you think you’re unable to do something or something seems harder than it should be with regards to changing the C implementation of Orca, please let me know! I tried pretty hard to make it hackable. If you find some defect, I’ll try to fix it. Or maybe I should write a guide?

The existing implementation already works like this.

edit: I have been informed the neauoire’s version won’t be exactly the same with the VM IO buffers :slight_smile: looking forward to it…

7 Likes

I’m wondering how the MIDI Input Device can be used?

I’ve seen in threads that ORCA can’t easily receive a MIDI clock, nor can I figure out how to get any note info from my controller. I’d like to use ORCA to generatively respond to notes played on a MIDI controller. I understand if ORCA is a sequencer meant to be manually programmed and meant to serve as the “brain”, but then I’m wondering what the MIDI Input Device selection is for.

I’m brand new to this program, so I appreciate any MIDI guidance! I’m enamored with it otherwise.

Its main use is to capture the midi clock.

I use the midi in implementation to run two custom operators that prints the key I’m pressing on the midi keyboard, or the value of the knob I’m turning. The implementation is there so anyone can use it to build custom things if they need to and don’t want to use UDP.