I’ve thought about this as well- I agree that it would be really cool to include some note entry options. It would be pretty trivial to add a note box to display the last note pressed at a particular location within Orca. There might be some other ways to enable display of several note presses, I’ll definitely look into this.

2 Likes

Is it still possible to send OSC messages from ORCA to RONIN in the latest build of RONIN?

Sadly no, I’ve ripped all of node/npm from Ronin. I haven’t found a better way to handle that kind of stuff yet, it might be interesting to add webMidi support instead - so these sort of things are still possible with the latest build.

I don’t know much about web workers, but I think it’s possible to use that to communicate between web apps.

See this thread.

1 Like

I’m not really very Max savvy, but after some head scratching I’ve come up with a simple M4L device for synchronisation with Live. It sends run messages to ORCA over the default UDP port. I hope that others will find it useful.

Orca Sync.amxd (29.6 KB)

4 Likes

Hey @bubbleandsquawk super cool patch and very nice and simple interface for Ableton :slight_smile:
I have tested your patch and I really like it! So simple yet so useful. That said it still has the same problems that my take on it has. It’s a slight timing issue, its marginal but it’s there and it can be super frustrating if you really want something very tight rhythmically.

I posted this a while back about this timing issue. My patch is not as elegant as yours, and my timing problems seem a lot worse than the once I got with your patch.

However, there is still a timing issue, and I don’t know how one would go about fixing it. I guess would be to try and integrate Ableton Link support into Orca. I think that would be the more stable solution to this issue, but I have no idea how to do it though, hopefully someone at some point in time does ;).

Great and elegant work on the patch!

1 Like

Thanks for the kind words. Yeah the timing is a bit off upon closer inspection. Fortunately it’s consistent, so track delays might be used to get it tight with a bit of messing around [edit: Not sure this actually works as I had presumed]. Still, it is less than ideal. I noticed in my original upload I had it resetting to frame:1, where it is meant to be 0. I will update my post with a new version. This doesn’t solve the problem however.
There’s another issue I’m having where the reset behaviour is different when launching from an empty clip slot or hitting record as opposed to just hitting play. I need to do a bit more reading up on the M4L API to figure out a solution. I imagine it’s probably fairly simple.

1 Like

yea I reckon that a bit of research in the LOM object will get you far :wink:
hope you figure some cool stuff out! :slight_smile:

1 Like

Hi there :wave:. I’m a programmer and learned to use Orca within the last few days. I made some experiments in conjunction with FL Studio and tried the Electron version first and then the C version on windows.

I love the idea of Orca and I would like to see it developed further! But I also found some things which I do not yet full understand. I’ll just brain-dump things I learned and some questions. Feel free to reply to any of those, if you like.

  • The Electron version works fine on Windows. I was able to connect Orca through loopMIDI to FL Studio. I can record midi notes and process CC midi messages.

  • I watched some videos about ORCA on youtube and realized, that some operators changed compared to the newest version. For example U (UTurn > uclid) or M (Modulo > Multiply). Other operators changed their meaning, too. It’s a bit confusing, when you first get in touch with the language. But that’s only a minor gripe.

  • What I wonder is, how will the language evolve? Is there still an urge to change the meaning of some operators? Will more operators be introduced? Is there some kind of roadmap?

  • One thing, which initially tripped me up, was that D and C reset to 0, when you reset the frame, but I (the Iterator value) doesn’t. I guess, that’s expected. I could not find a nice way though to initialize different cells to a predefined state on frame reset. Something I had to get used to.

  • Unfortunately I cannot use Orca as a clock master and FL Studio as a clock slave. This is not supported in FL Studio. When I try to reverse the scenario and send the midi clock sync to Orca, FL Studio freezes.

  • I’m working on Windows and the Midi timing is sometimes a bit off / unstable. I guess, this is expected because of the Javascript and Electron overhead. That’s why I tried to build the C version myself and surprisingly succeeded. The thing is, I wanted to run the version directly in windows and not through a Linux VM or WSL. Therefore I used a build environment called MSYS2 and within there I was able to build a single windows executable through mingw64-cpp. I had to change a few header includes and minor stuff, but I think it’s kinda cool it worked. Few things do not work correctly though: mouse interactions, copy+paste, Shift+Arrow selections and Alt+Arrow movements. Shift and Alt+Arrow are not forwarded by the windows terminal in contrary to xterm (there’s no modifyotherkeys mode). I could not find a way how to fix that.

  • The C version is kinda odd. First it looks hard on the eyes (a lot more dots with no auto hide). I cannot use commands like $bpm:120. I cannot send CC messages with ‘!’. Note octaves are different compared to the Electron version [1]. If I skip velocity and note length, the Electron version will play a note (I think it defaults to ff) while the C version won’t play the note.

  • What’s the plan with the c version? Should Electron and C version be and stay compatible? Will they diverge more, as time goes on?

  • Why did the orca-c repo move to Sourcehut? I’m just curious.

Hope some of you found something useful in my rambling. I don’t know exactly, where I’m going with this. I want to use Orca in an experimental fashion, but it’s also a bit of a time sink and I also don’t know, if I have enough time to get involved through Github. In the near future I will definitely write some stuff about it in my blog.

I’m fascinated by Orca and hope, that this project will get some traction and that it will evolve.

[1]
midi.js transpose:
clamp((octave * 12) + value + 24, 0, 127)
tui_main.c send_output_events:
Usz note_number = (Usz)(12u * em->octave + em->note);
=> I think, +24 is missing in the c version, for a reason I don’t know.

2 Likes

Hey Friends!

Recently I started learning Orca and also started putting together a sandbox / tutorial site that connects Devine’s Enfer synth setup to Orca in the browser.

I’m only part of the way done with it but I think its far enough along to share. I hope you enjoy!

Learn Orca - An Orca Tutorial and Sandbox
https://metasyn.github.io/learn-orca

:black_heart:
xander

18 Likes

Superbly executed! Much appreesh

That is so cool! keep up the good work :slight_smile:

Hi @zubspace, thank you for the questions.

What I wonder is, how will the language evolve? Is there still an urge to change the meaning of some operators? Will more operators be introduced? Is there some kind of roadmap?

The way the language has evolved is through community feedback, people finding ways to replicate an operator simply by combining two others, or recycling rarely used operators in more useful things. The operators have not changed in a few months now, it’s likely to stay like this.

One thing, which initially tripped me up, was that D and C reset to 0, when you reset the frame, but I (the Iterator value) doesn’t. I guess, that’s expected. I could not find a nice way though to initialize different cells to a predefined state on frame reset. Something I had to get used to.

Use something like 1x0 to create reset buttons for your iterator and bang it to reset the counter, like:

D....8D.
.H......
xE...1x0
.....Ei.
......4.

I’m working on Windows and the Midi timing is sometimes a bit off / unstable. I guess, this is expected because of the Javascript and Electron overhead. That’s why I tried to build the C version myself and surprisingly succeeded. The thing is, I wanted to run the version directly in windows and not through a Linux VM or WSL. Therefore I used a build environment called MSYS2 and within there I was able to build a single windows executable through mingw64-cpp. I had to change a few header includes and minor stuff, but I think it’s kinda cool it worked. Few things do not work correctly though: mouse interactions, copy+paste, Shift+Arrow selections and Alt+Arrow movements. Shift and Alt+Arrow are not forwarded by the windows terminal in contrary to xterm (there’s no modifyotherkeys mode). I could not find a way how to fix that.

These things work on Orca C, but I don’t have a Windows machine to test this sorry.

The C version is kinda odd. First it looks hard on the eyes (a lot more dots with no auto hide). I cannot use commands like $bpm:120. I cannot send CC messages with ‘!’. Note octaves are different compared to the Electron version [1]. If I skip velocity and note length, the Electron version will play a note (I think it defaults to ff) while the C version won’t play the note.

Ah! That’s a good point, I’ll make sure it sends a note when these 2 fields are empty :slight_smile:

What’s the plan with the c version? Should Electron and C version be and stay compatible? Will they diverge more, as time goes on?

The C version is meant to be very simple and lean, a lot of the decisions like not including OSC and complex midi operation are made to keep the codebase simple.

Why did the orca-c repo move to Sourcehut? I’m just curious.

We(Hundred Rabbits) are progressively moving away from Github entirely.

3 Likes

Thank you @neauoire for your reply!

The way the language has evolved is through community feedback, people finding ways to replicate an operator simply by combining two others, or recycling rarely used operators in more useful things. The operators have not changed in a few months now, it’s likely to stay like this.

Cool. I actually like the current set of operators.

Use something like 1x0 to create reset buttons for your iterator and bang it to reset the counter

Your example works, but I think my problem is a bit different. I actually want to reset the iterator to 0, but only when I reset the frame with Ctrl+Shift+R. Here’s another example without an iterator to demonstrate my problem:

.aV0....
........
........
..Va....
..0Mz.D.
50X0....
......z0
......0.

In this example, I manually change aV0 to aV1. The value at the bottom will slowly increase to z. I use this value, to set the velocity of a midi note, which will slowly blend in over time. When I want to fade out the midi note, I set aV1 to aV0.

The thing is, when I’m extending the patterns I often reset the frame with Ctrl+Shift+R. And before I start again I need to make sure that I set the variable a to zero and also the bottom value below the z.

This is a simplified example. But imagine a project, where you have many variables to steer the music and when I reset the frame, I have to zero out all variables and make sure that all values, which are influenced by the variable, are reset too.

In this case, I would need an operator which only runs once when I open the project or when I reset the frame.

Mind you, it’s not that important. I don’t think there’s a solution and I don’t expect one. I guess, this is something I need to get used to or maybe I’m approaching this problem from the wrong side… :slightly_smiling_face:

The C version is meant to be very simple and lean, a lot of the decisions like not including OSC and complex midi operation are made to keep the codebase simple.

Alright! I can understand that :+1:

We(Hundred Rabbits) are progressively moving away from Github entirely.

Fair enough. :slightly_smiling_face:

Thanks for this, really helpful :smiley: However I don’t get how can you get Orca to start from external midi clock. I have Ableton sending clock info via IAC driver (I can see it using MIDI monitor) but nothing happens. If I press ctrl + spacebar I can send midi clock from Orca to Ableton, I would prefer the opposite though…

Hi there, I’m loving Orca hooked up to my modular and hardware synths!!

I’m building myself a raspberry pi to mount in a small portable battery powered rack, but have a couple of questions:

I’ve downloaded the linux version of Orca, but it doesn’t seem to run? (I’m a noob in linux so would love it if someone could link me or explain just how to run the program =)

It’s working great on my mac though, and sending midi internally as well as externally through my Squarp Hermod to a number of hardware synthesizers!

Also, how do you use the K operator?

And Q and O operators seem so similar that I wonder what the function of the O is? Q can do the same and more? Am I missing something?

That’s probably true for other ‘multiple’ reading operators vs their singular counterpart?

Anyway, super inspiring software! I hope this keeps being developed!

Regards, Nick

3 Likes

I’ve downloaded the linux version of Orca, but it doesn’t seem to run? (I’m a noob in linux so would love it if someone could link me or explain just how to run the program =)

Have you followed the instructions on the repository? What do you mean it doesn’t run, are you getting an error?

git clone https://git.sr.ht/~rabbits/orca
cd Orca-c
make          # Compile orca
build/orca    # Run orca

Also, how do you use the K operator?

Like this.

.#.ASSIGN.VARIABLES.#....................
.........................................
.aV1.bV2.cV3.dV4.eV5.fV5.................
.........................................
.........................................
.#.COMBINE.THEM.TOGETHER.#...............
.........................................
.7Kabc.def...............................
...123.455...............................

And Q and O operators seem so similar that I wonder what the function of the O is? Q can do the same and more? Am I missing something?

Real-estate is very important in Orca, you’ll see that in most cases you will just one to read a single value, and the extra port in Q will be cumbersome.

That’s probably true for other ‘multiple’ reading operators vs their singular counterpart?

You can watch them side-by-side here. You’ll notice that Q and O are a bit like G and X.

..................................2C4.....
.#.READ.#........................2M1......
................................lV2.......
.C8...........Cg...........Vl.............
.30O01234567..b8T01234567..202Q01234567...
...3............3............23...........
..........................................
.#.WRITE.#................................
..........................................
.C8.C8........Cg.C8........Vl.............
.30X3.........b8P3.........202G01.........
...01234567.....01234567......0101.101....
3 Likes

I had to install a few dependencies on debian (might be you need a few more, depending on what you have installed and which distro you’re running):

sudo apt-get install git libncurses5-dev libncursesw5-dev libportmidi-dev
2 Likes

I have a simple question (sorry, I’m a programming newbie):

How could I bang if two values are equal, but not empty? The F operator bangs with two empty values, as well, which makes for more bangs than I’d like.

Thanks!

This turned out well :slight_smile:

20 Likes

Update on the whole jweb situation. Max 8.1.4 update has made changes to the jweb object so that it is now possible to debug and hopefully also use ORCA inside it :slight_smile:

Looking forward to testing this, I will keep you all posted :wink:

I was able to open the jweb object via remote debugging in chrome. I have identified the issue to be

No Midi DOMException: An attempt was made to break through the security policy of the user agent

in other words it seems that it is unable to connect to midi

[Deprecation] Web MIDI will ask a permission to use even if the sysex is not specified in the MIDIOptions since M77, around September 2019. See https://www.chromestatus.com/feature/5138066234671104 for more details.

there was an article written about this issue https://medium.com/@kulak/changes-in-web-midi-api-in-chrome-in-2019-4e410ec76af

Screen Shot 2020-05-28 at 14.13.59

6 Likes