more params will be mappable in the update as well.

3 Likes

In the future can we make keys 1-3 and even potentially encoders midi mappable? This way we could add extra control when needed.

I usually use the norns keys for everything, but it’d be nice to have consolidated controks

Hey! Having trouble eternally syncing all the variations of Awake scripts on Norns. I have a midi clock coming on vport 1 and everything seems to work fine with other scripts, no idea what is causing it. I am using AWAKE with crow, Nonrs midi clock out is set to off. Any help would be appreciated!

awake + incoming midi clock is a known issue:

will be addressed by coming norns-wide clocking overhaul!

are you also having trouble with crow? sorry, the last bit confused me :slight_smile:

Is it possible to take midi control over things like global levels? Such as being able to assign a 16n fader to the Output, Input, SC and Engine controls?

via menu, coming in param update

or just modify a script in the meantime

3 Likes

Crow works perfectly, just couldn’t sync to external midi. It does seem like everyone is having the same problem, will just wait until it’s fixed :slight_smile:

1 Like

Probably a stupid question incoming as I have never coded before.

Am I correct in my understanding that Norns is essentially modular in nature in that I can select any sound engine and any script to control it however I desire?

As long as I can code it, could I use Passersby to generate sound, control the notes using the top half of a 64 grid as a keyboard and use bottom 32 keys to control looping functions like in Cheat Codes (but simplified).

Basically, the norns is a computer that runs Lua code, while sound is (usually) then generated via the sound engine (currently these are Super Collider).

So, for example, Passerby is a synth engine that was built in Super Collider that is called up by a user generated Lua script. This can be replaced by another synth engine, given that the proper parameters and functions within the lua code are present.

So! The modularity you’re speak of is in the ability to swap sound engines in scripts, or create your own script either using a predetermined synth engine (such as passerby) or creating your very own!

Now, there is also the extra fun aspect of norns called Softcut, which is 6 simultaneously accessible record/playback buffers that can be manipulated as needed (a good example to see will be mlr, which Softcut is generally the backbone of).

If you’re curious how these engines are applied to a script, take a look over on the Library tab. examples of scripts that use synth engines are Animator and Awake. There are many more, but these are a good start.

That answer your question?

3 Likes

Kind of, thanks.

Just out of interest, how difficult would it be for a non-coder to write script that included both notes for the sound engine and looping via soft cut?

Unfortunately there’s not really an easy answer to your question.

How hard is it to bake a cake or a loaf of bread? Easy for some, impossible for others.

Start here and see where it takes you

2 Likes

while this is both a cool idea & possible, the model “use cheat codes on the grid, play passersby with a midi controller” would be about 1000% times easier and a totally approachable starting point for a beginner

essentially, midi and grid are handled by separate blocks of code called functions. so combining midi and grid (which live in separate functions) would be much more cut and paste, whereas your original idea would require a rewritten grid function(s) that handles both passersby and cheat codes

for starters, here’s a block of code from passersby (on GitHub) that handles midi (+ shares it w the engine)

-- Engine functions

local function note_on(note_num, vel)
  engine.noteOn(note_num, MusicUtil.note_num_to_freq(note_num), vel)
  table.insert(active_notes, note_num)
  input_indicator_active = true
  screen_dirty = true
end

local function note_off(note_num)
  engine.noteOff(note_num)
  for i = #active_notes, 1, -1 do
    if active_notes[i] == note_num then
      table.remove(active_notes, i)
    end
  end
  if #active_notes == 0 then
    input_indicator_active = false
    screen_dirty = true
  end
end

local function set_pitch_bend(bend_st)
  engine.pitchBendAll(MusicUtil.interval_to_ratio(bend_st))
end

local function set_channel_pressure(pressure)
  engine.pressureAll(pressure)
end

-- MIDI input
local function midi_event(data)
  
  local msg = midi.to_msg(data)
  local channel_param = params:get("midi_channel")
  
  if channel_param == 1 or (channel_param > 1 and msg.ch == channel_param - 1) then
    
    -- Note on
    if msg.type == "note_on" then
      note_on(msg.note, msg.vel / 127)
      
    -- Note off
    elseif msg.type == "note_off" then
      note_off(msg.note)
      
    -- Pitch bend
    elseif msg.type == "pitchbend" then
      local bend_st = (util.round(msg.val / 2)) / 8192 * 2 -1 -- Convert to -1 to 1
      set_pitch_bend(bend_st * params:get("bend_range"))
      
    -- Pressure
    elseif msg.type == "channel_pressure" or msg.type == "key_pressure" then
      set_channel_pressure(msg.val / 127)
      
    end
  end
end

not too bad to read over !

this, plus another line which orders up the passersby engine from supercollider

local Passersby = require "passersby/lib/passersby_engine"

is pretty much the “meat” of that task I laid out. I’m probably (definitely (edited to add engine functions a few lines up)) missing a few bits and bobs, but pasting those two chunks (+ determining how you want to change the sound, maybe params) will be close to all you need to add a simple midi synth to any softcut script

3 Likes

I’m so sorry to ask this here, but I’ve been searching the megathreads and it’s been hard to locate… how do I add new scripts to my new DIY norns? I have SFTP’d in with FileZilla and I can browse the guts, but I don’t know which directory the lua scripts live in…

project manager !!

1 Like

Thanks! I just found this when you posted it. much appreciated!

Thanks. Is it possible to plug my laptop in to the usb sockets and use midi over usb or are there issues over whether it is a device or a host?

This isn’t possible as both are USB hosts. You would need something like a 2host in between the computer and norns.

1 Like

I’d say easiest computer <—> norns communication option wld be osc

but it might require (simple) modifications on the computer side depending on yr use case

Recording to TAPE on my DIY Norns, I hear everything absolutely fine through monitoring.

However, the final WAV file out has, every few minutes, this DC offset/spike in it:

image

DIY norns, grid + 16n on usb, headphones only connected to audio, decent USB power supply.

Any thoughts?

well I can confirm I’m not reproducing that for a couple recordings I looked at just now from norns shield

did you confirm that it’s script independent ? weird softcut arrangements can make DC offsets