Hi I was wondering how to make a music synchronized game intro, let me show you what I mean :
I’m really good at making videos but not really scripting so that’s why i’m asking.
I’m planning to use TweenService for the animations but I have no idea how to measure precisely time to show the visualm effects, also I have no idea on how to make the bpm beats
I’ve searched on the devforum and no one has done something like this lol
Any help is appreciated !
Timings:
1.15s song starts
3.08s first letter A
3.12s second letter T
3.15s third letter M
3.22s 4th and 5th letter OS
4.08s logo disseapears
4.13s Menu appears
I think its just a matter of timing the gui to match the song it shouldnt be to hard but im a beginner scripter and havent touched on gui that much yet.
Yea maybe I could use Heartbeat but i’ve never used this, and it’s so strange, I think i’ve seen some game have an animated intro, but there’s litterally no one talking about this on the devforum…
You will have to manually get the timings unless you want to do some over-complicated analysis of PlaybackLoudness at run time (which isn’t worth the effort in your case.)
I would scrub through the sound file on a program like Audacity and write down in seconds where each beat occurs. Then put these timings in an array and compare the TimePosition of the sound to them as it plays.
As for the text appearing effect you could either:
Make each letter an individual gui element and tween one in after the other in correspondence to your timings (if you wanted them to fade in)
For a more simple effect you could just have one text label and increase the MaxVisibleGraphemes value after each beat, giving an easier typewriter effect.
Thanks but I already have the BPM value (it’s 200BPM), this song is also a map from osu! and it’s a rythm game, but I have to find a way to use the bpm value
Thanks ! I’ll use the first method, I already have the timings in that video but how can I be sure that the timing in roblox is perfect ? I was planning to use Heartbeat but it’s relying on framerates and if someone plays in 30hz / 144hz it will mess up the animation
1.15s song starts
3.08s first letter A
3.12s second letter T
3.15s third letter M
3.22s 4th and 5th letter OS
4.08s logo disseapears
4.13s Menu appears
If you want timings to be perfect, instead of counting frames you could save the current tick() when the song is played (which is the epoch time in seconds) and on every RunService.RenderStepped check to see if the difference between the new and old ticks is enough to trigger a timing, then reveal a letter if so. (use a debounce)
Maybe a simple, and not so effecient way is to connect a function when the song starts, then wait(3.08) and here maybe Tween:Play() then wait(0.4) and so on. You can test this as I’m not sure if it’s really efficent or not.
And therefore I don’t think it’s really that efficent. Wait() is only 30/sec. So if you were to put some code that would run for 1 second in a loop and put wait(), it would only run it 30 times. The minimun of time you can wait is 0.03 seconds, but when it happens on the client and not the server, it should probably be effecient enough. Else, RunService.RenderStepped is another way.