Orca's Heart Multipass

orca’s heart multipass

an algorithmic polyrhythmic sequence generator, the multipass version

this is the multipass based version - it can run on any of the monome eurorack modules except crow: white whale / earthsea / meadowphysics / ansible / teletype, and it can sequence er-301 / telexo / just friends by using i2c.

there is also a vcvrack version of orca’s heart, which uses the same engine and gives access to the same set of parameters. when you use the same values you should get same sequence in both, however this version has 2 built in mod matrixes which would be difficult to reproduce in vcvrack - i’m planning to add them as an expander vcvrack module at some point. this version also takes advantage of using the grid interface which makes it much more playable than the vcvrack module.

orca’s heart is based on orca the alternative firmware for white whale (not to be confused with the excellent orca the livecoding tool), hence the name. but while the main algorithm uses the same principles, the app itself is very different - instead of having control over individual algorithm parameters it exposes just a few parameters that control multiple aspects, with the goal to make it more playable and immediate.

everything on this release was sequenced by orca’s heart


monome grid and any of the monome eurorack modules:
white whale | earthsea | meadowphysics | ansible | teletype

optional: er-301 | telexo | just friends





v 0.2

  • number of presets increased to 16
  • ability to mute individual voices
  • brightness levels adjusted
  • mod matrix: scale destinations will react to positive changes only
  • stay on presets page after loading a preset
  • preset 1 was always loaded on startup - fixed

v 0.3

  • individual volume control / morphing / randomization
  • ability to delay each voice from 1/8 to 8x clock
  • fix speed not loading from presets on ansible
  • preset page will open on button press, not release
  • selected scale wasn’t saved with preset, fixed
  • speed knob sensitivity decreased
  • ability to stop the clock

v 0.31

  • preset button not working on teletype - fixed
  • longer delay span didn’t shift by full clock intervals - fixed
  • swing added

white whale:
orcas_heart_ww.hex (137.7 KB)
orcas_heart_ww.zip (44.3 KB)

orcas_heart_es.hex (138.6 KB)
orcas_heart_es.zip (44.6 KB)

orcas_heart_mp.hex (137.0 KB)
orcas_heart_mp.zip (44.0 KB)

orcas_heart_ans.hex (139.2 KB)
orcas_heart_ans.zip (44.8 KB)

orcas_heart_tt.hex (148.5 KB)
orcas_heart_tt.zip (47.9 KB)

github: https://github.com/scanner-darkly/orcas-heart
make some mods! :metal:


So excited for this. Thanks so much for making this a reality.

1 Like

Wow! Do you know if meadowphysics can speak to JF using this firmware, on the same bus where Teletype is a leader? Thank you for working on this!!

Edit: I read the docs, not recommended, and ill need a txb, which I have a pcb/panel for! think i might need to pick up another JF :drooling_face:

Another edit: it would be awesome to throw a basic 2 through 128 divison clock divider in with the meadowphysics implementation to add some value, i might try to give it a go, any tips/pointers?

1 Like

hmmm…tried to upload to both the meadow and the whale. getting this message…
michaels-MacBook-Pro:~ michaelmatos$ /Users/michaelmatos/Desktop/orcas_heart_ww/update_firmware.command ; exit;
Saving session…
…copying shared history…
…saving history…truncating history files…

[Process completed]
i’m able to flash the latest official firmwares, but getting stuck here.

would be pretty straight forward. do you have the toolchain set up?

let me double check - i probably messed up something with the update_firmware as i’m on windows. i’ll see what the official one looks like.

1 Like

This is one of the coolest things on Rack recently, thank you.

1 Like

this is awesome on so many levels.

thank you so much for your continuing visionary thinking and sharing your work with the community.

going to check out both orca’s heart and multipass this weekend

1 Like

i’m trying to flash my ansible on osx 10.10, but it doesn’t seem to update.

/Desktop/orcas_heart_ans/update_firmware.command ; exit;
[Process completed]

*reflashing ansible 2.0 works just fine

Also unable to flash ansible on mac, tried both catalina os and high sierra.

UPDATE: Sucessfully flashed on windows pc

Apologize in advance for the noob questions:

  1. If I flash Teletype (or any of the other modules for that matter) does it replace otherwise normal operation of the module?

  2. How do you choose whether to output to i2c or the module’s front panel connections?

EDIT: RTFM’d this one - once you have i2c connected, enable it for your specific device. open the i2c page by pressing on the top right corner button. there are 4 buttons in the 2nd row from the top which switch between: no i2c | er-301 | just friends | telexo

  1. What is the functionality of the front panel connections? For instance Teletype, I assume that the TR inputs are irrelevent and that the outputs are pitch/gate pairs?

Sorry again, just trying to wrap my head around this before I dive in. Thanks for this amazing tool!

WOW! thanks! can’t wait to dive in.

1 Like

apologies everybody, updated the zip files using files from one of the original firmwares, hopefully should work this time!

yes, it completely replaces the original firmware.

it will send pitch/gate on whatever physical outputs are available, so on teletype / ansible you get 4 cv/gate pairs but say on meadowphysics you get 8 gates.

for teletype and ansible trigger input 1 works as clock in, trigger input 2 works as reset. on teletype you can also use trigger inputs 3, 4, 5 to switch between scales / transpose scale A up by an octave / transpose scale B up by an octave (haven’t tested this yet though).


Yes toolchain setup, so for my clock divider, looking at the code I guess I need to add something like:

u8 current_step;

Then in step(), add a function like update_divider which checks what current step is, and based on the result fire off a gate from the appropriate output on meadowphysics. And perhaps on gate to the input, fire a reset_divider which just sets current_step to 1. Sound about right? Gonna give it a try soon as I can solder up that txb!

yeah, that sounds about right. i’d just put it in output_notes:

change this line to:

for (u8 n = 1; n < NOTECOUNT; n++) {

this will free gate output 0 for your divider. then do something like:

divider_counter = (divider_counter + 1) % MAX_STEPS;
set_gate(0, divider_counter < (MAX_STEPS / 2));

this will have 50% pulse width, you can change it to whatever is preferable. if you want a trigger pulse, you will need to use timed events.

1 Like

Cool thanks, I’m actually thinking of using all the outputs for divisions so I think I’ll need to toss out most of what’s currently in output_notes but can use that as a starting place. I’m planning on using it with JF exclusively via ii and won’t need the OH gates.

Awesome, thanks @scanner_darkly. This makes me feel not so bad about learning Teletype. I will make it Orca for now and revisit it later :slight_smile:

One more thing - this point about i2c leader from the documentation:

important : orca’s heart acts as an i2c leader. you shouldn’t have other i2c leaders on the same i2c bus (such as teletype or faderbank in leader mode) - multi leader setups are not supported. you won’t damage anything, but you will likely experience missing notes or modules locking up.

Is this something I have to do on the Teletype after flashing it with OH to make it not the leader? If so, how is that done? Thanks again!

EDIT: I think I just answered my own question? Teletype becomes Orca and thus is ok being the leader?

OK two more things :slight_smile:

Should I hold off for now on Mac OS flash?

yeah, if teletype right now is the only i2c leader on your i2c bus it should be fine as it will still be the only leader, just running OH firmware.

i’ve updated the zip files, should work on mac now - i don’t have a mac though so can’t verify, if somebody could give it a try that’d be grand!


to do it just add this in init_control:

for (u8 i = 0; i < NOTECOUNT; i++) map_voice(i, VOICE_CV_GATE, i, 0);

this unmaps physical outputs from the voices (they are mapped by default), so you’re free to use them for whatever and you don’t need to change output_notes at all.

this is where it maps voices to the selected i2c device: https://github.com/scanner-darkly/orcas-heart/blob/2ea91ae49adc7095beb3b5fd0cbc49e56ba8cee9/monome-euro/src/control.c#L321

1 Like