^^ crow help: norns

6 Likes

Pretty simple question but I’ll ask anyways:

Is it basically up to the original author of a norns script or community to add crow support for lets say… MIDI to CV for a script like loom? I’m guessing there will be a slight transitional period for scripts to become better integrated with crow as its early in the release period.

Edit: For fun also, just to have this in a central place.

What capabilities will norns & crow have together on Day 1 when they arrive, and what are the plans for future compatibility?

Thanks!

3 Likes

Im on the first batch of crows and im looking to use it with Norns, so any help or tips will be great!

Multi thread watching!

2 Likes

it is, but adding crow support will hopefully feel straightforward (for folks who have already built an app, but also for newcomers) – @ppqq added crow support to earthsea in about 10 minutes: https://github.com/tehn/ash/pull/3

basically, anywhere a script is already playing a note value like getHzET(note), add this:
crow.output[1].volts = note/12. that does the entire “midi to cv” conversion. ymmv depending on how the script is setup, but that’s basically how to get v/8 from existing scripts.

for a trigger from output 2, establish the desired action in your init():
crow.output[2].action = "{to(5,0),to(0,0.25)}"
which basically says:

  • from crow’s second output,
  • perform this action…
  • go to 5V immediately (in 0 seconds)
  • then go to 0V a quarter-second later (0.25 seconds)

once this recipe is established, then execute it in the same function as your note:
crow.output[2].execute()

so, you’ll have pairs of:

crow.output[1].volts = note/12
crow.output[2].execute()

…whenever you want a CV note event (v/8 + trigger).


What capabilities will norns & crow have together on Day 1 when they arrive, and what are the plans for future compatibility?

with Norns: update 190930, crow and norns have compatibility for folks to script (and re-script) to take advantage of the new tools – awake is updated to control crow CV and JF. it is amazing. I’m sure we’ll learn a ton as people use it and the syntax will deepen.

beyond that, there will likely be an incredible and heroic push from the community to get basic crow commands into as many scripts as possible :slight_smile:.

then, the really fun stuff starts – I’m so excited to see the first crow-specific script :revolving_hearts:

14 Likes

This is a silly question, but I’m going to ask it - in the very beginning of crow studies there is this:

This sets up a knob and screen interface for two very simple commands:

crow.output[1].volts = 3.33
crow.output[1].slew = 0.1

Is maiden the intended coding environment for these commands since we are using Norns in this case to interface with crow?

Sorry for such a basic question, but I’m an absolute beginner when it comes to anything code related, though I am really interested in contributing once I start gaining some competency.

I don’t have my crow yet, but looking at the studies it looks like you should be downloading the studies file to the Norns and then walking through the code in the files you downloaded. Maiden would be a great way to read and edit the files.

1 Like

Currently the most direct way to “live code” with crow connected to norns is to use the matron REPL area within maiden. For example here is what interacting with crow looks like:

One thing to keep in mind is that when using norns + crow all the crow functions/data need to be prefixed with crow. (unlike if using druid to directly connect to crow)

If experimenting with the code listed in the studies you can use maiden’s editor to enter or modify the code just as you would any other lua script on norns. Press the play button to run the script and norns + crow should do their thing.

2 Likes

Not sure the best thread to post this but I’d love for there to be a way to send microtonal/just intonation notes to just friends from norns. Something like the crow.ii.play_note() that accepts hz or a ratio. Is this something that can be done in lua?

It would also be great to have this for the crow.output methods to easily translate a frequency or ratio to V/8.

you can do this now!

crow.ii.jf.play_note( note, velocity )

“note” is in volts. so you can absolutely send a ratio, ie: crow.ii.jf.play_note( 5/3, 5.0 )

(here, “velocity” is also in volts, so it’ll make a 5.0 volt amplitude shape)

you can make a scale then:

scale = { 1, 5/3, 7/2, 9/5 }

and then reference notes in that scale

crow.ii.jf.play_note(scale[2], 5.0)

(this would play 5/3)

10 Likes

Hi all. I’m having trouble getting input[1] to respond to rising/falling changes correctly. input[2] works fine, but when trying with input[1] I get the following error “[string “eval”]:9: attempt to perform arithmetic on a nil value (field ‘?’)”

Here’s my sample script. If input_num is set to ‘2’ (and you have a clock in input 2) everything works fine, but switch input_num to ‘1’ (and move your clock to input 1) you should see the error.

local state = 0
local input_num = 1

function init()
  crow.input[input_num].mode("change",1,0.1,"both")
  crow.input[input_num].change = function(s)
    state = s
    redraw()
  end
  screen.level(15)
  screen.aa(0)
end

function redraw()
  screen.clear()
  screen.move(10,40)
  screen.text("Change: "..state)
  screen.update()
end
1 Like

I’m seeing the same behavior. STREAM or CHANGE works as expected into input 2; STREAM works as expected into input 1, but CHANGE does not appear to respond to the input signal (I tried gates and LFO’s).

1 Like

thanks for the heads up— i’ll check this out

2 Likes

will there be a standard way for norns to read the value of a global variable from a running crow script?

i’m guessing currently i would crow.send a print statement and parse the result?

1 Like

This is something I’m wondering about too.

I have a project in mind where I would love to run code on directly on Crow written in Druid, and have it communicate back to my Norns, rather than make the Norns do all the work and treat the Crow as an input/output expander.

Also FYI, for those of you with an Ansible I added a study example here for connecting together your Crow and Ansible via i2c.

1 Like

you might be able to hack this now with crow.send paired with redefining crow.receive (this is in norns master, so you’d need to pull from git, not released yet)

we could probably integrate some sort of value query helper function into crow itself? @Galapagoose what do you think?

1 Like

Absolutely possible (i’m working on something similar to this for a norns+crow script right now), and doesn’t even require updating crow’s firmware - just adding a function to your script. Will post again with that example script once it’s working!

5 Likes

Awesome, doable without a firmware update is the best kind. Thank you and excited to see how it works!

Awake now has crow clock output

6 Likes

thanks for the help. I’m a little confused how this would work. each ET semitone is 1/12 a volt, correct? if I tried to play a 3/2 though, that would be the same as sending jf.play_note(18/12) which would play an ET note 18 and not a just fifth. am I missing something?

I was confused about this a few days ago as well. I found that what I needed was to use the log base 2 of the ratio:

crow.output[1].volts = math.log(3/2) / math.log(2)

There’s also a nice little library of JI tunings built into norns. You can use it like this:

local ji = require 'intonation'
local ratios = ji.overtone()
crow.output[1].volts = math.log(ratios[scale_degree]) / math.log(2) + octave
2 Likes