I would have done it 1 by 1 or probably cloning random balls to random position and resizing them randomly. I would hard code by the ground animation by hand because i have no idea how it works
Check for Sound.PlaybackLoudness
It might help you making these blocks increasing and decrasing depending on sounds loudness
local part = script.Parent
local sound = workspace.Song
local firstSize = part.Size
sound:Play()
game:GetService("RunService").Heartbeat:Connect(function(dt)
part.Size = Vector3.new(part.Size.X, firstSize.Y * sound.PlaybackLoudness, part.Size.Z)
end)
this script will basically make the parts size keep increase and decrease by sound.PlaybackLoudness
Also sound.PlaybackLoudness can go up to 1000 so it is recommended to divide it then multiply it to parts size. (It’ll be too big if you wont divide)
this line of code makes part’s position changed by part’s Y size( which is playbackLoudness thingy) and keeps bottom of the part stay at almost same position.
Everything works, I figured that I can just time the ripple and other effects manually, I have one last question:
What should I divide the PlaybackLoudness by to keep the FieldOfView near 70~80?
This is what I currently have:
local Camera = game.Workspace.CurrentCamera
local Sound = game.Workspace:WaitForChild("Part").Sound
while wait(.01) and sound.Playing do
game:GetService("RunService").Heartbeat:Connect(function(dt)
Camera.FieldOfView = Sound.PlaybackLoudness
end)
end
you can divide by 100, so the max loudness will add 10 FOV into your camera fov and the max fov will be 80
-- local script --
local cam = workspace.CurrentCamera
local defaultFOV = cam.FieldOfView
local sound = workspace.Song
if not sound.IsPlaying then
sound:Play()
end
game:GetService('RunService').RenderStepped:Connect(function(dt)
cam.FieldOfView = defaultFOV + sound.PlaybackLoudness / 100
end)