Orca

I’ll check midi in (i was sure that handled by beatclock lib itself).
You can hold shift+arrow for fast scroll to the bottom

Did some testing… Beatclock was not getting passed the midi data so it was not handling clock.

I was also seeing a nil table error on orca.vars.midi[m.ch] = m.note so I made the following changes.

This works with external clock OK

  orca.midi_out_device.event = function(data)
    clock:process_midi(data)
    local m = midi.to_msg(data)
    if m.type == 'cc' then
      orca.vars.midi_cc[m.cc] = m.val
    elseif m.type == 'note_on' then
      orca.vars.midi[m.ch] = m.note 
    end
  end

NOTE: bpm counter in params will not update with the incoming clock bpm. Still not sure how to make that work properly

4 Likes

I tested the midi CC in with a faderfox and it works great. It makes the sequencer a lot more playable with some user interaction. If bpm was assigned in some way you could go a little crazy with fast/slow transitions.

6 Likes

i believe you can map bpm to cc from params menu

No, BPM, is not one of the assignable options in parameters. Its there in the list, but can’t assign. Theres a script to increase the BPM i saw somewhere in the computer version, so might be able to use that plus this Midi CC to control it.

BPM is a number type and not assignable with cc (yet) :frowning_face:

@its_your_bedtime @okyeron
Within the computer version Orca there is this line to control the BPM

But I don’t think it’s compatible with Norns Orca.
Something like that, and I can then assign the CC op to it?

I’ll think how to implement that, for now you can use shift +/- shorcut to change bpm

1 Like

I recommend something like:

  • + bpm up 1
  • - bpm down 1
  • cmd + animate bpm up 10
  • cmd - animate bpm down 10
4 Likes

FWIW - on the norns end bpm is handled by this “beatclock” library and it’s tied to params system in a way that makes it hard to midi-map bpm.

As a test I tried to work around this by hacking beatclock, but it does not work very well.

An intermediate solution could be to add a hardcoded midi CC event mapped to orca tempo, but then you’d have to edit the script to set the CC you want to use.

2 Likes

I was wondering about something, it’s note entirely clear how this would work tho, but I was thinking, could it be possible to have an operator that just sends to any audio engine?

Like we could select a parameter named engine, FM7, for example, and use $3C or whatever, and trigger the right engine with something like engine.hz(note_to_hz(name_to_note('3C')))? I’ve been collecting all these different interesting audio engines and I would love to be able to interface with them freely with orca without having to change the code itself.

7 Likes

afaik, at this point, multi-engine stuff isn’t really supported by the norns architecture.

Would happy to be wrong about that, but alas.

I think we could support softcut + x engine, because they’re fundamentally different, but that’s another matter.

Would it be possible within a single sc engine script to get a list of all available engines and route the signal to the proper one on the fly?

Need to look at the R engine which is supposed to be modular.

Aside from that I don’t think there’s currently a way to have multiple engines available at once.

3 Likes

no, only one engine instantiated at once. the engine command methods are static and they are rebuilt when an engine is loaded.

this is kinda a limitation by design. if engines were modular they would be called “modules” :slight_smile:

(e.g., issue with controlling CPU usage for multiple polyphonic things, no plumbing for routing, commnand list is monolithic.)

that said: you can in fact get a list of available engines and hot-swap them within a script.

it’s also a pretty straightforward exercise to make an engine that wraps multiple engines.

3 Likes

If you made an example of this I would implement it to orca. :heart:

Requirements

  • Polls for available engine and makes them available in lua space.
  • Have a method that changes from one engine to the next.
2 Likes

engine.names

currently, engines are supercollider classes. the list of available engines is never changed except by adding SC clasess and restarting sclang process. (i.e., rebooting norns)

function engineLoadedCallback() 
   engine.list_commands()
end

engine.load('EngineName', engineLoadedCallback)
3 Likes

Seriously?! That is amazing, I had no clue it was already present. And I’ve looked!

I will make an example tutorial, because this is… this could be huge for norns.

— And then I will implement to orca.

12 Likes

That’s exciting! The primary limitation is how to communicate with the engines, as there is no norns-wide standard for what types of messages an engine should expect. So, a synth focused engine might have “pitch” while a sampler might have “speed,” even though they’re roughly the same parameter that you would want to target from the governing Lua script.

It might make the most sense to have multiple Orca-customized engines with standardized parameters. These could be existing engines but ported to the Orca repo and renamed (which is critical! You’ll get tons of bugs/failures/hair loss if you have two engines with the same name on your norns after rebooting). Then, Orca doesn’t need to search. Instead, it can have the list baked in.

2 Likes

I saw a lot of engines had the .hz() method for example, so I could maintain a list of interesting engines that are supported in Orca and that might even begin to steer the community to create standards-compliant engines.

3 Likes