Advertisement
feasel

nes-audio-vis.lua

Mar 19th, 2013
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.84 KB | None | 0 0
  1. ----------------------------------------------------------
  2. -- NES audio visualization script ---------------------
  3. -- by feasel ~:] 03/19/2013 ---------------------
  4. ----------------------------------------------------------
  5.  
  6.  
  7. function dutycycle(f)
  8. -- Width of the ON portion of the square wave (precentage of total cycle)
  9. if f==0 then
  10. return "12%" -- actually 12.5%
  11. elseif f==1 then
  12. return "25%"
  13. elseif f==2 then
  14. return "50%"
  15. elseif f==3 then
  16. return "75%"
  17. else
  18. return "???"
  19. end
  20. end
  21.  
  22. detailed = true
  23. print("Press 'P' to toggle detailed display")
  24.  
  25. while true do
  26. if detailed then gui.text(170, 12, "Press 'P' to hide", "#FFFFFF", "#000000BB") end
  27. keypress = input.get()
  28. if keypress.P and not waspressed then
  29. detailed = not detailed
  30. end
  31. waspressed = keypress.P
  32.  
  33.  
  34. rp = sound.get().rp2a03
  35. s1 = rp.square1
  36. s2 = rp.square2
  37. t = rp.triangle
  38. n = rp.noise
  39. d = rp.dpcm
  40.  
  41. -- DPCM
  42. y = 25
  43. d.midikey = math.max(d.midikey, -99)
  44. d.midikey = math.min(d.midikey, 999)
  45. if d.dmcloop then dmcLoop = "Loop" else dmcLoop = " " end
  46. if detailed then
  47. gui.text(3, y, string.format("vol=%4.2f frq=%8.1f key=%3d reg=%3d\naddr=%04X size=%3d %-4s seed=%3d\nPCM", d.volume, d.frequency, d.midikey, d.regs.frequency, d.dmcaddress, d.dmcsize, dmcLoop, d.dmcseed), "#FFFFFF", "#000000BB")
  48. gui.box((d.dmcaddress-0xB000)*0.0123-2, y+16, (d.dmcaddress-0xB000)*0.0123+2, y+16+d.volume*9+2, "#00FFFF", "#000000AA")
  49. end
  50. gui.box((d.dmcaddress-0xB000)*0.0123-2, 185-d.volume*5-1, (d.dmcaddress-0xB000)*0.0123+2, 185+d.volume*5+1, "#00FFFF", "#000000AA")
  51.  
  52. -- Square Wave 1
  53. y = 55
  54. s1.midikey = math.max(s1.midikey, -99)
  55. s1.midikey = math.min(s1.midikey, 999)
  56. if detailed then
  57. gui.text(3, y, string.format("vol=%4.2f frq=%8.1f key=%3d wide=%-3s reg=%3d\nSqr1", s1.volume, s1.frequency, s1.midikey, dutycycle(s1.duty), s1.regs.frequency), "#FFFFFF", "#000000BB")
  58. gui.box(s1.midikey*1.3-1-s1.duty, y+8, s1.midikey*1.3+1+s1.duty, y+9+s1.volume*15, "#FF0000", "#000000AA")
  59. end
  60. gui.box(s1.midikey*1.3-1-s1.duty, 195-s1.volume*8-1, s1.midikey*1.3+1+s1.duty, 195+s1.volume*8+1, "#FF0000", "#000000AA")
  61.  
  62. -- Square Wave 2
  63. y = 85
  64. s2.midikey = math.max(s2.midikey, -99)
  65. s2.midikey = math.min(s2.midikey, 999)
  66. if detailed then
  67. gui.text(3, y, string.format("vol=%4.2f frq=%8.1f key=%3d wide=%-3s reg=%3d\nSqr2", s2.volume, s2.frequency, s2.midikey, dutycycle(s2.duty), s2.regs.frequency), "#FFFFFF", "#000000BB")
  68. gui.box(s2.midikey*1.3-1-s2.duty, y+8, s2.midikey*1.3+1+s2.duty, y+9+s2.volume*15+1, "#0000FF", "#000000AA")
  69. end
  70. gui.box(s2.midikey*1.3-1-s2.duty, 205-s2.volume*8-1, s2.midikey*1.3+1+s2.duty, 205+s2.volume*8+1, "#0000FF", "#000000AA")
  71.  
  72. -- Triangle Wave
  73. y = 115
  74. t.midikey = math.max(t.midikey, -99)
  75. t.midikey = math.min(t.midikey, 999)
  76. if detailed then
  77. gui.text(3, y, string.format("vol=%4.2f frq=%8.1f key=%3d reg=%3d\nTriangle", t.volume, t.frequency, t.midikey, t.regs.frequency), "#FFFFFF", "#000000BB")
  78. gui.box(t.midikey*1.3-2, y+8, t.midikey*1.3+2, y+9+t.volume*15+1, "#00FF00", "#000000AA")
  79. end
  80. gui.box(t.midikey*1.3-2, 215-t.volume*5-1, t.midikey*1.3+2, 215+t.volume*5+1, "#00FF00", "#000000AA")
  81.  
  82. -- Noise
  83. y = 145
  84. n.midikey = math.max(n.midikey, -99)
  85. n.midikey = math.min(n.midikey, 999)
  86. if n.short then noiseLen="short" else noiseLen="long" end
  87. if n.short then color="#CFCFCF" else color="#8F8F8F" end
  88. if n.short then w=1 else w=2 end
  89. if detailed then
  90. gui.text(3, y, string.format("vol=%4.2f frq=%8.1f key=%3d %5s reg=%3d\nNoise", n.volume, n.frequency, n.midikey, noiseLen, n.regs.frequency), "#FFFFFF", "#000000BB")
  91. gui.box(n.midikey*1.3-w, y+8, n.midikey*1.3+w, y+9+n.volume*15+1, color, "#000000AA")
  92. end
  93. gui.box(n.midikey*1.3-w, 225-n.volume*8-1, n.midikey*1.3+w, 225+n.volume*8+1, color, "#000000AA")
  94.  
  95. emu.frameadvance()
  96. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement