Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. -- patterning
  2. -- norns study 2
  3.  
  4. engine.name = "PolyPerc"
  5.  
  6. function init()
  7. engine.release(3)
  8. notes = {}
  9. selected = {}
  10. -- build a scale, clear selected notes
  11. for m = 1, 5 do
  12. notes[m] = {}
  13. selected[m] = {}
  14. for n = 1, 5 do
  15. notes[m][n] = 55 * 2 ^ ((m * 12 + n * 2) / 12)
  16. selected[m][n] = 0
  17. end
  18. end
  19. light = 0
  20. number = 3
  21. release_amount = 3
  22. min_display_release = 1
  23. max_display_release = 10
  24. min_release_length = 0.1
  25. max_release_length = 4.0
  26. end
  27.  
  28. function redraw()
  29. screen.clear()
  30. for m = 1, 5 do
  31. for n = 1, 5 do
  32. screen.rect(0.5 + m * 9, 0.5 + n * 9, 6, 6)
  33. l = 2
  34. if selected[m][n] == 1 then
  35. l = l + 3 + light
  36. end
  37. screen.level(l)
  38. screen.stroke()
  39. end
  40. end
  41. screen.move(10, 60)
  42. screen.text(number)
  43.  
  44. screen.move(20, 60)
  45. screen.text(release_amount)
  46. screen.update()
  47. end
  48.  
  49. function remap(value, from1, to1, from2, to2)
  50. return (value - from1) / (to1 - from1) * (to2 - from2) + from2
  51. end
  52.  
  53. function key(n, z)
  54. if n == 2 and z == 1 then
  55. -- clear selected
  56. for x = 1, 5 do
  57. for y = 1, 5 do
  58. selected[x][y] = 0
  59. end
  60. end
  61. -- choose new random notes
  62. for i = 1, number do
  63. selected[math.random(5)][math.random(5)] = 1
  64. end
  65. elseif n == 3 then
  66. -- find notes to play
  67. if z == 1 then
  68. for x = 1, 5 do
  69. for y = 1, 5 do
  70. if selected[x][y] == 1 then
  71. mapped_release =
  72. remap(
  73. release_amount,
  74. min_display_release,
  75. max_display_release,
  76. min_release_length,
  77. max_release_length
  78. )
  79. engine.release(mapped_release)
  80. engine.hz(notes[x][y])
  81. end
  82. end
  83. end
  84. light = 7
  85. else
  86. light = 0
  87. end
  88. end
  89. redraw()
  90. end
  91.  
  92. function enc(n, d)
  93. if n == 2 then
  94. release_amount = math.min(max_display_release, (math.max(release_amount + d, min_display_release)))
  95. elseif n == 3 then
  96. -- clamp number of notes from 1 to 4
  97. number = math.min(4, (math.max(number + d, 1)))
  98. end
  99. redraw()
  100. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement