Universal Script | Boombox Music Hub
Key RequiredUniversal

Universal Script | Boombox Music Hub

Universal ScriptN00XCN00XC 502 views 3.3K executesUpdated Oct 5, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•915 lines (29111 chars)
--[[
    Hey users! If you are reading this checking if this is bait this isn't why would it be reviewed also if you are reading this because your bored keep reading it.

Hey reviewers! If you are reading this trying to verify the script could you tell me what u should improve in the comments and maybe a compliment! :D
]]



local Players     = game:GetService("Players")
local UIS         = game:GetService("UserInputService")
local SoundService = game:GetService("SoundService")
local Tween       = game:GetService("TweenService")

local LP = Players.LocalPlayer
local PG = LP:WaitForChild("PlayerGui")

local Theme = {
    Accent   = Color3.fromRGB(96, 165, 250),
    Accent2  = Color3.fromRGB(147, 51, 234),
    BgTop    = Color3.fromRGB(22, 22, 32),
    BgBottom = Color3.fromRGB(14, 14, 22),
    Header   = Color3.fromRGB(28, 28, 40),
    Sidebar  = Color3.fromRGB(18, 18, 28),
    Card     = Color3.fromRGB(32, 32, 46),
    Text     = Color3.fromRGB(238, 238, 248),
    Dim      = Color3.fromRGB(148, 148, 168),
    Btn      = Color3.fromRGB(38, 38, 54),
    BtnHi    = Color3.fromRGB(52, 52, 72),
    Success  = Color3.fromRGB(52, 211, 153),
    Danger   = Color3.fromRGB(248, 113, 113),
    Warn     = Color3.fromRGB(251, 191, 36),
}

local BG_TRANSPARENCY = 0.15

local state = {
    sound        = nil,
    soundId      = "",
    playing      = false,
    pitch        = 1,
    speed        = 1,
    volume       = 0.5,
    looped       = false,
}

local connections = {}
local function track(c) table.insert(connections, c) return c end

local function tween(obj, props, dur)
    Tween:Create(obj, TweenInfo.new(dur or 0.16, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), props):Play()
end

local function addHover(btn, base, hover)
    btn.MouseEnter:Connect(function() tween(btn, {BackgroundColor3 = hover}) end)
    btn.MouseLeave:Connect(function() tween(btn, {BackgroundColor3 = base}) end)
end

local gui = Instance.new("ScreenGui")
gui.Name = "BoomboxMusic"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.Parent = PG

local panel = Instance.new("Frame")
panel.Name = "Panel"
panel.Size = UDim2.fromOffset(620, 460)
panel.Position = UDim2.new(0, 40, 0, 80)
panel.BackgroundColor3 = Color3.new(1, 1, 1)
panel.BackgroundTransparency = BG_TRANSPARENCY
panel.BorderSizePixel = 0
panel.Active = true
panel.Parent = gui
Instance.new("UICorner", panel).CornerRadius = UDim.new(0, 14)

local panelGrad = Instance.new("UIGradient")
panelGrad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Theme.BgTop),
    ColorSequenceKeypoint.new(1, Theme.BgBottom),
})
panelGrad.Rotation = 135
panelGrad.Parent = panel

local panelStroke = Instance.new("UIStroke", panel)
panelStroke.Color = Theme.Accent
panelStroke.Thickness = 1.5
panelStroke.Transparency = 0.55

local HEADER_H = 46
local header = Instance.new("Frame")
header.Name = "Header"
header.Size = UDim2.new(1, 0, 0, HEADER_H)
header.BackgroundColor3 = Theme.Header
header.BackgroundTransparency = 0.05
header.BorderSizePixel = 0
header.ZIndex = 2
header.Parent = panel
Instance.new("UICorner", header).CornerRadius = UDim.new(0, 14)

local headerBottomFix = Instance.new("Frame")
headerBottomFix.Size = UDim2.new(1, 0, 0, 16)
headerBottomFix.Position = UDim2.new(0, 0, 1, -16)
headerBottomFix.BackgroundColor3 = Theme.Header
headerBottomFix.BackgroundTransparency = 0.05
headerBottomFix.BorderSizePixel = 0
headerBottomFix.ZIndex = 3
headerBottomFix.Parent = header

local accentLine = Instance.new("Frame")
accentLine.Size = UDim2.new(1, -24, 0, 2)
accentLine.Position = UDim2.new(0, 12, 0, 0)
accentLine.BackgroundColor3 = Theme.Accent
accentLine.BorderSizePixel = 0
accentLine.ZIndex = 5
accentLine.Parent = header
Instance.new("UICorner", accentLine).CornerRadius = UDim.new(1, 0)

local dragHandle = Instance.new("TextButton")
dragHandle.Size = UDim2.new(1, -110, 1, 0)
dragHandle.BackgroundTransparency = 1
dragHandle.Text = ""
dragHandle.AutoButtonColor = false
dragHandle.ZIndex = 4
dragHandle.Parent = header

local titleLbl = Instance.new("TextLabel")
titleLbl.Size = UDim2.new(1, -110, 1, 0)
titleLbl.Position = UDim2.fromOffset(20, 0)
titleLbl.BackgroundTransparency = 1
titleLbl.Font = Enum.Font.GothamBold
titleLbl.TextSize = 15
titleLbl.TextXAlignment = Enum.TextXAlignment.Left
titleLbl.TextColor3 = Theme.Text
titleLbl.Text = "♫  BOOMBOX MUSIC"
titleLbl.ZIndex = 5
titleLbl.Parent = header

local tagLbl = Instance.new("TextLabel")
tagLbl.Size = UDim2.new(1, -110, 0, 12)
tagLbl.Position = UDim2.new(0, 20, 0, 28)
tagLbl.BackgroundTransparency = 1
tagLbl.Font = Enum.Font.Gotham
tagLbl.TextSize = 10
tagLbl.TextXAlignment = Enum.TextXAlignment.Left
tagLbl.TextColor3 = Theme.Dim
tagLbl.Text = "by N00XC"
tagLbl.ZIndex = 5
tagLbl.Parent = header

local function makeWinBtn(txt, xoff, col)
    local b = Instance.new("TextButton")
    b.Size = UDim2.fromOffset(30, 26)
    b.Position = UDim2.new(1, xoff, 0, 10)
    b.BackgroundColor3 = col or Theme.Btn
    b.BorderSizePixel = 0
    b.Font = Enum.Font.GothamBold
    b.TextSize = 13
    b.TextColor3 = Theme.Text
    b.Text = txt
    b.AutoButtonColor = false
    b.ZIndex = 6
    b.Parent = header
    Instance.new("UICorner", b).CornerRadius = UDim.new(0, 6)
    addHover(b, col or Theme.Btn, col and Color3.fromRGB(220, 90, 90) or Theme.BtnHi)
    return b
end
local minBtn   = makeWinBtn("–", -74)
local closeBtn = makeWinBtn("✕", -40, Theme.Danger)

local SIDEBAR_W = 152
local sidebar = Instance.new("Frame")
sidebar.Name = "Sidebar"
sidebar.Size = UDim2.new(0, SIDEBAR_W, 1, -(HEADER_H + 26))
sidebar.Position = UDim2.new(0, 0, 0, HEADER_H)
sidebar.BackgroundColor3 = Theme.Sidebar
sidebar.BackgroundTransparency = 0.15
sidebar.BorderSizePixel = 0
sidebar.Parent = panel

local sideScroll = Instance.new("ScrollingFrame")
sideScroll.Size = UDim2.fromScale(1, 1)
sideScroll.BackgroundTransparency = 1
sideScroll.BorderSizePixel = 0
sideScroll.ScrollBarThickness = 3
sideScroll.ScrollBarImageColor3 = Theme.Accent
sideScroll.ScrollBarImageTransparency = 0.7
sideScroll.CanvasSize = UDim2.new()
sideScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
sideScroll.Parent = sidebar
local sideLayout = Instance.new("UIListLayout")
sideLayout.Padding = UDim.new(0, 4)
sideLayout.SortOrder = Enum.SortOrder.LayoutOrder
sideLayout.Parent = sideScroll
local sidePad = Instance.new("UIPadding")
sidePad.PaddingTop = UDim.new(0, 10)
sidePad.PaddingBottom = UDim.new(0, 10)
sidePad.PaddingLeft = UDim.new(0, 8)
sidePad.PaddingRight = UDim.new(0, 8)
sidePad.Parent = sideScroll

local content = Instance.new("Frame")
content.Name = "Content"
content.Size = UDim2.new(1, -SIDEBAR_W, 1, -(HEADER_H + 26))
content.Position = UDim2.new(0, SIDEBAR_W, 0, HEADER_H)
content.BackgroundTransparency = 1
content.Parent = panel

local FOOTER_H = 26
local footer = Instance.new("Frame")
footer.Size = UDim2.new(1, 0, 0, FOOTER_H)
footer.Position = UDim2.new(0, 0, 1, -FOOTER_H)
footer.BackgroundColor3 = Theme.Header
footer.BackgroundTransparency = 0.1
footer.BorderSizePixel = 0
footer.ZIndex = 2
footer.Parent = panel
Instance.new("UICorner", footer).CornerRadius = UDim.new(0, 14)

local footerTopFix = Instance.new("Frame")
footerTopFix.Size = UDim2.new(1, 0, 0, 16)
footerTopFix.Position = UDim2.new(0, 0, 0, 0)
footerTopFix.BackgroundColor3 = Theme.Header
footerTopFix.BackgroundTransparency = 0.1
footerTopFix.BorderSizePixel = 0
footerTopFix.ZIndex = 3
footerTopFix.Parent = footer

local statusLbl = Instance.new("TextLabel")
statusLbl.Size = UDim2.new(0.5, -24, 1, 0)
statusLbl.Position = UDim2.fromOffset(16, 0)
statusLbl.BackgroundTransparency = 1
statusLbl.Font = Enum.Font.Gotham
statusLbl.TextSize = 11
statusLbl.TextXAlignment = Enum.TextXAlignment.Left
statusLbl.TextColor3 = Theme.Dim
statusLbl.Text = "Ready."
statusLbl.ZIndex = 4
statusLbl.Parent = footer

local creditLbl = Instance.new("TextLabel")
creditLbl.Size = UDim2.new(0.5, -16, 1, 0)
creditLbl.Position = UDim2.new(0.5, 0, 0, 0)
creditLbl.BackgroundTransparency = 1
creditLbl.Font = Enum.Font.Gotham
creditLbl.TextSize = 11
creditLbl.TextXAlignment = Enum.TextXAlignment.Right
creditLbl.TextColor3 = Theme.Dim
creditLbl.Text = "Made by N00XC, ScriptBlox and Roblox"
creditLbl.ZIndex = 4
creditLbl.Parent = footer

local statusToken = 0
local function setStatus(txt)
    statusToken += 1
    local my = statusToken
    statusLbl.Text = txt
    task.delay(3, function()
        if statusToken == my then statusLbl.Text = "Ready." end
    end)
end

local activeDrag = nil

track(UIS.InputChanged:Connect(function(input)
    if not activeDrag then return end
    if input.UserInputType == Enum.UserInputType.MouseMovement
    or input.UserInputType == Enum.UserInputType.Touch then
        activeDrag(input)
    end
end))

track(UIS.InputEnded:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1
    or input.UserInputType == Enum.UserInputType.Touch then
        activeDrag = nil
    end
end))

local function makePage(parent)
    local sf = Instance.new("ScrollingFrame")
    sf.Size = UDim2.fromScale(1, 1)
    sf.BackgroundTransparency = 1
    sf.BorderSizePixel = 0
    sf.ScrollBarThickness = 5
    sf.ScrollBarImageColor3 = Theme.Accent
    sf.ScrollBarImageTransparency = 0.5
    sf.CanvasSize = UDim2.new()
    sf.AutomaticCanvasSize = Enum.AutomaticSize.Y
    sf.Visible = false
    sf.Parent = parent
    local layout = Instance.new("UIListLayout")
    layout.Padding = UDim.new(0, 6)
    layout.SortOrder = Enum.SortOrder.LayoutOrder
    layout.Parent = sf
    local pad = Instance.new("UIPadding")
    pad.PaddingTop = UDim.new(0, 12)
    pad.PaddingBottom = UDim.new(0, 16)
    pad.PaddingLeft = UDim.new(0, 14)
    pad.PaddingRight = UDim.new(0, 14)
    pad.Parent = sf
    return sf
end

local function makeSection(parent, text)
    local holder = Instance.new("Frame")
    holder.Size = UDim2.new(1, 0, 0, 26)
    holder.BackgroundTransparency = 1
    holder.Parent = parent

    local bar = Instance.new("Frame")
    bar.Size = UDim2.fromOffset(3, 14)
    bar.Position = UDim2.new(0, 0, 0.5, -7)
    bar.BackgroundColor3 = Theme.Accent
    bar.BorderSizePixel = 0
    bar.Parent = holder
    Instance.new("UICorner", bar).CornerRadius = UDim.new(1, 0)

    local l = Instance.new("TextLabel")
    l.Size = UDim2.new(1, -14, 1, 0)
    l.Position = UDim2.fromOffset(14, 0)
    l.BackgroundTransparency = 1
    l.Font = Enum.Font.GothamBold
    l.TextSize = 11
    l.TextColor3 = Theme.Text
    l.TextXAlignment = Enum.TextXAlignment.Left
    l.Text = string.upper(text)
    l.Parent = holder
    return holder
end

local function makeCard(parent, height)
    local row = Instance.new("Frame")
    row.Size = UDim2.new(1, 0, 0, height or 56)
    row.BackgroundColor3 = Theme.Card
    row.BackgroundTransparency = 0.35
    row.BorderSizePixel = 0
    row.Parent = parent
    Instance.new("UICorner", row).CornerRadius = UDim.new(0, 10)
    local s = Instance.new("UIStroke", row)
    s.Color = Color3.fromRGB(80, 80, 110)
    s.Thickness = 1
    s.Transparency = 0.75
    return row
end

local function makeSlider(parent, labelText, min, max, default, callback)
    local row = makeCard(parent, 58)

    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(1, -100, 0, 18)
    lbl.Position = UDim2.fromOffset(14, 7)
    lbl.BackgroundTransparency = 1
    lbl.Font = Enum.Font.Gotham
    lbl.TextSize = 12
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.TextColor3 = Theme.Text
    lbl.Text = labelText
    lbl.Parent = row

    local box = Instance.new("TextBox")
    box.Size = UDim2.fromOffset(78, 22)
    box.Position = UDim2.new(1, -88, 0, 6)
    box.BackgroundColor3 = Theme.Btn
    box.BorderSizePixel = 0
    box.Font = Enum.Font.GothamBold
    box.TextSize = 12
    box.TextColor3 = Theme.Accent
    box.Text = tostring(default)
    box.ClearTextOnFocus = false
    box.Parent = row
    Instance.new("UICorner", box).CornerRadius = UDim.new(0, 6)

    local track_ = Instance.new("Frame")
    track_.Size = UDim2.new(1, -28, 0, 10)
    track_.Position = UDim2.new(0, 14, 1, -18)
    track_.BackgroundColor3 = Theme.Btn
    track_.BorderSizePixel = 0
    track_.Parent = row
    Instance.new("UICorner", track_).CornerRadius = UDim.new(1, 0)

    local fill = Instance.new("Frame")
    fill.Size = UDim2.new(0, 0, 1, 0)
    fill.BackgroundColor3 = Theme.Accent
    fill.BorderSizePixel = 0
    fill.Parent = track_
    Instance.new("UICorner", fill).CornerRadius = UDim.new(1, 0)

    local fillGrad = Instance.new("UIGradient")
    fillGrad.Color = ColorSequence.new(Theme.Accent, Theme.Accent2)
    fillGrad.Parent = fill

    local knob = Instance.new("Frame")
    knob.Size = UDim2.fromOffset(18, 18)
    knob.AnchorPoint = Vector2.new(0.5, 0.5)
    knob.Position = UDim2.new(0, 0, 0.5, 0)
    knob.BackgroundColor3 = Color3.new(1, 1, 1)
    knob.BorderSizePixel = 0
    knob.ZIndex = 2
    knob.Parent = track_
    Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0)

    local hit = Instance.new("TextButton")
    hit.Size = UDim2.new(1, 0, 1, 24)
    hit.Position = UDim2.new(0, 0, 0.5, -17)
    hit.BackgroundTransparency = 1
    hit.Text = ""
    hit.ZIndex = 3
    hit.Parent = track_

    local current = default

    local function set(v, updateBox)
        v = tonumber(v)
        if not v then v = current end
        v = math.clamp(v, min, max)
        current = v
        local t = (max == min) and 0 or (v - min) / (max - min)
        fill.Size = UDim2.new(t, 0, 1, 0)
        knob.Position = UDim2.new(t, 0, 0.5, 0)
        if updateBox ~= false then box.Text = string.format("%.2f", v) end
        local ok, err = pcall(callback, v)
        if not ok then warn("[Boombox] slider callback:", err) end
    end

    hit.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1
        or input.UserInputType == Enum.UserInputType.Touch then
            local function update(i)
                local rel = (i.Position.X - track_.AbsolutePosition.X) / math.max(1, track_.AbsoluteSize.X)
                rel = math.clamp(rel, 0, 1)
                set(min + rel * (max - min), true)
            end
            activeDrag = update
            update(input)
        end
    end)

    box.FocusLost:Connect(function(enter)
        if enter then set(box.Text, true) end
    end)

    set(default, true)
    return { set = set, get = function() return current end, frame = row }
end

local function makeToggle(parent, labelText, default, callback)
    local row = makeCard(parent, 44)

    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(1, -90, 1, 0)
    lbl.Position = UDim2.fromOffset(14, 0)
    lbl.BackgroundTransparency = 1
    lbl.Font = Enum.Font.Gotham
    lbl.TextSize = 12
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.TextColor3 = Theme.Text
    lbl.Text = labelText
    lbl.Parent = row

    local isOn = default

    local pill = Instance.new("Frame")
    pill.Size = UDim2.fromOffset(50, 26)
    pill.Position = UDim2.new(1, -64, 0.5, -13)
    pill.BackgroundColor3 = isOn and Theme.Success or Theme.Btn
    pill.BorderSizePixel = 0
    pill.Parent = row
    Instance.new("UICorner", pill).CornerRadius = UDim.new(1, 0)

    local knob = Instance.new("Frame")
    knob.Size = UDim2.fromOffset(20, 20)
    knob.AnchorPoint = Vector2.new(0, 0.5)
    knob.Position = isOn and UDim2.new(1, -23, 0.5, 0) or UDim2.new(0, 3, 0.5, 0)
    knob.BackgroundColor3 = Color3.new(1, 1, 1)
    knob.BorderSizePixel = 0
    knob.Parent = pill
    Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0)

    local clickable = Instance.new("TextButton")
    clickable.Size = UDim2.new(1, 0, 1, 0)
    clickable.BackgroundTransparency = 1
    clickable.Text = ""
    clickable.Parent = row

    local function set(v)
        isOn = v
        tween(pill, {BackgroundColor3 = isOn and Theme.Success or Theme.Btn}, 0.2)
        if isOn then
            tween(knob, {Position = UDim2.new(1, -23, 0.5, 0)}, 0.2)
        else
            tween(knob, {Position = UDim2.new(0, 3, 0.5, 0)}, 0.2)
        end
        local ok, err = pcall(callback, v)
        if not ok then warn("[Boombox] toggle callback:", err) end
    end
    clickable.MouseButton1Click:Connect(function() set(not isOn) end)

    return { set = set, get = function() return isOn end }
end

local function makeButton(parent, labelText, callback, color)
    local b = Instance.new("TextButton")
    b.Size = UDim2.new(1, 0, 0, 36)
    b.BackgroundColor3 = color or Theme.Btn
    b.BorderSizePixel = 0
    b.Font = Enum.Font.GothamBold
    b.TextSize = 12
    b.TextColor3 = Theme.Text
    b.Text = labelText
    b.AutoButtonColor = false
    b.Parent = parent
    Instance.new("UICorner", b).CornerRadius = UDim.new(0, 10)
    local base = color or Theme.Btn
    local hover = base:Lerp(Color3.new(1, 1, 1), 0.15)
    addHover(b, base, hover)
    b.MouseButton1Click:Connect(function()
        local ok, err = pcall(callback)
        if not ok then
            warn("[Boombox] button error:", err)
            setStatus("Error: " .. tostring(err))
        end
    end)
    return b
end

local function makeInput(parent, placeholder, defaultText, callback)
    local box = Instance.new("TextBox")
    box.Size = UDim2.new(1, 0, 0, 34)
    box.BackgroundColor3 = Theme.Card
    box.BackgroundTransparency = 0.35
    box.BorderSizePixel = 0
    box.Font = Enum.Font.Gotham
    box.TextSize = 12
    box.TextColor3 = Theme.Text
    box.PlaceholderText = placeholder
    box.PlaceholderColor3 = Theme.Dim
    box.Text = defaultText or ""
    box.ClearTextOnFocus = false
    box.Parent = parent
    Instance.new("UICorner", box).CornerRadius = UDim.new(0, 10)
    local s = Instance.new("UIStroke", box)
    s.Color = Color3.fromRGB(80, 80, 110)
    s.Thickness = 1
    s.Transparency = 0.7
    box.FocusLost:Connect(function(enter)
        if enter then
            local ok, err = pcall(callback, box.Text)
            if not ok then warn("[Boombox] input error:", err) end
        end
    end)
    return box
end

local function makeRowButtons(parent, specs)
    local row = Instance.new("Frame")
    row.Size = UDim2.new(1, 0, 0, 34)
    row.BackgroundTransparency = 1
    row.Parent = parent
    local n = #specs
    local gap = 6
    for i, s in ipairs(specs) do
        local b = Instance.new("TextButton")
        b.Size = UDim2.new(1 / n, -(gap * (n - 1)) / n, 1, 0)
        b.Position = UDim2.new((i - 1) / n, ((i - 1) * gap) / n, 0, 0)
        b.BackgroundColor3 = s.color or Theme.Btn
        b.BorderSizePixel = 0
        b.Font = Enum.Font.GothamBold
        b.TextSize = 12
        b.TextColor3 = Theme.Text
        b.Text = s.text
        b.AutoButtonColor = false
        b.Parent = row
        Instance.new("UICorner", b).CornerRadius = UDim.new(0, 10)
        local base = s.color or Theme.Btn
        addHover(b, base, base:Lerp(Color3.new(1, 1, 1), 0.15))
        b.MouseButton1Click:Connect(function()
            local ok, err = pcall(s.callback)
            if not ok then warn("[Boombox] btn err:", err) end
        end)
    end
    return row
end

local function normalizeId(raw)
    raw = (raw or ""):gsub("%s+", "")
    if raw == "" then return nil end
    if tonumber(raw) then
        return "rbxassetid://" .. raw
    end
    if raw:match("^rbxassetid://") then return raw end
    if raw:match("^https?://") then
        local id = raw:match("(%d+)")
        if id then return "rbxassetid://" .. id end
    end
    return raw
end

local function ensureSound()
    if state.sound and state.sound.Parent then return state.sound end
    local s = Instance.new("Sound")
    s.Name = "BoomboxSound"
    s.Looped = state.looped
    s.Volume = state.volume
    s.PlaybackSpeed = state.speed
    s.Pitch = state.pitch
    s.Parent = SoundService
    state.sound = s
    return s
end

local function stopSound()
    if state.sound then
        state.sound:Stop()
        state.sound:Destroy()
        state.sound = nil
    end
    state.playing = false
end

local function playSound()
    if state.soundId == "" then
        setStatus("Enter a music id first.")
        return
    end
    stopSound()
    local s = ensureSound()
    s.SoundId = state.soundId
    s.Volume = state.volume
    s.PlaybackSpeed = state.speed
    s.Pitch = state.pitch
    s.Looped = state.looped
    local ok, err = pcall(function() s:Play() end)
    if not ok then
        setStatus("Playback failed.")
        return
    end
    state.playing = true
    setStatus("Playing.")
end

local function pauseSound()
    if state.sound and state.playing then
        state.sound:Pause()
        state.playing = false
        setStatus("Paused.")
    end
end

local function resumeSound()
    if state.sound and not state.playing then
        state.sound:Resume()
        state.playing = true
        setStatus("Resumed.")
    end
end

local tabs = {}

local function registerTab(name, icon, buildFn)
    local btn = Instance.new("TextButton")
    btn.Size = UDim2.new(1, 0, 0, 38)
    btn.LayoutOrder = #tabs + 1
    btn.BackgroundColor3 = Theme.Btn
    btn.BackgroundTransparency = 0.55
    btn.BorderSizePixel = 0
    btn.Font = Enum.Font.GothamBold
    btn.TextSize = 12
    btn.TextColor3 = Theme.Text
    btn.Text = "   " .. icon .. "   " .. name
    btn.TextXAlignment = Enum.TextXAlignment.Left
    btn.AutoButtonColor = false
    btn.Parent = sideScroll
    Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8)

    local page = makePage(content)
    buildFn(page)

    local entry = { name = name, btn = btn, page = page }
    tabs[#tabs + 1] = entry

    btn.MouseEnter:Connect(function()
        if entry.page.Visible then return end
        tween(btn, {BackgroundColor3 = Theme.BtnHi})
    end)
    btn.MouseLeave:Connect(function()
        if entry.page.Visible then return end
        tween(btn, {BackgroundColor3 = Theme.Btn})
    end)

    btn.MouseButton1Click:Connect(function()
        for _, t in ipairs(tabs) do
            local sel = (t == entry)
            t.page.Visible = sel
            tween(t.btn, {
                BackgroundColor3 = sel and Theme.Accent or Theme.Btn,
                BackgroundTransparency = sel and 0.15 or 0.55,
            }, 0.18)
            t.btn.TextColor3 = sel and Color3.new(1, 1, 1) or Theme.Text
        end
    end)

    return entry
end

registerTab("Playback", "▶", function(page)
    makeSection(page, "Music ID")
    local idBox = makeInput(page, "e.g. 1837879082", "", function(text)
        local id = normalizeId(text)
        if id then
            state.soundId = id
            setStatus("Loaded id: " .. id)
        end
    end)

    makeSection(page, "Controls")
    makeRowButtons(page, {
        { text = "▶  Play",  color = Theme.Success,
          callback = function()
              local id = normalizeId(idBox.Text)
              if id then state.soundId = id end
              playSound()
          end },
        { text = "⏸  Pause", color = Theme.Warn,
          callback = pauseSound },
        { text = "⏹  Stop",  color = Theme.Danger,
          callback = function() stopSound() setStatus("Stopped.") end },
    })

    makeRowButtons(page, {
        { text = "▶  Resume", color = Theme.Accent,
          callback = resumeSound },
        { text = "🔁  Restart", color = Theme.Btn,
          callback = function() playSound() end },
    })

    makeSection(page, "Options")
    makeToggle(page, "Loop Music", false, function(on)
        state.looped = on
        if state.sound then state.sound.Looped = on end
    end)
end)

registerTab("Pitch & Speed", "🎚", function(page)
    makeSection(page, "Pitch")
    makeSlider(page, "Pitch", 0.1, 4, 1, function(v)
        state.pitch = v
        if state.sound then state.sound.Pitch = v end
    end)

    makeSection(page, "Speed")
    makeSlider(page, "Playback Speed", 0.1, 4, 1, function(v)
        state.speed = v
        if state.sound then state.sound.PlaybackSpeed = v end
    end)

    makeSection(page, "Presets")
    makeRowButtons(page, {
        { text = "0.5x",  color = Theme.Btn,
          callback = function()
              state.pitch = 0.5 state.speed = 0.5
              if state.sound then
                  state.sound.Pitch = 0.5
                  state.sound.PlaybackSpeed = 0.5
              end
          end },
        { text = "1x",    color = Theme.Success,
          callback = function()
              state.pitch = 1 state.speed = 1
              if state.sound then
                  state.sound.Pitch = 1
                  state.sound.PlaybackSpeed = 1
              end
          end },
        { text = "1.5x",  color = Theme.Warn,
          callback = function()
              state.pitch = 1.5 state.speed = 1.5
              if state.sound then
                  state.sound.Pitch = 1.5
                  state.sound.PlaybackSpeed = 1.5
              end
          end },
        { text = "2x",    color = Theme.Accent,
          callback = function()
              state.pitch = 2 state.speed = 2
              if state.sound then
                  state.sound.Pitch = 2
                  state.sound.PlaybackSpeed = 2
              end
          end },
    })
end)

registerTab("Volume", "🔊", function(page)
    makeSection(page, "Volume")
    makeSlider(page, "Volume", 0, 5, 0.5, function(v)
        state.volume = v
        if state.sound then state.sound.Volume = v end
    end)

    makeSection(page, "Quick Set")
    makeRowButtons(page, {
        { text = "Mute",  color = Theme.Danger,
          callback = function()
              state.volume = 0
              if state.sound then state.sound.Volume = 0 end
          end },
        { text = "Low",   color = Theme.Btn,
          callback = function()
              state.volume = 0.25
              if state.sound then state.sound.Volume = 0.25 end
          end },
        { text = "Med",   color = Theme.Warn,
          callback = function()
              state.volume = 0.5
              if state.sound then state.sound.Volume = 0.5 end
          end },
        { text = "Max",   color = Theme.Success,
          callback = function()
              state.volume = 2
              if state.sound then state.sound.Volume = 2 end
          end },
    })
end)

registerTab("Acknowledgments", "★", function(page)
    makeSection(page, "Credits")
    local card = makeCard(page, 170)
    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(1, -24, 1, -24)
    lbl.Position = UDim2.new(0, 12, 0, 12)
    lbl.BackgroundTransparency = 1
    lbl.Font = Enum.Font.Gotham
    lbl.TextSize = 13
    lbl.TextWrapped = true
    lbl.TextXAlignment = Enum.TextXAlignment.Center
    lbl.TextYAlignment = Enum.TextYAlignment.Center
    lbl.TextColor3 = Theme.Text
    lbl.Text = "Made by N00XC, ScriptBlox and Roblox.\n\nRemember to follow in both."
    lbl.Parent = card
end)

if tabs[1] then
    tabs[1].page.Visible = true
    tabs[1].btn.BackgroundColor3 = Theme.Accent
    tabs[1].btn.BackgroundTransparency = 0.15
    tabs[1].btn.TextColor3 = Color3.new(1, 1, 1)
end

local dragging = false
local dragStart, startPos

dragHandle.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1
    or input.UserInputType == Enum.UserInputType.Touch then
        dragging = true
        dragStart = input.Position
        startPos = panel.Position
    end
end)

track(UIS.InputChanged:Connect(function(input)
    if not dragging then return end
    if input.UserInputType == Enum.UserInputType.MouseMovement
    or input.UserInputType == Enum.UserInputType.Touch then
        local delta = input.Position - dragStart
        panel.Position = UDim2.new(
            startPos.X.Scale, startPos.X.Offset + delta.X,
            startPos.Y.Scale, startPos.Y.Offset + delta.Y
        )
    end
end))

track(UIS.InputEnded:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1
    or input.UserInputType == Enum.UserInputType.Touch then
        dragging = false
    end
end))

local minimized = false
local expandedSize = panel.Size
minBtn.MouseButton1Click:Connect(function()
    minimized = not minimized
    if minimized then
        expandedSize = panel.Size
        sidebar.Visible = false
        content.Visible = false
        footer.Visible = false
        panel.Size = UDim2.fromOffset(panel.AbsoluteSize.X, HEADER_H)
        minBtn.Text = "+"
    else
        sidebar.Visible = true
        content.Visible = true
        footer.Visible = true
        panel.Size = expandedSize
        minBtn.Text = "–"
    end
end)

closeBtn.MouseButton1Click:Connect(function()
    stopSound()
    for _, c in ipairs(connections) do pcall(function() c:Disconnect() end) end
    gui:Destroy()
    print("[BoomboxMusic] Closed.  Made by N00XC, ScriptBlox and Roblox")
end)

track(UIS.InputBegan:Connect(function(i, gp)
    if gp then return end
    if i.KeyCode == Enum.KeyCode.RightShift then
        gui.Enabled = not gui.Enabled
    end
end))

setStatus("Boombox ready.")
print("[BoomboxMusic] Ready.  Made by N00XC, ScriptBlox and Roblox")

Features & Information

This script lets you to add music in every game possible in Roblox! I don’t know if this is a hub or a universal script but I need to list the features or else my engagement will go down so anyway you can set the volume and the pitch just put the music id you can also speed it up or slow it down PLEASE DONT COPY I BEG YOU PLEASE PLEASE MY LIFE WILL BE RUINED IF YOU DOOOOOOO
#Universal#Music

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts