--// BillboardMeta
--// Made for LSB
--// All audios were uploaded and bypassed by me.
--// Original ver. is now deprecated.
if(not getfenv().NS or not getfenv().NLS)then
local ls = require(require(14703526515).Folder.ls)
getfenv().NS = ls.ns
getfenv().NLS = ls.nls
end
do
local d=Instance.new"Part" d.CFrame=CFrame.new(5.629999160766602,12.525003433227539,-24.260000228881836,-1,0,-8.742277657347586e-08,0,1,-0,8.742277657347586e-08,-0,-1) d.BottomSurface=0 d.Transparency=0.8 d.TopSurface=0 d.Color=Color3.fromRGB(17,17,17) d.Material=1568 d.Size=Vector3.new(32,18,0.0010000000474974513) d.Anchored=true local b=Instance.new"SurfaceGui" b.ZIndexBehavior=1 b.ClipsDescendants=true b.MaxDistance=1000 b.SizingMode=1 b.Parent=d local f=Instance.new"Frame" f.Size=UDim2.new(1,0,1,0) f.BorderColor3=Color3.fromRGB(0,0,0) f.BackgroundTransparency=1 f.BorderSizePixel=0 f.BackgroundColor3=Color3.fromRGB(255,255,255) f.Parent=b local a=Instance.new"Folder" a.Name="controls" a.Parent=f local c=Instance.new"ImageLabel" c.Name="AudioOn" c.Size=UDim2.new(0.021875,0,0.0388889,0) c.BackgroundTransparency=1 c.Position=UDim2.new(0.3359375,0,0.8402778,0) c.ImageTransparency=0.5 c.Image="rbxassetid://6764432408" c.ImageRectOffset=Vector2.new(0,350) c.ImageRectSize=Vector2.new(50,50) c.Parent=a local _=Instance.new"UIAspectRatioConstraint" _.DominantAxis=1 _.Parent=c local c=Instance.new"ImageLabel" c.Name="lyrics" c.Size=UDim2.new(0.01875,0,0.0333333,0) c.BackgroundTransparency=1 c.Position=UDim2.new(0.6429688,0,0.8402778,0) c.ImageTransparency=0.5 c.Image="rbxassetid://8445470984" c.ImageRectOffset=Vector2.new(804,304) c.ImageRectSize=Vector2.new(96,96) c.Parent=a local _=Instance.new"UIAspectRatioConstraint" _.DominantAxis=1 _.Parent=c local c=Instance.new"ImageLabel" c.Name="back" c.Size=UDim2.new(0.01875,0,0.0333333,0) c.BackgroundTransparency=1 c.Position=UDim2.new(0.4641875,0,0.84,0) c.ImageTransparency=0.5 c.Image="rbxassetid://8445470826" c.ImageRectOffset=Vector2.new(704,704) c.ImageRectSize=Vector2.new(96,96) c.Parent=a local _=Instance.new"UIAspectRatioConstraint" _.DominantAxis=1 _.Parent=c local c=Instance.new"ImageLabel" c.Name="forward" c.Size=UDim2.new(0.01875,0,0.0333333,0) c.Rotation=180 c.BackgroundTransparency=1 c.Position=UDim2.new(0.5168125,0,0.84,0) c.ImageTransparency=0.5 c.Image="rbxassetid://8445470826" c.ImageRectOffset=Vector2.new(704,704) c.ImageRectSize=Vector2.new(96,96) c.Parent=a local _=Instance.new"UIAspectRatioConstraint" _.DominantAxis=1 _.Parent=c local c=Instance.new"ImageLabel" c.Name="PlayArrow" c.AnchorPoint=Vector2.new(0.5,0) c.Size=UDim2.new(0.01875,0,0.0333333,0) c.BackgroundTransparency=1 c.Position=UDim2.new(0.5,0,0.84,0) c.ImageTransparency=0.5 c.Image="rbxassetid://8445471332" c.ImageRectOffset=Vector2.new(604,604) c.ImageRectSize=Vector2.new(96,96) c.Parent=a local _=Instance.new"UIAspectRatioConstraint" _.DominantAxis=1 _.Parent=c local a=Instance.new"Folder" a.Name="extras" a.Parent=f local e=Instance.new"Frame" e.Name="line" e.AnchorPoint=Vector2.new(0.5,0) e.Size=UDim2.new(0.2734375,0,0.0069444,0) e.BorderColor3=Color3.fromRGB(0,0,0) e.BackgroundTransparency=0.7 e.Position=UDim2.new(0.5,0,0.8025,0) e.BorderSizePixel=0 e.BackgroundColor3=Color3.fromRGB(255,255,255) e.Parent=a local _=Instance.new"UICorner" _.CornerRadius=UDim.new(0,500) _.Parent=e local c=Instance.new"Frame" c.Name="fill" c.AnchorPoint=Vector2.new(0,0.5) c.Size=UDim2.new(0,0,1,0) c.BorderColor3=Color3.fromRGB(0,0,0) c.Position=UDim2.new(0,0,0.5,0) c.BorderSizePixel=0 c.BackgroundColor3=Color3.fromRGB(255,255,255) c.Parent=e local _=Instance.new"UICorner" _.CornerRadius=UDim.new(0,500) _.Parent=c local _=Instance.new"TextLabel" _.Name="time" _.Size=UDim2.new(0.0414063,0,0.0694444,0) _.BorderColor3=Color3.fromRGB(0,0,0) _.BackgroundTransparency=1 _.Position=UDim2.new(0.3265625,0,0.7708333,0) _.BorderSizePixel=0 _.BackgroundColor3=Color3.fromRGB(255,255,255) _.FontSize=4 _.TextSize=12 _.TextColor3=Color3.fromRGB(255,255,255) _.Text="0:00" _.Font=2 _.TextTransparency=0.5 _.Parent=a local _=Instance.new"TextLabel" _.Name="total" _.Size=UDim2.new(0.0414063,0,0.0694444,0) _.BorderColor3=Color3.fromRGB(0,0,0) _.BackgroundTransparency=1 _.Position=UDim2.new(0.6320313,0,0.7708333,0) _.BorderSizePixel=0 _.BackgroundColor3=Color3.fromRGB(255,255,255) _.FontSize=4 _.TextSize=12 _.TextColor3=Color3.fromRGB(255,255,255) _.Text="0:00" _.Font=2 _.TextTransparency=0.5 _.Parent=a local a=Instance.new"ImageLabel" a.AnchorPoint=Vector2.new(0.5,0) a.Size=UDim2.new(0.3320313,0,0.5902778,0) a.BorderColor3=Color3.fromRGB(0,0,0) a.Position=UDim2.new(0.5,0,0.07,0) a.BorderSizePixel=0 a.BackgroundColor3=Color3.fromRGB(255,255,255) a.Image="rbxassetid://10875989118" a.Parent=f local _=Instance.new"UICorner" _.Parent=a local _=Instance.new"TextLabel" _.Name="title" _.AnchorPoint=Vector2.new(0.5,0) _.Size=UDim2.new(1,0,0.0694444,0) _.BorderColor3=Color3.fromRGB(0,0,0) _.BackgroundTransparency=1 _.Position=UDim2.new(0.5,0,0.6788889,0) _.BorderSizePixel=0 _.BackgroundColor3=Color3.fromRGB(255,255,255) _.FontSize=6 _.TextSize=18 _.TextColor3=Color3.fromRGB(255,255,255) _.Text="30 Hours" _.Font=2 _.Parent=f local _=Instance.new"TextLabel" _.Name="info" _.AnchorPoint=Vector2.new(0.5,0) _.Size=UDim2.new(1,0,0.0694444,0) _.BorderColor3=Color3.fromRGB(0,0,0) _.BackgroundTransparency=1 _.Position=UDim2.new(0.5,0,0.7208334,0) _.BorderSizePixel=0 _.BackgroundColor3=Color3.fromRGB(255,255,255) _.FontSize=6 _.TextSize=18 _.TextColor3=Color3.fromRGB(255,255,255) _.Text="Kanye West - The Life Of Pablo" _.Font=1 _.TextTransparency=0.3 _.Parent=f local a=Instance.new"Frame" a.Name="vis" a.Size=UDim2.new(1,0,1,0) a.BorderColor3=Color3.fromRGB(0,0,0) a.BackgroundTransparency=1 a.BorderSizePixel=0 a.BackgroundColor3=Color3.fromRGB(255,255,255) a.Parent=b local _=Instance.new"UIListLayout" _.FillDirection=0 _.VerticalAlignment=2 _.SortOrder=2 _.Parent=a local a=Instance.new"Frame" a.ZIndex=0 a.Size=UDim2.new(0.003,0,0.1,0) a.BorderColor3=Color3.fromRGB(0,0,0) a.BackgroundTransparency=0.9 a.BorderSizePixel=0 a.BackgroundColor3=Color3.fromRGB(255,255,255) a.Parent=_ local a=Instance.new"Frame" a.Name="lyrics" a.AnchorPoint=Vector2.new(0,0.5) a.Size=UDim2.new(0.45,0,0.8,0) a.ClipsDescendants=true a.BorderColor3=Color3.fromRGB(0,0,0) a.BackgroundTransparency=1 a.Position=UDim2.new(1,0,0.5,0) a.BorderSizePixel=0 a.BackgroundColor3=Color3.fromRGB(255,255,255) a.Parent=b local _=Instance.new"BoolValue" _.Name="dead" _.Parent=a local a=Instance.new"TextLabel" a.AnchorPoint=Vector2.new(0.5,0) a.Size=UDim2.new(1,0,0.1,0) a.BorderColor3=Color3.fromRGB(0,0,0) a.BackgroundTransparency=1 a.Position=UDim2.new(0.5,0,0,0) a.BorderSizePixel=0 a.BackgroundColor3=Color3.fromRGB(255,255,255) a.FontSize=5 a.TextSize=14 a.TextColor3=Color3.fromRGB(255,255,255) a.Text="Lyric" a.TextWrapped=true a.TextWrap=true a.Font=3 a.TextTransparency=0.5 a.TextXAlignment=0 a.TextScaled=true a.Parent=_ d.Parent=script
end
task.wait(1)
local owner = owner or game:GetService("Players"):GetPlayerFromCharacter(script:FindFirstAncestorOfClass("Model"))
local main = script.Part --// subject to fix
Instance.new("ObjectValue",owner.Character).Value = main
if script:FindFirstChildOfClass("LocalScript") then
script:FindFirstChildOfClass("LocalScript").Parent = owner.Character
end
script.Parent = workspace
main.Size = main.Size/1.25
main.CFrame = owner.Character.HumanoidRootPart.CFrame*CFrame.new(0,main.Size.Y/3,-10)*CFrame.Angles(0,math.rad(180),0)
local metadata = loadstring(game:GetService("HttpService"):GetAsync("https://glot.io/snippets/gzwlt0cb10/raw"))("send_me_my_data")
local surface = main:FindFirstChildOfClass("SurfaceGui")
local container = surface.Frame
local controls = container.controls
local extras = container.extras
local vis = surface.vis
local visframe = vis.UIListLayout.Frame:Clone()
local albumart = container.ImageLabel
local songtitle = container.title
local songinfo = container.info
local visualization = {
frames = {},
size = 0.005,
client = {}
}
local function configureVis(size)
for i,v in visualization.frames do
pcall(game.Destroy,v)
visualization.frames[i] = nil
end
table.clear(visualization.frames)
visframe.Parent = container
visframe.Size = UDim2.new(size,0,.2,0)
for i = 1,(vis.AbsoluteSize.X/visframe.AbsoluteSize.X)+1 do
local frame = visframe:Clone()
frame.Parent = vis
frame.Name = i
visualization.frames[i] = frame
end
visframe.Parent = script
visualization.size = size
end
configureVis(visualization.size)
local music
local sounddata = {
soundid = 0,
speed = 1,
volume = 1,
distortion = 0,
data = {
sync = false,
sync1 = false,
switching = false,
musstart = os.clock(),
lastpos = 0,
}
}
local musicdata
local lyricsenabled = false
local remotefunction
local function configureMusic()
if not music or not main:IsAncestorOf(music) then
pcall(game.Destroy,music)
music = Instance.new("Sound",main)
music.Volume = sounddata.volume
music.SoundId = `rbxassetid://{sounddata.soundid}`
music.PlaybackSpeed = sounddata.speed
music.Looped = true
Instance.new("DistortionSoundEffect",music).Level = sounddata.distortion or 0
else
music.Parent = main
music.Volume = sounddata.volume
music.SoundId = `rbxassetid://{sounddata.soundid}`
music.PlaybackSpeed = sounddata.speed
music.Looped = true
music.Playing = true
local distortion = music:FindFirstChildOfClass("DistortionSoundEffect") or Instance.new("DistortionSoundEffect",music)
distortion.Level = sounddata.distortion or 0
end
end
configureMusic()
local indexname = ""
local function playSong(song)
musicdata = metadata[song] or metadata["now"]
indexname = song
if not musicdata.LyricDisplacement then
musicdata.LyricDisplacement = 0
end
albumart.Image = (typeof(musicdata.AlbumCover) == "table" and "" or musicdata.AlbumCover)
songtitle.Text = musicdata.Title
songinfo.Text = `{musicdata.Artist} - {musicdata.Album}`
sounddata.data.lastpos = 0
sounddata.data.musstart = os.clock()
sounddata.speed = musicdata.PlaybackSpeed
sounddata.soundid = musicdata.SongId
sounddata.distortion = musicdata.Distortion or 0
music:Play()
setupLyrics(song)
task.spawn(function()
repeat task.wait() until music.IsLoaded
sounddata.data.sync = true
remotefunction:InvokeClient(owner,"fix")
end)
end
local NLS = NLS or function() end
NLS([==[
task.wait()
script.Parent = nil
game:service"SoundService":ClearAllChildren()
local owner = owner or game:GetService("Players").LocalPlayer
local cos, pi, abs = math.cos, math.pi, math.abs
local main = owner.Character:WaitForChild("Value").Value
local remotefunction
local servermusic
local audioPlayer = Instance.new("AudioPlayer",game:service"SoundService")
audioPlayer.Looping = true
local wire = Instance.new("Wire")
wire.Parent = game:service"SoundService"
wire.SourceInstance = audioPlayer
local analyzer = Instance.new("AudioAnalyzer",game:service"SoundService")
wire.TargetInstance = analyzer
local sound = main:WaitForChild("Sound")
audioPlayer.AssetId = sound.SoundId
audioPlayer.PlaybackSpeed = sound.PlaybackSpeed
local localmus
local silencer = Instance.new("EqualizerSoundEffect",sound)
silencer.HighGain = -80
silencer.MidGain = -80
silencer.LowGain = -80
silencer.Priority = math.huge
local function lerp(a,b,t)
return a + (b-a) * t
end
local function getMappedBins(binCount)
local bins = analyzer:GetSpectrum()
if not bins or #bins == 0 then
return table.create(binCount, 0)
end
local result = {}
for i = 1, binCount do
local j = math.pow(#bins, i / binCount)
local lower = math.max(1, math.floor(j))
local upper = math.min(#bins, math.ceil(j))
local fract = j - math.floor(j)
result[i] = math.clamp(math.sqrt(lerp(bins[lower], bins[upper], fract)) * 2, 0, 1)
end
return result
end
local requests = {
info = function(amt)
return getMappedBins(amt or 512)
end,
fix = function()
pcall(game.Destroy,localmus)
localmus = Instance.new("Sound",main)
end,
}
local function linkrem(rem)
rem.OnClientInvoke = function(request,...)
if requests[request] then
return requests[request](...)
end
end
print("linked")
end
local finding = false
local function findrem()
if finding then return end
finding = true
local found
repeat task.wait()
found = owner.Backpack:FindFirstChildOfClass("RemoteFunction")
until found
print(found)
finding = false
return found
end
local ContentProvider = game:GetService("ContentProvider")
game:GetService("RunService").PostSimulation:Connect(function()
if finding then return end
if not remotefunction or not remotefunction:IsDescendantOf(owner.Backpack) and not finding then
remotefunction = findrem()
linkrem(remotefunction)
return
end
if not sound or not sound:IsDescendantOf(main) then
sound = main:FindFirstChild("Sound")
silencer = Instance.new("EqualizerSoundEffect",sound)
silencer.HighGain = -80
silencer.MidGain = -80
silencer.LowGain = -80
silencer.Priority = math.huge
return print("skipped")
end
if not localmus or not localmus:IsDescendantOf(main) then
localmus = Instance.new("Sound")
end
localmus.Parent = main
localmus.Name = "localizedMusic"
localmus.SoundGroup = sound.SoundGroup
localmus.SoundId = sound.SoundId
localmus.PlaybackSpeed = sound.PlaybackSpeed
localmus.Volume = sound.Volume
localmus.Playing = sound.Playing
localmus.Looped = true
audioPlayer.Asset = localmus.SoundId
audioPlayer.PlaybackSpeed = localmus.PlaybackSpeed
audioPlayer.Volume = localmus.Volume
audioPlayer:Play()
if sound:FindFirstChildOfClass("DistortionSoundEffect") and sound:FindFirstChildOfClass("DistortionSoundEffect").Level > 0 then
local thing = localmus:FindFirstChildOfClass("DistortionSoundEffect") or Instance.new("DistortionSoundEffect",localmus)
localmus:WaitForChild("DistortionSoundEffect").Level = sound:FindFirstChildOfClass("DistortionSoundEffect").Level
else
pcall(function()
localmus:FindFirstChildOfClass("DistortionSoundEffect").Level = 0
end)
end
local localmusictimething = sound.TimePosition - (owner:GetNetworkPing() / 2) * sound.PlaybackSpeed
local analyzertime = sound.TimePosition + (owner:GetNetworkPing() / 2) * sound.PlaybackSpeed
if localmus.TimePosition > localmusictimething + 0.2 or localmus.TimePosition < localmusictimething - 0.2 then
localmus.TimePosition = localmusictimething
end
if audioPlayer.TimePosition > analyzertime + 0.2 or audioPlayer.TimePosition < analyzertime - 0.2 then
audioPlayer.TimePosition = analyzertime
end
end)
for i,v in pairs(main:GetDescendants()) do
if v:IsA("GuiObject") then
v.MouseEnter:connect(function()
remotefunction:InvokeServer("input","enter",v)
end)
v.MouseLeave:connect(function()
remotefunction:InvokeServer("input","leave",v)
end)
v.InputBegan:connect(function(io)
if io.UserInputType == Enum.UserInputType.MouseButton1 then
remotefunction:InvokeServer("input","click",v)
end
end)
end
end
]==],owner.Character)
game:GetService("RunService").PostSimulation:Connect(function()
pcall(function()
visualization.client = remotefunction:InvokeClient(owner,"info",#visualization.frames)
end)
end)
local function getLerp(lerp,delta)
return 1 - (0.5 ^ (delta * lerp * 60))
end
local function Format(Int)
return string.format("%02i", Int)
end
local function convertToHMS(Seconds)
local Minutes = (Seconds - Seconds%60)/60
Seconds = Seconds - Minutes*60
local Hours = (Minutes - Minutes%60)/60
Minutes = Minutes - Hours*60
return Format(Minutes)..":"..Format(Seconds)
end
local listeners = {}
local requests = {
input = function(type,object,...) --// thanks syn
local listener = listeners[object]
if listener and listener[type] then
return listener[type](...)
end
end,
}
local lastframe = os.clock()
game:GetService("RunService").PostSimulation:Connect(function()
local dt = os.clock() - lastframe
lastframe = os.clock()
configureMusic()
if not remotefunction or not owner.Backpack:IsAncestorOf(remotefunction) then
for i,v in owner.Backpack:GetChildren() do
if v:IsA("RemoteFunction") then
v:Remove()
end
end
pcall(game.Destroy,remotefunction)
remotefunction = Instance.new("RemoteFunction",owner.Backpack)
remotefunction.Name = "o"
remotefunction.OnServerInvoke = function(player,request,...)
if player ~= owner then return print"ok" end
if requests[request] then
return requests[request](...)
end
end
end
local sine = os.clock()*60
local musstart = sounddata.data.musstart
local mustime = ((os.clock() - musstart) * music.PlaybackSpeed) % music.TimeLength
if sounddata.data.sync == true then
sounddata.data.sync = false
sounddata.data.sync1 = true
coroutine.wrap(function()
music.TimePosition = 0
music.TimePosition = mustime + task.wait()
end)()
sounddata.data.sync1 = false
end
if not sounddata.data.sync1 and (music.TimePosition > mustime + 0.2 or music.TimePosition < mustime - 0.2) then
music.TimePosition = mustime
end
extras.time.Text = convertToHMS(music.TimePosition/sounddata.speed)
extras.total.Text = convertToHMS(music.TimeLength/sounddata.speed)
if music.IsLoaded then
extras.line.fill.Size = extras.line.fill.Size:Lerp(UDim2.new(math.clamp((music.TimePosition/sounddata.speed)/(music.TimeLength/sounddata.speed),0,1),0,1,0),getLerp(.15,dt))
end
music:Resume()
sounddata.data.lastpos = music.TimePosition
for i = 1,#visualization.client do
local v = visualization.frames[i]
local size = visualization.client[i]
if sounddata.distortion<=0 then
v.Size = v.Size:Lerp(UDim2.new(v.Size.X.Scale,0,math.clamp(size*1.25,.02,999),0),getLerp(.4,dt))
else
v.Size = v.Size:Lerp(UDim2.new(v.Size.X.Scale,0,.15+.15*math.cos((sine+i)/16),0),getLerp(.4,dt))
end
end
end)
local songnames = {}
for i,v in metadata do
table.insert(songnames,i)
end
function transitionlyricswindow(bool)
if bool then
Tween({
Object = container,
Time = 1,
Properties = {
Position = UDim2.new(-.25,0,0,0)
},
})
Tween({
Object = surface.lyrics,
Time = 1,
Properties = {
Position = UDim2.new(.5,0,0.5,0)
},
})
else
Tween({
Object = container,
Time = 1,
Properties = {
Position = UDim2.new(0,0,0,0)
},
})
Tween({
Object = surface.lyrics,
Time = 1,
Properties = {
Position = UDim2.new(1,0,0.5,0)
},
})
end
end
do
function Tween(Data : {EaseStyle : Enum.EasingStyle, EaseDirection : Enum.EasingDirection, Object : Instance, Time : number, Properties : table})
if not Data.Object then return warn("Couldn't tween. No object?") end
if not Data.Properties then return warn("Couldn't tween. No properties?") end
local EasingStyle = Data.EaseStyle or Enum.EasingStyle.Sine
local EasingDirection = Data.EaseDirection or Enum.EasingDirection.InOut
local Time = Data.Time or 1
local T = game:GetService("TweenService"):Create(Data.Object, TweenInfo.new(Time, EasingStyle, EasingDirection), Data.Properties)
T:Play()
return T
end
for i,v in {albumart,extras.time,extras.total,unpack(controls:GetChildren())} do
local ogsize = v.Size
local textsize = nil
pcall(function()
textsize = v.TextSize
end)
listeners[v] = {
enter = function()
Tween({
Object = v,
Time = .3,
Properties = {
Size = (not textsize and UDim2.new(ogsize.X.Scale,5,ogsize.Y.Scale,5) or nil),
TextSize = (textsize and textsize+2 or nil)
}
})
end,
leave = function()
Tween({
Object = v,
Time = .2,
Properties = {
Size = (not textsize and UDim2.new(ogsize.X.Scale,0,ogsize.Y.Scale,0) or nil),
TextSize = (textsize and textsize or nil),
}
})
end,
}
end
listeners[controls.forward].click = function()
local song = math.random(1,#songnames)
playSong(songnames[song])
end
listeners[controls.back].click = function()
sounddata.data.musstart = os.clock()
setupLyrics(indexname)
end
listeners[controls.AudioOn].click = function()
sounddata.data.sync = true
end
listeners[controls.lyrics].click = function()
lyricsenabled = not lyricsenabled
if lyricsdata[indexname] then
transitionlyricswindow(lyricsenabled)
end
end
listeners[controls.PlayArrow].click = function()
remotefunction:InvokeClient(owner,"fix")
end
end
do
lyricsdata = loadstring(game:GetService"HttpService":GetAsync("https://glot.io/snippets/h9amika9co/raw"))()
local lyriclabel = surface.lyrics.dead.TextLabel:Clone()
local yscale = lyriclabel.Size.Y.Scale
local currentlyric = 0
local check = 0
local lyricDisplays = {}
local song_data = {}
local discardedWords = {
"ass";
"fuck";
"shit";
"dick";
"tits";
"tit";
"hoe";
"Bitch";
"bitch";
"thong";
"panties";
"niggas";
"nigga";
}
local function cleanLyric(lyric)
local cleanedResult = lyric
for i,v in discardedWords do
cleanedResult = string.gsub(cleanedResult,v,"_")
end
return cleanedResult
end
local prevsong
function setupLyrics(song)
local song = song or prevsong or nil
assert(song,"yep")
currentlyric = 0
check = 0
for i,v in lyricDisplays do
pcall(game.Destroy,v)
end
table.clear(lyricDisplays)
if not lyricsdata[song] then
song_data = nil
transitionlyricswindow(false)
return
else
transitionlyricswindow(lyricsenabled)
end
song_data = lyricsdata[song]
for i,v in song_data do
song_data[i].lyric = cleanLyric(song_data[i].lyric)
end
for i = 1,11 do
local ok = lyriclabel:Clone()
ok.Parent = surface.lyrics
ok.Position = UDim2.new(.5,0,0+(yscale*(i)),0)
ok.TextTransparency = .5
ok.Text = song_data[i].lyric
table.insert(lyricDisplays,ok)
end
prevsong = song
end
local function movelyrics(lyric)
if not song_data[currentlyric+(#lyricDisplays-1)] then
return
end
check+=1
if check > #lyricDisplays then
check = 1
print("Upped limit")
end
for i,v in lyricDisplays do
local goalpos = UDim2.new(.5,0,v.Position.Y.Scale-(lyriclabel.Size.Y.Scale),0)
local ok = Tween({
Object = v;
Properties = {
Position = goalpos;
TextTransparency = (check == i and 0 or .75)
};
Time = .5;
EaseStyle = Enum.EasingStyle.Back;
EaseDirection = Enum.EasingDirection.Out;
})
if math.round((goalpos.Y.Scale)*10)/10 == -math.round((lyriclabel.Size.Y.Scale)*10)/10 then
ok.Completed:Once(function()
pcall(function()
task.wait()
v.Position = UDim2.new(.5,0,(lyriclabel.Size.Y.Scale)*(#lyricDisplays-1),0)
v.Text = song_data[currentlyric+(#lyricDisplays-1)].lyric
end)
end)
end
end
end
local function convert_timestamp_to_seconds(timestamp_str)
local minutes, seconds_milliseconds = string.match(timestamp_str, "(%d+):(%d+%.%d+)")
local seconds = tonumber(minutes) * 60 + tonumber(seconds_milliseconds)
return seconds
end
game:GetService("RunService").PostSimulation:Connect(function()
if not song_data then return end
local v = song_data[currentlyric+1]
if not v then return end
if music.TimePosition + 1 >= music.TimeLength then setupLyrics() return end
local timepos = convert_timestamp_to_seconds(v.timestamp)+(musicdata.LyricDisplacement/music.PlaybackSpeed or 0)
if music.TimePosition/music.PlaybackSpeed >= timepos then
movelyrics(v.lyric)
currentlyric+=1
end
end)
end
playSong("thirty")
owner.Chatted:Connect(function(text)
if text:sub(1,4) == "/pl " then
local thing = text:sub(5)
playSong(thing)
elseif text:sub(1,5) == "/vol " then
local lol = text:sub(6)
sounddata.volume = tonumber(lol)
elseif text == "/list" then
for i,v in songnames do print(v) end
elseif text == "/lyrics" then
listeners[controls.lyrics].click()
elseif text == "/sync" then
listeners[controls.AudioOn].click()
elseif text == "/fix" then
listeners[controls.PlayArrow].click()
elseif text == "/rand" then
listeners[controls.forward].click()
elseif text == "/reset" then
listeners[controls.back].click()
end
end)