Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local Height=10 -- Max height of the bars
- local plr=game.Players.LocalPlayer
- local Soundbar=workspace.Soundbar
- local Sound=Soundbar.Sound
- local Bars={} for i,v in next,Soundbar:children() do
- if v:IsA'BasePart' then
- table.insert(Bars,v)
- end
- end Height=Height*2
- local nBars,Tweens=#Bars-1,{}
- -- EASING FUNCTIONS --
- local function quadIn(t,b,c,d) t=t/d; return c*t*t+b; end;
- local function quadOut(t,b,c,d) t=t/d; return -c*t*(t-2)+b; end;
- local function Quad(obj,val,ease,d)
- local t,f,con,nt,st,sd=tick()
- Tweens[obj]=t -- Set identifier
- st=obj.Scale.Y -- Start Value
- sd=val-st -- Change in Value
- f=ease=='In' and quadIn or quadOut -- Choose between Out/In
- con=game:GetService'RunService'.RenderStepped:connect(function() nt=tick()-t
- if Tweens[obj]~=t then -- Check for override
- con:disconnect()
- return
- end
- local nv=math.max(.2,f(math.min(d,nt),st,sd,d)) -- New Value
- obj.Scale=Vector3.new(.9,nv,.9)
- obj.Offset=Vector3.new(0,nv/4,0)
- obj.VertexColor=Vector3.new(.7,.3,1):lerp(Vector3.new(.3,1,.7),nv/Height)
- if nt>d then -- Easing done?
- con:disconnect()
- if ease~='In' then
- Quad(obj,.2,'In',.3) -- Drop the bar
- end
- end
- end)
- end
- -- BAR MANIPULATION --
- local function CheckSet(N,S,D) -- Number, Scale, Direction
- local nS=Soundbar[tostring(N)].Mesh.Scale.Y
- if S>nS then
- Set(N,nS+(S-nS)/3,D)
- end
- end
- function Set(N,S,D) -- Number, Scale, Direction
- Quad(Soundbar[tostring(N)].Mesh,S,'Out',.1) -- Grabs the bar and tweens
- if N>0 and D~=1 then -- Checks left for smaller bars to manipulate
- CheckSet(N-1,S,-1)
- end
- if N<nBars and D~=-1 then -- Checks right...
- CheckSet(N+1,S,1)
- end
- end
- -- RENDER LOOP --
- local MPL,PL,curr=0 curr=Sound.SoundId
- game:service'RunService'.RenderStepped:connect(function()
- PL=Sound.PlaybackLoudness
- if Sound.IsPlaying and PL==PL then -- Sound is playing & PlaybackLoudness is not undefined
- if curr~=Sound.SoundId then MPL=0 -- Reset the relative Max PlaybackLoudness on song change
- curr=Sound.SoundId
- end
- MPL=math.max(PL,MPL) PL=PL/MPL -- Normalize PL based on relative Max PlaybackLoudness
- if PL==PL then
- Set(math.floor(PL*nBars),PL*Height) -- Modify bar relative to PlaybackLoudness
- end
- end
- end)
Add Comment
Please, Sign In to add comment