OK, so there is no way to detect things like BPM entirely inside of Roblox unfortunately, and I haven’t found an open-source solution for real-time audio analysing that can easily be used on Roblox. BUT! There is a way to do this semi-manually without having to script entire songs out. While this does NOT detect BPM changes, it contains data on Treble, Bass, Sub bass ect.
I stumbled across this video today on Youtube, showcasing an audio visualiser in Roblox. In the description is a github page for the files to create a web server that enables you to get the sound data from a sound file and then import it to Roblox through a module script, which you can then use to create your own visualiser (these are both linked below). How I ended up doing this was using Python 3 to create a local web server and upload the files to it, as the intended method of using rawgit no longer works (this means you will need to download Python).
Please note that this project hasn’t been touched for over 5 years. Whilst I only ran into a single problem your experience may be different. I did not make this, therefore I can only help a limited amount.
(I am on windows, so this will only apply to people on windows because I have never touched another PC without windows and have no idea how to translate this).
I recommend using Python 3 in this case because it is what I used, specifically Python 3.8 but anything later than that is guaranteed to work also. To create a local web server on your device and host the files to be used, you will need to download the zip file from the github page and extract. Open Command Prompt and type in the following command
cd (path to unzipped folder on your device)
If you put it on your desktop, the path will most likely be
C:/Users/YOURUSERHERE/Desktop/Monstercat-Audio-Spectrum-Visualizer-master/Monstercat-Audio-Spectrum-Visualizer-master
Then, still in Command Prompt, type in the command:
python3 -m http.server
This will create the web server hosting the files you previously opened in Command Prompt. You can then go to http://localhost:8000 on your browser (Chromium based browser/Microsoft Edge recommended) to view a Monstercat-styled visualiser. You will need to keep the Command Prompt window open until you are finished.
There are extra instructions such as how to add new songs on the github page. To record data, press E while on the localhost site you just created. You will need to listen to the entire song from start to finish whilst recording it, otherwise only sections of the data will be exported.
Once the song being played is over, it should automatically begin to download the .rbxmx file which is the module script containing all of the sound data you will need to create what you want. Once you are done recording all of the songs and all data is exported and downloaded, you can close the Command Prompt window.
This model is an example of what I made with this, you can take it and use anything you want in it if you desire.
Edit: I forgot about this step (my bad). But you will need to head into the config files located in js/helpers. Once you have found this, you will need to find and set EncodingEnabled to true. It should be right at the top.
https://www.roblox.com/library/7163144257/AudioAnalyzee