local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") if PlayerGui:FindFirstChild("BoomboxGui") then PlayerGui.BoomboxGui:Destroy() end local existingSound = LocalPlayer:WaitForChild("PlayerScripts"):FindFirstChild("BoomboxSound") if existingSound then existingSound:Stop() existingSound:Destroy() end -- Sound Setup local Sound = Instance.new("Sound") Sound.Name = "BoomboxSound" Sound.Looped = true Sound.Volume = 0.5 Sound.PlaybackSpeed = 1 Sound.Parent = LocalPlayer:WaitForChild("PlayerScripts") -- ScreenGui local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "BoomboxGui" ScreenGui.ResetOnSpawn = false ScreenGui.Parent = PlayerGui -- Main Toggle Button local ToggleBtn = Instance.new("TextButton") ToggleBtn.Name = "ToggleBtn" ToggleBtn.Size = UDim2.new(0, 120, 0, 40) ToggleBtn.Position = UDim2.new(0.05, 0, 0.4, 0) ToggleBtn.BackgroundColor3 = Color3.fromRGB(35, 35, 35) ToggleBtn.BorderSizePixel = 0 ToggleBtn.Text = "Boombox" ToggleBtn.TextColor3 = Color3.fromRGB(255, 255, 255) ToggleBtn.TextSize = 14 ToggleBtn.Font = Enum.Font.SourceSansBold ToggleBtn.Parent = ScreenGui local ToggleUICorner = Instance.new("UICorner") ToggleUICorner.CornerRadius = UDim.new(0, 8) ToggleUICorner.Parent = ToggleBtn -- Main Frame (Tăng chiều cao lên 330 để vừa thanh Speed) local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.Size = UDim2.new(0, 260, 0, 330) MainFrame.Position = UDim2.new(0.5, -130, 0.5, -165) MainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25) MainFrame.BorderSizePixel = 0 MainFrame.Visible = false MainFrame.Parent = ScreenGui local FrameUICorner = Instance.new("UICorner") FrameUICorner.CornerRadius = UDim.new(0, 10) FrameUICorner.Parent = MainFrame -- Close Button (X) local CloseBtn = Instance.new("TextButton") CloseBtn.Name = "CloseBtn" CloseBtn.Size = UDim2.new(0, 30, 0, 30) CloseBtn.Position = UDim2.new(1, -35, 0, 5) CloseBtn.BackgroundTransparency = 1 CloseBtn.Text = "X" CloseBtn.TextColor3 = Color3.fromRGB(255, 85, 85) CloseBtn.TextSize = 18 CloseBtn.Font = Enum.Font.SourceSansBold CloseBtn.Parent = MainFrame -- ID Input local IdInput = Instance.new("TextBox") IdInput.Name = "IdInput" IdInput.Size = UDim2.new(0, 200, 0, 35) IdInput.Position = UDim2.new(0.5, -100, 0.12, 0) IdInput.BackgroundColor3 = Color3.fromRGB(45, 45, 45) IdInput.BorderSizePixel = 0 IdInput.PlaceholderText = "Enter Sound ID..." IdInput.Text = "" IdInput.TextColor3 = Color3.fromRGB(255, 255, 255) IdInput.TextSize = 14 IdInput.Font = Enum.Font.SourceSans IdInput.ClearTextOnFocus = false IdInput.Parent = MainFrame local InputUICorner = Instance.new("UICorner") InputUICorner.CornerRadius = UDim.new(0, 6) InputUICorner.Parent = IdInput -- Play/Pause Button local PlayBtn = Instance.new("TextButton") PlayBtn.Name = "PlayBtn" PlayBtn.Size = UDim2.new(0, 95, 0, 35) PlayBtn.Position = UDim2.new(0.5, -100, 0.26, 0) PlayBtn.BackgroundColor3 = Color3.fromRGB(0, 170, 127) PlayBtn.BorderSizePixel = 0 PlayBtn.Text = "Play" PlayBtn.TextColor3 = Color3.fromRGB(255, 255, 255) PlayBtn.TextSize = 14 PlayBtn.Font = Enum.Font.SourceSansBold PlayBtn.Parent = MainFrame local PlayUICorner = Instance.new("UICorner") PlayUICorner.CornerRadius = UDim.new(0, 6) PlayUICorner.Parent = PlayBtn -- Stop All Button local StopBtn = Instance.new("TextButton") StopBtn.Name = "StopBtn" StopBtn.Size = UDim2.new(0, 95, 0, 35) StopBtn.Position = UDim2.new(0.5, 5, 0.26, 0) StopBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50) StopBtn.BorderSizePixel = 0 StopBtn.Text = "Stop All" StopBtn.TextColor3 = Color3.fromRGB(255, 255, 255) StopBtn.TextSize = 14 StopBtn.Font = Enum.Font.SourceSansBold StopBtn.Parent = MainFrame local StopUICorner = Instance.new("UICorner") StopUICorner.CornerRadius = UDim.new(0, 6) StopUICorner.Parent = StopBtn ---------------------------------------------------- -- VOLUME SYSTEM ---------------------------------------------------- local VolumeLabel = Instance.new("TextLabel") VolumeLabel.Name = "VolumeLabel" VolumeLabel.Size = UDim2.new(0, 200, 0, 20) VolumeLabel.Position = UDim2.new(0.5, -100, 0.42, 0) VolumeLabel.BackgroundTransparency = 1 VolumeLabel.Text = "Volume: 50%" VolumeLabel.TextColor3 = Color3.fromRGB(200, 200, 200) VolumeLabel.TextSize = 13 VolumeLabel.Font = Enum.Font.SourceSans VolumeLabel.Parent = MainFrame local SliderBack = Instance.new("Frame") SliderBack.Name = "SliderBack" SliderBack.Size = UDim2.new(0, 200, 0, 10) SliderBack.Position = UDim2.new(0.5, -100, 0.50, 0) SliderBack.BackgroundColor3 = Color3.fromRGB(45, 45, 45) SliderBack.BorderSizePixel = 0 SliderBack.Parent = MainFrame local SliderBackCorner = Instance.new("UICorner") SliderBackCorner.CornerRadius = UDim.new(0, 5) SliderBackCorner.Parent = SliderBack local SliderFill = Instance.new("Frame") SliderFill.Name = "SliderFill" SliderFill.Size = UDim2.new(0.5, 0, 1, 0) SliderFill.BackgroundColor3 = Color3.fromRGB(0, 170, 127) SliderFill.BorderSizePixel = 0 SliderFill.Parent = SliderBack local SliderFillCorner = Instance.new("UICorner") SliderFillCorner.CornerRadius = UDim.new(0, 5) SliderFillCorner.Parent = SliderFill ---------------------------------------------------- -- SPEED SNAP SYSTEM (X1, X1.5, X2, X2.5, X3) ---------------------------------------------------- local SpeedLabel = Instance.new("TextLabel") SpeedLabel.Name = "SpeedLabel" SpeedLabel.Size = UDim2.new(0, 200, 0, 20) SpeedLabel.Position = UDim2.new(0.5, -100, 0.60, 0) SpeedLabel.BackgroundTransparency = 1 SpeedLabel.Text = "Speed: x1" SpeedLabel.TextColor3 = Color3.fromRGB(200, 200, 200) SpeedLabel.TextSize = 13 SpeedLabel.Font = Enum.Font.SourceSans SpeedLabel.Parent = MainFrame local SpeedBack = Instance.new("Frame") SpeedBack.Name = "SpeedBack" SpeedBack.Size = UDim2.new(0, 200, 0, 10) SpeedBack.Position = UDim2.new(0.5, -100, 0.68, 0) SpeedBack.BackgroundColor3 = Color3.fromRGB(45, 45, 45) SpeedBack.BorderSizePixel = 0 SpeedBack.Parent = MainFrame local SpeedBackCorner = Instance.new("UICorner") SpeedBackCorner.CornerRadius = UDim.new(0, 5) SpeedBackCorner.Parent = SpeedBack local SpeedFill = Instance.new("Frame") SpeedFill.Name = "SpeedFill" SpeedFill.Size = UDim2.new(0, 0, 1, 0) SpeedFill.BackgroundColor3 = Color3.fromRGB(0, 150, 255) SpeedFill.BorderSizePixel = 0 SpeedFill.Parent = SpeedBack local SpeedFillCorner = Instance.new("UICorner") SpeedFillCorner.CornerRadius = UDim.new(0, 5) SpeedFillCorner.Parent = SpeedFill -- Danh sách các nấc Speed cố định local speedValues = {1, 1.5, 2, 2.5, 3} local speedRatios = {0, 0.25, 0.5, 0.75, 1} -- Tương ứng tỷ lệ 0%, 25%, 50%, 75%, 100% -- Tạo các vạch/khe (Tick Marks) & Text hiển thị nấc for i, ratio in ipairs(speedRatios) do local Notch = Instance.new("Frame") Notch.Name = "Notch_" .. tostring(speedValues[i]) Notch.Size = UDim2.new(0, 2, 0, 14) Notch.Position = UDim2.new(ratio, -1, 0.5, -7) Notch.BackgroundColor3 = Color3.fromRGB(180, 180, 180) Notch.BorderSizePixel = 0 Notch.ZIndex = 2 Notch.Parent = SpeedBack local NotchText = Instance.new("TextLabel") NotchText.Name = "NotchText" NotchText.Size = UDim2.new(0, 30, 0, 15) NotchText.Position = UDim2.new(ratio, -15, 1, 4) NotchText.BackgroundTransparency = 1 NotchText.Text = "x" .. tostring(speedValues[i]) NotchText.TextColor3 = Color3.fromRGB(150, 150, 150) NotchText.TextSize = 11 NotchText.Font = Enum.Font.SourceSans NotchText.Parent = SpeedBack end ---------------------------------------------------- -- LOGIC HANDLERS ---------------------------------------------------- local isPlaying = false local function stopSound() Sound:Stop() isPlaying = false PlayBtn.Text = "Play" PlayBtn.BackgroundColor3 = Color3.fromRGB(0, 170, 127) end -- Play / Pause Click PlayBtn.MouseButton1Click:Connect(function() local text = IdInput.Text local soundId = text:match("%d+") if isPlaying then Sound:Pause() isPlaying = false PlayBtn.Text = "Play" PlayBtn.BackgroundColor3 = Color3.fromRGB(0, 170, 127) else if soundId then Sound:Stop() Sound.SoundId = "rbxassetid://" .. soundId Sound.TimePosition = 0 Sound:Play() isPlaying = true PlayBtn.Text = "Pause" PlayBtn.BackgroundColor3 = Color3.fromRGB(220, 80, 80) end end end) -- Stop Button Click StopBtn.MouseButton1Click:Connect(function() stopSound() end) -- Volume Dragging local isDraggingVolume = false local function updateVolume(input) local sliderPos = SliderBack.AbsolutePosition.X local sliderWidth = SliderBack.AbsoluteSize.X local mousePos = input.Position.X local relativeX = math.clamp(mousePos - sliderPos, 0, sliderWidth) local volumeRatio = relativeX / sliderWidth SliderFill.Size = UDim2.new(volumeRatio, 0, 1, 0) Sound.Volume = volumeRatio * 2 VolumeLabel.Text = "Volume: " .. math.floor(volumeRatio * 100) .. "%" end SliderBack.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then isDraggingVolume = true updateVolume(input) end end) -- Speed Dragging & Snap Logic local isDraggingSpeed = false local function updateSpeedVisual(input) local sliderPos = SpeedBack.AbsolutePosition.X local sliderWidth = SpeedBack.AbsoluteSize.X local mousePos = input.Position.X local relativeX = math.clamp(mousePos - sliderPos, 0, sliderWidth) local currentRatio = relativeX / sliderWidth SpeedFill.Size = UDim2.new(currentRatio, 0, 1, 0) end local function applySpeedSnap(input) local sliderPos = SpeedBack.AbsolutePosition.X local sliderWidth = SpeedBack.AbsoluteSize.X local mousePos = input.Position.X local relativeX = math.clamp(mousePos - sliderPos, 0, sliderWidth) local currentRatio = relativeX / sliderWidth -- Tìm nấc gần nhất với vị trí thả tay local closestIndex = 1 local minDistance = math.abs(currentRatio - speedRatios[1]) for i = 2, #speedRatios do local dist = math.abs(currentRatio - speedRatios[i]) if dist < minDistance then minDistance = dist closestIndex = i end end -- Tự động nhảy (Snap) tới nấc đó local targetRatio = speedRatios[closestIndex] local targetSpeed = speedValues[closestIndex] SpeedFill.Size = UDim2.new(targetRatio, 0, 1, 0) Sound.PlaybackSpeed = targetSpeed SpeedLabel.Text = "Speed: x" .. tostring(targetSpeed) end SpeedBack.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then isDraggingSpeed = true updateSpeedVisual(input) end end) UserInputService.InputChanged:Connect(function(input) if isDraggingVolume and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then updateVolume(input) elseif isDraggingSpeed and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then updateSpeedVisual(input) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then if isDraggingVolume then isDraggingVolume = false end if isDraggingSpeed then isDraggingSpeed = false applySpeedSnap(input) -- Khi thả tay ra sẽ kích hoạt tự dính nấc end end end) -- Close Button CloseBtn.MouseButton1Click:Connect(function() MainFrame.Visible = false end) -- Hold to Drag & Click to Toggle local pressStartTime = 0 local isHolding = false local dragging = false local dragStart = nil local startPos = nil ToggleBtn.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then pressStartTime = tick() isHolding = true dragStart = input.Position startPos = ToggleBtn.Position task.spawn(function() task.wait(4.5) if isHolding then dragging = true ToggleBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 255) end end) end end) UserInputService.InputChanged:Connect(function(input) if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then local delta = input.Position - dragStart ToggleBtn.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end end) ToggleBtn.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then local holdDuration = tick() - pressStartTime isHolding = false if dragging then dragging = false ToggleBtn.BackgroundColor3 = Color3.fromRGB(35, 35, 35) else if holdDuration < 4.5 then MainFrame.Visible = not MainFrame.Visible end end end end)