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

Folder acsess and management in TAPE so setting up sample folders made with SAM is fluid to be loaded up timber

1 Like

aubio is actually a C library with python bindings.

aubio by itself works fine on norns. the dependencies for the python tools are a little heavier than i would recommend for the limited disk space on the norns system.

i guess a case could be made for linking aubio into matron and providing lua bindings. i’d be happy to review a PR for that.

or, simpler (in a way): aubiocut is standalone, it can be executed from a norns script.

1 Like

Just a note, this sounds really awesome, I can’t wait to play with it if you get it going!

1 Like

Ah yeah didn’t think about the disk space it would need. Guess there maybe isn’t the need for it as its a pretty fast process from the command line! I also sometimes use the cuts with the tool Sox to randomly shuffle them back into concatenated files which is fun. All of that from one script could be cool. However I have no idea how to do that! thanks.

I posted a link to a recent supercollider tutorial on pulsar synthesis over in the granular theory thread, which got me thinking about how cool it would be to have something in the vein of Roads’ PulsarGenerator or the recent NuPG on Norns.

6 Likes

YES YES YES YES YES!

1 Like

someone needs to do this. i didn’t know the blofeld had a sample player, might have to look into getting one of those. been wondering what i should spend all these stimbucks on. on that note, i have been trying to decide what i would need in hardware form to accomplish my sort of abstract workflow goals that i can’t accomplish with my norns/octatrack combo. I was thinking maybe something like morphagene or Arbhar, but i can sort of accomplish cool sample looping with compass/cheat codes/less concepts.

so now i’m wondering if there is something like Angl or Mangl that can record incoming sample audio. I want a granular sampler that can record live from inputs with the same midi control that angl/mangl has to manipulate the audio like elastic.

i’m really struggling, even with the octatrack and norns, to figure out the best way to mangle samples live. lately ive been using pickup machines and cueing that audio out to norns and then back into a flex machine that resamples and plays back the audio with p lock trigs but it still doesn’t seem as practical or as intuitively controllable as using ableton to edit and structure/piece together short samples that have been granulated and placed on a timeline. maybe that’s the point,and i understand that, but i would really like to be able to do that without a computer, and it doesn’t seem impossible. this might all be due to my inability to think in a big picture sort of perspective.

one way i was thinking would be to grab a simple sampler with some flexible effects like a sp404 then run that through norns live and then into the octatrack to structure. but i find it hard to structure non-beat oriented stuff in the octatrack. it would be cool to be able to freely trigger and record longer samples with something like the sp404. i really loved the sound of the es-1 when i had one, but it was only for very small audio files, which isnt a dealbreaker, but it wasn’t very flexible for the kind of thing i’m trying to do and although it’s adc sounded incredible, it wasn’t really capable of doing high quality sample playback.

And this may already exist and im just not aware, but if i could get a norns script that could easily trigger slightly longer samples (multiple, like with a big folder directory like orca/timber handles sample loading), but also internally resample audio form the inputs and then granulate it with mid mappable parameters like angl, i think that would solve my problem. I previously was thinking a clone of a granular module like the popular eurorack ones would be cool, but now im thinking something that could record and flexibly perform samples would be even more useful. because there are arguably even cooler loopers in norns than what exists currently in the eurorack sphere

1 Like

I am working on something like this. I was going to just add it to mangl, but decided it would be it’s own thing.

22 Likes

Can’t wait for this. I’m sure it will be stellar.

1 Like

oh man, i will be looking forward to this

1 Like