StarterGui is a folder that copies it's children and inserts them to a Player's PlayerGui. PlayerGui is where the player would see any ScreenGui and it's GuiObjects inside of it.
In your code, you parent the Sound object to the StarterGui when it should be the PlayerGui.
We can use the :GetPlayerFromCharacter() function to get us the player since the hit parameter in the Touched event could have a Parent that is the Character.
local Players = game:GetService("Players")
local screechPart = script.Parent
local soundId = 1841154098
local debounce = false
screechPart.Touched:Connect(function(hit)
local human = hit.Parent:FindFirstChild("HumanoidRootPart")
if human then
if debounce then return end
debounce = true
local player = Players:GetPlayerFromCharacter(hit.Parent)
local sound = Instance.new("Sound")
sound.SoundId = "rbxassetid://"..soundId
sound.Volume = .5
sound.Looped = true
sound.Parent = player.PlayerGui
sound:Play()
end
end)
Another thing you might notice is that I included rbxassetid:// to retrieve the proper Id for the Sound object. You'll get a load error without this.
######Let me know if you need something explained or if I had missed anything.
Edit:
:connect is deprecated. Use :Connect. You should also Parent instances after setting it's properties, so don't use the second parameter to Instance.new()