You could use TAPE.

I don’t have experience with that particular looper, but there are tons of great looper scripts. If none fit the bill, i’m sure you could work something up with softcut.

Check out the norns studies :slight_smile:

2 Likes

wrms + cranes !

2 Likes

I think a Norns roguelike would be super fun and a cool opportunity at a novel control surface. Anyone interested in getting libtcod wrapped for Lua 5.3? The last working wrapper I found was for Lua 5.1 and I have a few too many things rn to figure that one out… yet!

3 Likes

Now that I think about it, this thread might be a nice inspiration for screen interface designs for norns instruments/devices:

2643c1294a7249ff

23 Likes

interesting, I was just looking at that Earle Brown in terms of norns screen.

also, these:

and for my “Albers” script that I want to pick back up:

20 Likes

Oh yeah! That Albers piece already looks like a Norns screen! :joy:

2 Likes

now to figure out what to do with it…

the crazy thing is I didn’t plan it out as far as pixels/sizing and it ended up fitting perfectly

37 Likes

It’d be fun to do this as golf… how many strokes to recreate this!

Ha!
Totally awesome.
It can be a sequencer, that reads pixel columns or rows. Each shade of gray being a sample or note value. If notes, then the 3 or 4 notes could be chords. So maybe it’s an arpegiator of sorts…

1 Like

I keep drooling over the possibility to add a fixed filter bank to my eurorack system but thought that this might make for a very interesting and straight forward Norns script. I’m particularly fond of the sounds from the Verbos Bark Filter, which is inspired by the Buchla 296 Programmable Spectral Processor and makes use a bank of 12 fixed filters on the Bark scale (proposed by Eberhard Zwicker in 1961). Considering the possibility to integrate Crow to allow for some creative CV control, i’d love to see what people could come up with.

7 Likes

This is a great idea. (And I love having a fixed filter in my Eurorack. For many years it was the ADDAC601, though eventually I needed the room for other modules, so I switched to the Make Noise FXDf, which apparently is no longer in production but can be found used, of course. Both are highly recommended.)

3 Likes

mind sharing the code?

i’d love to build around this

sure. I am working on something with it but def use the graphics however you want. (you would want to clean up the darkmode here - either delete anything where darkmode == 1 and delete just the if statements around == 0 or create a toggle like I did)

Summary
function draw_city()
  screen.aa(0)
  if darkmode == 1 then
    screen.level(15)
    screen.rect(1,1,128,64)
    screen.fill()
  end
  -- column 1
  if darkmode == 0 then
    screen.level(15)
  elseif darkmode == 1 then
    screen.level(0)
  end
  for i=16,40,4 do
    screen.rect(0, i, 10, 2)
    screen.fill()
  end
  --column 2
  for i=0,12,4 do
    screen.level(2)
    screen.rect(10, i, 10, 2)
    screen.fill()
  end
  for i=2,34,4 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(10, i, 10, 2)
    screen.fill()
  end
  for i=38,42,4 do
    screen.level(2)
    screen.rect(10, i, 10, 2)
    screen.fill()
  end
  if darkmode == 0 then
    screen.level(15)
  elseif darkmode == 1 then
    screen.level(0)
  end
  screen.rect(10, 46, 10, 2)
  screen.fill()
  if darkmode == 0 then
    screen.level(15)
  elseif darkmode == 1 then
    screen.level(0)
  end
  screen.rect(10, 50, 10, 10)
  screen.fill()
  --column 3
  for i=14,42,4 do
    screen.level(2)
    screen.rect(20, i, 10, 2)
    screen.fill()
  end
  for i=16,40,4 do
    screen.level(2)
    screen.rect(26, i, 4, 2)
    screen.fill()
  end
  for i=44,48,4 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(26, i, 4, 2)
    screen.fill()
  end
  if darkmode == 0 then
    screen.level(15)
  elseif darkmode == 1 then
    screen.level(0)
  end
  screen.rect(20, 46, 10, 2)
  screen.fill()
  if darkmode == 0 then
    screen.level(15)
  elseif darkmode == 1 then
    screen.level(0)
  end
  screen.rect(20, 50, 10, 10)
  screen.fill()
  
  --column 4
  screen.level(2)
  screen.rect(32, 8, 8, 2)
  screen.fill()
  for i=12,56,4 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(30, i, 2, 2)
    screen.fill()
  end
  for i=12,56,4 do
    screen.level(2)
    screen.rect(32, i, 8, 2)
    screen.fill()
  end
  for i=14,42,4 do
    screen.level(2)
    screen.rect(30, i, 2, 2)
    screen.fill()
  end
  for i=14,42,4 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(32, i, 8, 2)
    screen.fill()
  end
  for i=46,54,4 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(30, i, 10, 2)
    screen.fill()
  end
  if darkmode == 0 then
    screen.level(15)
  elseif darkmode == 1 then
    screen.level(0)
  end
  screen.rect(30, 58, 10, 2)
  screen.fill()
  --column 5
  for i=0,44,4 do
    screen.level(15)
    screen.rect(40, i, 8, 2)
    screen.fill()
  end
  for i=42,48,4 do
    screen.level(2)
    screen.rect(40, i, 8, 2)
    screen.fill()
  end
  if darkmode == 0 then
    screen.level(15)
  elseif darkmode == 1 then
    screen.level(0)
  end
  screen.rect(40, 48, 8, 12)
  screen.fill()
  --column 6
  for i=12,44,4 do
    screen.level(2)
    screen.rect(48, i, 10, 2)
    screen.fill()
  end
  screen.level(2)
  screen.rect(48, 42, 10, 2)
  screen.fill()
  for i=46,58,2 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(48, i, 10, 2)
    screen.fill()
  end
  --column 7
  for i=10,34,4 do
    screen.level(15)
    screen.rect(58, i, 4, 2)
    screen.fill()
  end
  for i=12,36,4 do
    screen.level(2)
    screen.rect(58, i, 4, 2)
    screen.fill()
  end
  screen.level(2)
  screen.rect(58, 38, 4, 8)
  screen.fill()
  for i=46,58,2 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(58, i, 4, 2)
    screen.fill()
  end
  --column 8
  for i=2,54,4 do
    screen.level(2)
    screen.rect(62, i, 20, 2)
    screen.fill()
  end
  for i=12,36,4 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(72, i, 20, 2)
    screen.fill()
  end
  for i=40,52,4 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(62, i, 30, 2)
    screen.fill()
  end
  for i=56,58,2 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(62, i, 30, 2)
    screen.fill()
  end
  --column 9
  for i=8,40,4 do
    screen.level(2)
    screen.rect(92, i, 4, 2)
    screen.fill()
  end
  
  for i=16,42,4 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(100, i, 2, 2)
    screen.fill()
  end
  for i=44,52,4 do
    screen.level(15)
    screen.rect(92, i, 10, 2)
    screen.fill()
  end
  for i=56,58,2 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(92, i, 10, 2)
    screen.fill()
  end
  for i=16,46,2 do
    screen.level(2)
    screen.rect(96, i, 4, 2)
    screen.fill()
  end
  for i=48,54,2 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(96, i, 4, 2)
    screen.fill()
  end
  --column 10
  for i=2,58,4 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(102, i, 10, 2)
    screen.fill()
  end
  for i=16,56,4 do
    screen.level(2)
    screen.rect(102, i, 10, 2)
    screen.fill()
  end
  --column 11
  for i=0,12,2 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(112, i, 12, 2)
    screen.fill()
  end
  for i=16,56,4 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(112, i, 12, 2)
    screen.fill()
  end
  for i=50,58,4 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(114, i, 10, 2)
    screen.fill()
  end
  --column 12
  for i=0,40,4 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(126, i, 2, 2)
    screen.fill()
  end
  for i=2,58,4 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(124, i, 4, 2)
    screen.fill()
  end
  for i=44,56,4 do
    if darkmode == 0 then
      screen.level(15)
    elseif darkmode == 1 then
      screen.level(0)
    end
    screen.rect(124, i, 4, 2)
    screen.fill()
  end
end
2 Likes

just read this interesting article…and had an idea…so just throwing this out here
(maybe @Justmat or @dan_derks)
:stuck_out_tongue:

if there was script that could read the RNA letters of virus genomes.

  • norns graphics of virus

  • RNA could determine MIDI events or manipulations of samples.

  • user could change the amount of RNA read at a time.

  • user could create RNA or edit genome?

1 Like

Waldorf Blofeld Sample Player Engine with its Mod Matrix.

The special thing about this is, with all the limitations of the synth, you have a mod matrix mixer with several channels, you were able to assign a certain velocity input to a certain channel.

Now with the 60mb ram limitations one had to come up with ideas wich lead to some of the best sample handling i every found in the dozens of samplers i owned from asr 10 asr x mpc and so on.

You could have a 1 velocity layer simple sample of say a Epiano.
Now you could set it up into lets say 4 velocity layers (channels) and make variations to each, defining what velo triggers what channel, adding white noise and attack to a hard hit, adding mellow attack and dampening to a soft hit, mixing in the attack sound of another sample, adding slight lfo etc etc.

This would totaly fit the norns imo. For everyones consideration who can code this.
The idea isnt a new Kontakt player for realism but a way to create very individualized sample sets within norns. Grid velocity would of course be the absolute topping but probably not really an option

2 Likes

i posted a bark-scale filterbank in supercollider here, if anyone is interested in this


also shows attaching an envelope follower to each band.

the filters on 296/296e always seemed a little narrow to me. dunno about the verbos version.

also, maybe worth mentioning that 296 doesn’t use bark scale exactly, but something of don’s own devising.

7 Likes

That would be a huge game changer! Seriously great idea.

Do any current Norns apps support .scl Scala files? Just now getting to know this device

1 Like

To the best of my knowledge no …but! …this just happened do be a point of discussion a few weeks back and a Scala tuning file parser was written. Hope to get it merged into the main norns code base soon.

3 Likes

Ha. I’ll be curious to see how different it is from the one I wrote last week. (This one only returns the values as fractions of an octave, which may not be as widely useful as returning ratios.)

I expected the file format to be way more complicated. It’s no wonder it’s been so widely adopted.

1 Like

hey, is anyone familiar with the python tool called aubio? I was wondering if the aubio cut feature from it could be scripted for Norns at all? It slices sound files at onset or beat timestamps. Would be awesome if files could be cut in this way with the Norns interface. Maybe they could also be saved to the tape for collection? thanks!

https://aubio.org/manual/latest/cli.html

1 Like