Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ----------------------------------------------------------
- -- NES audio visualization script ---------------------
- -- by feasel ~:] 03/19/2013 ---------------------
- ----------------------------------------------------------
- function dutycycle(f)
- -- Width of the ON portion of the square wave (precentage of total cycle)
- if f==0 then
- return "12%" -- actually 12.5%
- elseif f==1 then
- return "25%"
- elseif f==2 then
- return "50%"
- elseif f==3 then
- return "75%"
- else
- return "???"
- end
- end
- detailed = true
- print("Press 'P' to toggle detailed display")
- while true do
- if detailed then gui.text(170, 12, "Press 'P' to hide", "#FFFFFF", "#000000BB") end
- keypress = input.get()
- if keypress.P and not waspressed then
- detailed = not detailed
- end
- waspressed = keypress.P
- rp = sound.get().rp2a03
- s1 = rp.square1
- s2 = rp.square2
- t = rp.triangle
- n = rp.noise
- d = rp.dpcm
- -- DPCM
- y = 25
- d.midikey = math.max(d.midikey, -99)
- d.midikey = math.min(d.midikey, 999)
- if d.dmcloop then dmcLoop = "Loop" else dmcLoop = " " end
- if detailed then
- 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")
- gui.box((d.dmcaddress-0xB000)*0.0123-2, y+16, (d.dmcaddress-0xB000)*0.0123+2, y+16+d.volume*9+2, "#00FFFF", "#000000AA")
- end
- 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")
- -- Square Wave 1
- y = 55
- s1.midikey = math.max(s1.midikey, -99)
- s1.midikey = math.min(s1.midikey, 999)
- if detailed then
- 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")
- 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")
- end
- 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")
- -- Square Wave 2
- y = 85
- s2.midikey = math.max(s2.midikey, -99)
- s2.midikey = math.min(s2.midikey, 999)
- if detailed then
- 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")
- 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")
- end
- 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")
- -- Triangle Wave
- y = 115
- t.midikey = math.max(t.midikey, -99)
- t.midikey = math.min(t.midikey, 999)
- if detailed then
- 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")
- gui.box(t.midikey*1.3-2, y+8, t.midikey*1.3+2, y+9+t.volume*15+1, "#00FF00", "#000000AA")
- end
- gui.box(t.midikey*1.3-2, 215-t.volume*5-1, t.midikey*1.3+2, 215+t.volume*5+1, "#00FF00", "#000000AA")
- -- Noise
- y = 145
- n.midikey = math.max(n.midikey, -99)
- n.midikey = math.min(n.midikey, 999)
- if n.short then noiseLen="short" else noiseLen="long" end
- if n.short then color="#CFCFCF" else color="#8F8F8F" end
- if n.short then w=1 else w=2 end
- if detailed then
- 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")
- gui.box(n.midikey*1.3-w, y+8, n.midikey*1.3+w, y+9+n.volume*15+1, color, "#000000AA")
- end
- gui.box(n.midikey*1.3-w, 225-n.volume*8-1, n.midikey*1.3+w, 225+n.volume*8+1, color, "#000000AA")
- emu.frameadvance()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement