:ΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΜΐ ΐ ΐΜΐΐ ΐ Μΐ ΜΜ ΜΜΐ Μ ΜΜΐΜΐΜ ΐΜ ΜΜΜ ΜΜ ΜΜ ΐΜΜΜΜ ΐ ΐΜ ΐΜΐΜ Μ ΜΜΐΜ ΜΜΐ ΜΐΐΜΜΜ ΐΜΜΜ Μ Μ ΐ ΐΜΜ Μ Μΐ Μ Μ Μ Μ ΐ ΐ Μ Μ Μ ΐΜ ΐ ΜΐΜΐ ΐΐ ΐΐΜΐ ΐΐΜΐ ΐΜΐ ΐΜΐ ΐΐΜΐΜΐ Μΐ ΜΜΜΜ Μ Μ Μ Μ ΐ ΐ Μ Μ ΜΜ ΐ ΐΐΜΜΜΐ ΐΐ ΐΐΜΐ ΐΜΐ ΜΐΜΐ ΐΜΐ ΐΐΜΜΐΜΜΐ Μ ΜΜΐΜΜΜΜΜΜΜΐΜΜ Μ ΐΜΜ Μ ΐΐ ΐΜ ΜΐΜ Μ ΜΜΐ ΜΜΐ ΜΜ ΐΜΜ ΐΜΜ ΜΜΜ ΐΜΜ Μ Μ ΜΜ ΜΜ ΜΜΐ ΜΜ ΜΜΜΐ ΐ ΜΐΜ Μ ΐΜΜΜΜΜΐ ΜΜ ΐ ΜΜΜΐ ΜΜΐ ΐ Μ ΐ Μ Μ ΜΜΐ ΐ ΜΐΜ Μ ΐΜ"""fͺ33333333»DDDDDDDD"fUUUUUUUUUUUUU3wfffffffffDwwww» U™ˆˆfͺ3wͺͺDˆ»»™3"33wUDD"fUUfD"fͺ™™3D»»U™33DDˆ"fUwfͺw»"3Dˆ»3"»UDˆ"U™fͺDU™ˆ"ͺ3»D"Dw»ˆ"UU™ffͺDˆw»Uˆ"3»ͺͺDˆ»»»™"""f333w»DˆfU3fͺ Dw»ͺ™3D» U3"D3wUˆ"f™ d-- title: Fake FFT -- author: @jtruk -- desc: A shim to run effects that use the TIC-80 FFT fork on non-FFT builds -- script: lua -- group: Hex Heroes -- date: Apr 2023 -- license: Code Credit License v1.1.0 -- Feel welcome to use this function -- Explanation/send improvements via: -- https://github.com/creativenucleus/tic-80-sketches/tree/main/fake-fft fakeFft=function(n) local bpm=100 local cycle=(60*1000)/bpm local peaks={} peaks={{ pos=3, t=1-(time()%cycle)/cycle },{ pos=50, t=1-((time()+cycle/4)%cycle)/cycle },{ pos=90, t=1-((time()+cycle/2)%cycle)/cycle },{ pos=130, t=1-((2*time()+cycle/8)%cycle)/cycle },{ pos=230, t=1-((2*time()+cycle/4)%cycle)/cycle }} local d=0 for p=1,#peaks do peak=peaks[p] d=d+math.max(0,peak.t*(1-math.abs((n-peak.pos)/10^0.4))) end d=math.max(0,d+math.random()*.3) return math.min(1,d/(n+1)^.4) end EQ={} function BOOT() for i=0,255 do EQ[i]=0 end end useRealFftFn=true function TIC() if btnp(4) then useRealFftFn=not useRealFftFn end cls() for n=0,255 do local fftval=0 if useRealFftFn then fftval=fft and fft(n) or 0 else fftval=fakeFft(n) end local x=(n//64)*60 local y=60+n%64 line(x,y,x+EQ[n]*50,y,1) line(x,y,x+fftval*50,y,2+(n%10)) if(fftval>EQ[n])then EQ[n]=fftval else -- decay EQ[n]=EQ[n]*.995 end end print("Fake FFT generator",0,0,12,false,2) print("Press button A (keyboard: Z) to toggle",0,15,12) local str="FFT: " if(useRealFftFn)then if fft then str=str.."Real" else str=str.."[!Real is not available]" end else str=str.."Fake" end print(str,0,50,12) end