Mangl

mangl

a 4 track granular sample player.

mangl is based on angl by @tehn and uses the Glut engine by @artfwo.

Requirements

Norns 2.0
Glut
Arc

Documentation

  • arc ring 1 = speed

  • arc ring 2 = pitch

  • arc ring 3 = grain size

  • arc ring 4 = density

  • norns key1 = alt

  • norns key2 = enable/disable
    voice

  • norns key3 = next track

  • norns enc1 = track volume

nb: key3 will only advance to the next track if there is a
sample loaded. otherwise returns to track 1.

holding alt and turning a ring, or pressing a button,
performs a secondary function.

  • alt + ring1 = scrub

  • alt + ring2 = fine tune

  • alt + ring3 = spread

  • alt + ring4 = jitter

  • alt + key2 = loop in/out

  • alt + key3 = loop clear

nb: loop in/out is set in one button press. loop in
on press, loop out on release.

Download

v1.3 last updated 8.7.19

49 Likes

This is GREAT!!!
Is there a way use it without ark? Maybe by mapping midi controller with rotaries to it.

2 Likes

wow!!! It’s just what I’m looking for <3

2 Likes

I haven’t tried it, but should be possible just using cc mapping in the parameters menu.

edit: @KthulhTriokus I just tried this, and it works. Though it is a bit less “playable” :slight_smile:

4 Likes

This might be the one to push me over the edge into Norns ownership

2 Likes

Thanks! What is the key difference between angl and mangl?

They both use Glut, so the underlying engine and parameters are the same. The biggest difference between the scripts being their control schemes. Outside of control oriented stuff, mangl adds the ability to scrub through the audio file, and to loop a portion of the file. That’s about it, tho.

2 Likes

mangl seems more ‘playable’ to me for some reason.

Beautiful demo of a beautiful thing. Thank you!

2 Likes

This looks and sounds fantastic. Might tip me over the edge into the madness of getting an arc.

2 Likes

It’s hard to explain just how good the Arc feels :sweat_smile: but… it feels really good.

6 Likes

i usually discourage gas but not when it comes to the arc
anybody who can afford one should absolutely get it

it’s the most underrated thing and very tough to imagine/describe

4 Likes

There are a few things in this life I enjoy more than using arc with ansible to control four free running lfos. I could watch those little lights circle around those knobs all day long. It’s just perfect.

4 Likes

To that end: https://www.instagram.com/p/Bv0HMXEghpd/?utm_source=ig_share_sheet&igshid=uhwqp6cm7654

4 Likes

thank you @Justmat :slight_smile:

1 Like

after finally exiting the forest of problems I’ve had getting my norns upated to 2.0, I spent a bunch fo time pushing audio through mangl and it’s so fucking good.

6 Likes

FRACKEN WOW!!!
what an amazing script!

THANK YOU for making this.
been making noiz with it for the past hour or so…lost in the wall of noiz.

it’s so intuitive with the setup and use.

not sure if it’s possible…i get the minimalist aesthetic with it all…but…is it possible to put text over the four arc variables?
and can they switch to their other use when hitting alt?

1 Like

i actually did this for my own copy as well. assuming nothing as changed, you can probably just copy/paste this over the redraw() function. but i don’t know if this will mess something up when the script is updated by the author!

 function redraw()
  screen.clear()
  screen.move(64,40)
  screen.level(params:get(track .. "play") == 2 and 15 or 3)
  screen.font_face(10)
  screen.font_size(30)
  screen.text_center(tracks[track])
  
  if util.time() - time_last_enc < .6 and last_enc == 1 then
    screen.move(10, 10)
    screen.font_face(1)
    screen.font_size(8)
    screen.text("vol : " .. string.format("%.2f", params:get(track .. "volume")))
  end
  
  screen.move(20, 50)
  screen.font_size(8)
  screen.font_face(1)
	screen.text_center("speed")
  screen.move(20, 60)
  screen.text_center(string.format("%.2f", params:get(track .. "speed")))
  screen.move(50, 50)
	screen.text_center("pitch")
  screen.move(50, 60)
  screen.text_center(string.format("%.2f", params:get(track .. "pitch")))

  if alt then
		screen.move(80, 50)
		screen.text_center("spread")
		screen.move(80, 60)
    screen.text_center(string.format("%.2f", params:get(track .. "spread")))
    screen.move(110, 50)
		screen.text_center("jitter")
    screen.move(110, 60)
    screen.text_center(string.format("%.2f", params:get(track .. "jitter")))
  else
		screen.move(80, 50)
		screen.text_center("size")
		screen.move(80, 60)
    screen.text_center(string.format("%.2f", params:get(track .. "size")))
    screen.move(110, 50)
		screen.text_center("density")
    screen.move(110, 60)
    screen.text_center(string.format("%.2f", params:get(track .. "density")))
  end

  screen.move(track == 3 and 100 or 90, 40)
  screen.level(loops[track].state == 1 and 12 or 0)
  screen.font_size(12)
  screen.font_face(12)
  screen.text("L")

  screen.update()
end

edit to add also yeah this thing is super fun! can’t remember if i already complimented earlier! amazing work

2 Likes

yeah…that fracked it all up.
or…i just fracked it all up.
:stuck_out_tongue:
i’m not a programmer…just a noizician.

Thank you! I appreciate the kind words :smiley:

This would be a super simple add, I’ll post an updated version later today.

1 Like