soundgen=require "soundgen" love.window.setMode(800,600,{resizable=true}) function znoise(...) return love.math.noise(...)*2-1 end local sdata local source function love.keypressed(k) local p="sounds/"..k..".lua" if love.filesystem.getInfo(p) and k~="0" and k~="space" then if source then source:stop() source=nil sdata=nil end package.loaded.soundgen=nil soundgen=require"soundgen" local ok,err=xpcall(function()return dofile("sounds/"..k..".lua")end,debug.traceback) if ok and err then print("booooom") sdata=err source=love.audio.newSource(sdata) source:setLooping(true) source:play() else print("bad",ok,source,err) end elseif k=="0" then if source then source:stop() source=nil sdata=nil end elseif k=="space" then if source then local _ = source:isPlaying() and {source:pause()} or source:play() end end end local l1={} local l2={} local res=4096 local chanc=0 local upd=nil local pitch=1 function love.mousemoved(x,y,dx,dy) local w,h=love.graphics.getDimensions() local dy=-dy/h*2*(math.abs(pitch)+.1) if love.mouse.isDown(1) then pitch=math.min(10,math.max(-10,pitch+dy)) end end function love.update(dt) local w,h=love.graphics.getDimensions() local rate=sdata and sdata:getSampleRate() or 0 chanc=sdata and sdata:getChannelCount() or 1 local s2i=chanc==2 if source then source:setPitch(math.max(0.001,pitch)) if pitch<0.001 then source:seek(math.max(0,source:tell()+pitch*dt)) end end local ma=sdata and sdata:getSampleCount() or 1 for n=1,res do local sami=(source and source:tell("samples") or 0)-math.floor(rate*((n-1)/(res-1))*0.05) sami=sami%ma l1[(n-1)*2+1],l1[(n-1)*2+2] =w-(n-1)/(res-1)*w,(sdata and (-sdata:getSample(s2i and sami*2 or sami)*0.5*0.5+0.5) or 0.5)*h if s2i then l2[(n-1)*2+1],l2[(n-1)*2+2] =w-(n-1)/(res-1)*w,(sdata and (-sdata:getSample(sami*2+1)*0.5*0.5+0.5) or 0.5)*h end end upd=true end function love.draw() love.graphics.print(pitch) love.graphics.push("all") love.graphics.setLineJoin("none") love.graphics.setLineWidth(1) love.graphics.setLineStyle("rough") if chanc==1 then love.graphics.setColor(1,1,1) love.graphics.line(l1) elseif chanc==2 then love.graphics.setColor(0.8,0.8,1) love.graphics.line(l1) love.graphics.setColor(1,0.8,0.8) love.graphics.line(l2) end love.graphics.pop() end