Ash (a small collection)

Wondering if its possible to use midi out on the earthsea implementation of Ash and if not, if its on the radar of implementing it?

It’s possible. At some point I had it mostly working, but that code is surely lost now :sweat_smile:

this should be trivial to add. on the list


Is there any specific documents or guide i would need to study if i want to include earthsea as lib into other scripts (timber and passersby) plus adding midi gate out?

I know i need exactly this:D

How easily could midi be added to earthsea as an output option?

extremely easily.

i am doing a round of updates in the next week, will get this on the list


Cool thanks! Been using the norns to sequence my Hydrasynth and think it’d make a nice playable interface. Was there ever any luck with the idea of overdubbing notes? I’ve seen that discussed and would love that feature too.

I share @kburwash’s dream of MIDI output from Earthsea.


same! would be great

If you find the necronomicon…

1 Like

I feel like I might be missing something obvious, but is there a way of transposing octaves when playing Earthsea in Just Friends mode? I find it to be rather high pitched by default. I tried using JF.SHIFT via teletype and that had no effect (perhaps unsurprisingly).

Maybe this is a more general question/request though… could there (should there?) be a more global way of adjusting Just Friends parameters from Norns that would work across all the apps that use it?

this is a great idea for a quick mod: just populate a param list with jf controls


Thanks for the encouragement to get stuck in… I’ll have a go (not tried any coding on Norns yet, and this seems like a manageable first step :slight_smile:

Edit: also happy for someone else to beat me to it though :wink:

1 Like

Great idea!

Also pretty new to coding. I gave it a go and the script below works pretty nicely. I do not have the capacity [^1] at the moment to work that into a mod so whoever feels up to it, please give it a go.

[^1]: edit: have to wrap my head around how mods are implemented script wise first.

sidenote: my footnote syntax is not doing what I want it to do…

JF control
--mod for jf control

--todo: add midi in support for transpose

local octave_options = {-3, -2, -1, 0, 1, 2, 3}
local semitone_options = {-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
local ratio_options = {"1:1", "16:15", "9:8", "6:5", "5:4", "4:3", "7:5", "3:2", "8:5", "5:3", "9:5", "15:8", "2:1", "3:1", "4:1", "5:1", "6:1"}
local n_table = {1, 16, 9, 6, 5, 4, 7, 3, 8, 5, 9, 15, 2, 3, 4, 5, 6}
local d_table = {1, 15, 8, 5, 4, 3, 5, 2, 5, 3, 5, 8, 1, 1, 1, 1, 1}

function jf_transpose()
  local o_idx = params:get("trsp_oct")
  local s_idx = params:get("trsp_semi")
  pitch = octave_options[o_idx] + semitone_options[s_idx] / 12

function jf_retune()
  local ch = params:get("channel")
  local r_idx = params:get("ratio")
  local n = n_table[r_idx]
  local d = d_table[r_idx]
  crow.ii.jf.retune(ch, n, d)

init = function()

  params:add_separator("just friends")
  --jf mode
  params:add_option("jf_mode","jf mode", {"normal", "synth/geode"}, 1)
  params:set_action("jf_mode", function(state) crow.ii.jf.mode(state - 1) end)
  --jf god
  params:add_option("god_mode","jf god", {"no", "yes"}, 1)
  params:set_action("god_mode", function(state) crow.ii.jf.god_mode(state - 1) end)
  --run mode
  params:add_option("run_mode","run mode", {"off", "on"}, 1)
  params:set_action("run_mode", function(mode) crow.ii.jf.run_mode(mode - 1) end)
  --run voltage
  params:add_control("run_voltage", "run voltage",, 5, 'lin', 0, 0, "V"))
  params:set_action("run_voltage", function(volts) end)
  params:add_group("transpose", 3)
  params:add_option("trsp_oct","set octave", octave_options, 4)
  params:add_option("trsp_semi","set semitone", semitone_options , 12)
  params:add_trigger("transpose", ">> transpose")
  params:set_action("transpose", function() jf_transpose() end)

  params:add_group("retune", 5)
  --set params ch/ratio
  params:add_number("channel","set channel", 0, 6, 1)
  params:add_option("ratio","set ratio", ratio_options , 1)
  params:add_trigger("retune", ">> retune")
  params:set_action("retune", function() jf_retune() end)
  --reset retune
  params:add_trigger("retune_reset", ">> reset retune")
  params:set_action("retune_reset", function() crow.ii.jf.retune(0, 0, 0) end)
  --save to memory
  params:add_trigger("retune_save", ">> save retune")
  params:set_action("retune_save", function() crow.ii.jf.retune(-1, 0, 0) end)


--just here to avoid a blank screen...
function redraw()
    screen.move(4, 16)
    screen.text("You are" )
    screen.move(54, 60)
    screen.text_center("just friends")
1 Like

Dear folks,

I freshly flashed 220306 onto my norns shield, all was good with Ash. Then I started to explore available community scripts one by one. After installing some (oooooo and cheat codes I think) the ash suite won’t load anymore. This is what I get when trying to launch Angl:

script clear

script load: /home/we/dust/code/ash/angl.lua

script run

loading engine: Glut

SCRIPT ERROR: missing Glut


reading PMAP /home/we/dust/data/ash/angl/angl.pmap /home/we/dust/data/ash/angl/angl.pmap not read.

script clear

script load: /home/we/dust/code/ash/angl.lua

script run

loading engine: Glut

SCRIPT ERROR: missing Glut


reading PMAP /home/we/dust/data/ash/angl/angl.pmap /home/we/dust/data/ash/angl/angl.pmap not read.

There is no “we” folder at all, but it should be contained in the 220306 system, right?

Tried to re-install Ash and restarting, no luck.

What am I missing here?


Did you try reinstalling the glut engine?

I would love to, but I don’t know how to re-install a single engine. So far I only learned how to install/update/remove whole scripts through maiden.

How can I re-install glut?


if it’s not in maiden, you can find glut over here:

to install it, refer to this section of the docs:

hope this helps!

1 Like

Yes! I found and installed the Glut script fine. And Angl runs now too. Many thanks Dear Sir!

Doing very first baby steps here with Norns and Maiden.

Thanks again!


Awesome. Glad you’re up and running.