-- // Mobile-Friendly Boombox Audio Logger \\ -- local Players = game:GetService("Players") local Workspace = game:GetService("Workspace") local MarketplaceService = game:GetService("MarketplaceService") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local logs = {} local seen = {} local autoScan = true local creators = {} -- Device Detection (Mobile Only Toggle) local isMobile = UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled -- // Color Themes \\ -- local themes = { Dark = { MainBG = Color3.fromRGB(20, 20, 20), Border = Color3.fromRGB(50, 50, 50), Text = Color3.fromRGB(255, 255, 255), SubText = Color3.fromRGB(200, 200, 200), BoxBG = Color3.fromRGB(15, 15, 15), BtnBG = Color3.fromRGB(35, 35, 35), RowBG = Color3.fromRGB(25, 25, 25), Accent = Color3.fromRGB(80, 80, 80) }, Midnight = { MainBG = Color3.fromRGB(16, 20, 28), Border = Color3.fromRGB(35, 45, 65), Text = Color3.fromRGB(230, 235, 245), SubText = Color3.fromRGB(160, 175, 200), BoxBG = Color3.fromRGB(12, 15, 22), BtnBG = Color3.fromRGB(25, 32, 45), RowBG = Color3.fromRGB(20, 26, 38), Accent = Color3.fromRGB(50, 100, 180) }, Matrix = { MainBG = Color3.fromRGB(14, 18, 14), Border = Color3.fromRGB(35, 55, 35), Text = Color3.fromRGB(220, 245, 220), SubText = Color3.fromRGB(150, 190, 150), BoxBG = Color3.fromRGB(10, 14, 10), BtnBG = Color3.fromRGB(22, 32, 22), RowBG = Color3.fromRGB(18, 25, 18), Accent = Color3.fromRGB(40, 140, 40) } } local currentThemeName = "Dark" local currentTheme = themes[currentThemeName] -- // UI Setup \\ -- local sg = Instance.new("ScreenGui") sg.Name = "AudioLoggerMobile" sg.ResetOnSpawn = false sg.Parent = LocalPlayer:WaitForChild("PlayerGui") -- Blocky Open/Close Button (Mobile Only) local toggleUIBtn = Instance.new("TextButton") toggleUIBtn.Size = UDim2.new(0, 110, 0, 32) toggleUIBtn.Position = UDim2.new(0, 10, 0.3, 0) toggleUIBtn.BackgroundColor3 = currentTheme.MainBG toggleUIBtn.BorderColor3 = currentTheme.Border toggleUIBtn.BorderSizePixel = 1 toggleUIBtn.Text = "Close Logging" toggleUIBtn.TextColor3 = currentTheme.Text toggleUIBtn.TextSize = 12 toggleUIBtn.Font = Enum.Font.SourceSansBold toggleUIBtn.Active = true toggleUIBtn.Draggable = true toggleUIBtn.Visible = isMobile toggleUIBtn.Parent = sg -- Main Frame local main = Instance.new("Frame") main.Size = UDim2.new(0.85, 0, 0.7, 0) main.Position = UDim2.new(0.5, 0, 0.5, 0) main.AnchorPoint = Vector2.new(0.5, 0.5) main.BackgroundColor3 = currentTheme.MainBG main.BorderColor3 = currentTheme.Border main.BorderSizePixel = 1 main.Active = true main.Draggable = true main.Visible = true main.Parent = sg local mainSizeConstraint = Instance.new("UISizeConstraint") mainSizeConstraint.MinSize = Vector2.new(280, 300) mainSizeConstraint.MaxSize = Vector2.new(420, 500) mainSizeConstraint.Parent = main -- Top Bar Title local title = Instance.new("TextLabel") title.Size = UDim2.new(1, -110, 0, 32) title.Position = UDim2.new(0, 10, 0, 0) title.BackgroundTransparency = 1 title.Text = "Audio Logging" title.TextColor3 = currentTheme.Text title.TextSize = 14 title.Font = Enum.Font.SourceSansBold title.TextXAlignment = Enum.TextXAlignment.Left title.Parent = main -- Theme Button local themeBtn = Instance.new("TextButton") themeBtn.Size = UDim2.new(0, 90, 0, 24) themeBtn.Position = UDim2.new(1, -98, 0, 4) themeBtn.BackgroundColor3 = currentTheme.BtnBG themeBtn.BorderColor3 = currentTheme.Border themeBtn.Text = "Theme: Dark" themeBtn.TextColor3 = currentTheme.Text themeBtn.TextSize = 11 themeBtn.Font = Enum.Font.SourceSans themeBtn.Parent = main -- Buttons Row local btnHolder = Instance.new("Frame") btnHolder.Size = UDim2.new(1, -20, 0, 30) btnHolder.Position = UDim2.new(0, 10, 0, 34) btnHolder.BackgroundTransparency = 1 btnHolder.Parent = main local function quickBtn(txt, pos, size) local b = Instance.new("TextButton") b.Size = size b.Position = pos b.BackgroundColor3 = currentTheme.BtnBG b.BorderColor3 = currentTheme.Border b.Text = txt b.TextColor3 = currentTheme.Text b.TextSize = 12 b.Font = Enum.Font.SourceSansBold b.Parent = btnHolder return b end local scanBtn = quickBtn("Scan", UDim2.new(0, 0, 0, 0), UDim2.new(0.3, -2, 1, 0)) local clearBtn = quickBtn("Clear", UDim2.new(0.33, 0, 0, 0), UDim2.new(0.3, -2, 1, 0)) local autoToggle = quickBtn("Auto: ON", UDim2.new(0.66, 0, 0, 0), UDim2.new(0.34, 0, 1, 0)) -- Search Bar local search = Instance.new("TextBox") search.Size = UDim2.new(1, -20, 0, 28) search.Position = UDim2.new(0, 10, 0, 70) search.BackgroundColor3 = currentTheme.BoxBG search.BorderColor3 = currentTheme.Border search.Text = "" search.PlaceholderText = "Search player, audio, or ID..." search.PlaceholderColor3 = Color3.fromRGB(120, 120, 120) search.TextColor3 = currentTheme.Text search.TextSize = 12 search.Font = Enum.Font.SourceSans search.TextXAlignment = Enum.TextXAlignment.Left search.Parent = main -- Scroll List local list = Instance.new("ScrollingFrame") list.Size = UDim2.new(1, -20, 1, -110) list.Position = UDim2.new(0, 10, 0, 104) list.BackgroundColor3 = currentTheme.BoxBG list.BorderColor3 = currentTheme.Border list.ScrollBarThickness = 6 list.ScrollBarImageColor3 = currentTheme.Accent list.Parent = main local layout = Instance.new("UIListLayout") layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Padding = UDim.new(0, 6) layout.Parent = list -- Theme Update Function local function applyTheme() currentTheme = themes[currentThemeName] main.BackgroundColor3 = currentTheme.MainBG main.BorderColor3 = currentTheme.Border title.TextColor3 = currentTheme.Text toggleUIBtn.BackgroundColor3 = currentTheme.MainBG toggleUIBtn.BorderColor3 = currentTheme.Border toggleUIBtn.TextColor3 = currentTheme.Text themeBtn.Text = "Theme: " .. currentThemeName themeBtn.BackgroundColor3 = currentTheme.BtnBG themeBtn.BorderColor3 = currentTheme.Border themeBtn.TextColor3 = currentTheme.Text scanBtn.BackgroundColor3 = currentTheme.BtnBG scanBtn.BorderColor3 = currentTheme.Border scanBtn.TextColor3 = currentTheme.Text clearBtn.BackgroundColor3 = currentTheme.BtnBG clearBtn.BorderColor3 = currentTheme.Border clearBtn.TextColor3 = currentTheme.Text autoToggle.BackgroundColor3 = currentTheme.BtnBG autoToggle.BorderColor3 = currentTheme.Border autoToggle.TextColor3 = currentTheme.Text search.BackgroundColor3 = currentTheme.BoxBG search.BorderColor3 = currentTheme.Border search.TextColor3 = currentTheme.Text list.BackgroundColor3 = currentTheme.BoxBG list.BorderColor3 = currentTheme.Border list.ScrollBarImageColor3 = currentTheme.Accent end -- // Logic \\ -- local function getCreator(id, cb) if creators[id] then cb(creators[id]) return end task.spawn(function() local ok, info = pcall(function() return MarketplaceService:GetProductInfo(tonumber(id), Enum.InfoType.Asset) end) local name = (ok and info and info.Creator) and info.Creator.Name or "N/A" creators[id] = name cb(name) end) end local function getOwner(snd) local p = snd.Parent while p and p ~= Workspace do if p:IsA("Model") then local plr = Players:GetPlayerFromCharacter(p) if plr then return plr.DisplayName .. " (@" .. plr.Name .. ")", plr.Name:lower() .. " " .. plr.DisplayName:lower() end elseif p:IsA("Backpack") or p:IsA("PlayerGui") then local plr = p.Parent if plr and plr:IsA("Player") then return plr.DisplayName .. " (@" .. plr.Name .. ")", plr.Name:lower() .. " " .. plr.DisplayName:lower() end end p = p.Parent end return snd.Parent and snd.Parent.Name or "World", (snd.Parent and snd.Parent.Name or "world"):lower() end local function updateList() for _, v in ipairs(list:GetChildren()) do if v:IsA("Frame") then v:Destroy() end end local filter = search.Text:lower() for _, item in ipairs(logs) do local match = (filter == "") or item.Name:lower():find(filter, 1, true) or item.ID:find(filter, 1, true) or item.Tag:find(filter, 1, true) if match then local row = Instance.new("Frame") row.Size = UDim2.new(1, -6, 0, 54) row.BackgroundColor3 = currentTheme.RowBG row.BorderColor3 = currentTheme.Border row.BorderSizePixel = 1 row.Parent = list local info = Instance.new("TextLabel") info.Size = UDim2.new(1, -70, 1, -4) info.Position = UDim2.new(0, 6, 0, 2) info.BackgroundTransparency = 1 info.Text = item.Name .. "\nID: " .. item.ID .. " | By: " .. item.Creator .. "\nUser: " .. item.Owner info.TextColor3 = currentTheme.SubText info.TextSize = 11 info.Font = Enum.Font.SourceSans info.TextXAlignment = Enum.TextXAlignment.Left info.Parent = row local copy = Instance.new("TextButton") copy.Size = UDim2.new(0, 60, 0, 32) copy.Position = UDim2.new(1, -64, 0.5, -16) copy.BackgroundColor3 = currentTheme.BtnBG copy.BorderColor3 = currentTheme.Border copy.Text = "Copy" copy.TextColor3 = currentTheme.Text copy.TextSize = 12 copy.Font = Enum.Font.SourceSansBold copy.Parent = row copy.MouseButton1Click:Connect(function() if setclipboard then setclipboard(item.ID) end copy.Text = "Copied" task.wait(1) copy.Text = "Copy" end) end end list.CanvasSize = UDim2.new(0, 0, 0, layout.AbsoluteContentSize.Y + 10) end local function addLog(id, name, owner, tag) local key = id .. "_" .. tag if seen[key] then return end seen[key] = true local entry = { ID = id, Name = name, Owner = owner, Tag = tag, Creator = "..." } table.insert(logs, 1, entry) updateList() getCreator(id, function(cr) entry.Creator = cr updateList() end) end local function checkSound(s) if s:IsA("Sound") then local function run() local num = s.SoundId:match("%d+") if num then local sName = s.Name ~= "" and s.Name or "Audio" local owner, tag = getOwner(s) addLog(num, sName, owner, tag) end end if s.IsPlaying or s.SoundId ~= "" then run() end s:GetPropertyChangedSignal("SoundId"):Connect(run) s.Played:Connect(run) end end local function fullScan() for _, obj in ipairs(Workspace:GetDescendants()) do checkSound(obj) end end -- // Events \\ -- toggleUIBtn.MouseButton1Click:Connect(function() main.Visible = not main.Visible toggleUIBtn.Text = main.Visible and "Close Logging" or "Open Logging" end) themeBtn.MouseButton1Click:Connect(function() if currentThemeName == "Dark" then currentThemeName = "Midnight" elseif currentThemeName == "Midnight" then currentThemeName = "Matrix" else currentThemeName = "Dark" end applyTheme() updateList() end) search:GetPropertyChangedSignal("Text"):Connect(updateList) scanBtn.MouseButton1Click:Connect(fullScan) clearBtn.MouseButton1Click:Connect(function() logs = {} seen = {} updateList() end) autoToggle.MouseButton1Click:Connect(function() autoScan = not autoScan autoToggle.Text = autoScan and "Auto: ON" or "Auto: OFF" if autoScan then fullScan() end end) Workspace.DescendantAdded:Connect(function(d) if autoScan then checkSound(d) end end) -- Initial Run fullScan()