The sound Pool: has Great Features, but Terrible Mood Swings. I need help with audio playback, because I think that playing Sounds Shouldn’t Feel Like a Boss Battle

Hi.
I’ve been working with both the Sound Pool and Sound Object classes, and while I love the features each one offers, I keep running into problems that are driving me crazy.
I prefer using Sound Pool because of its advanced features like 3D sound and rotation, but what really makes it stand out is its ability to play sounds without blocking the script. This means I can repeatedly trigger a sound effect (like pressing a button multiple times), and each sound plays independently without waiting for the previous one to finish—unlike the Sound Object, which forces sequential playback.
However, when using a lot of sounds, I start experiencing lag and occasional exceptions where the sound handle becomes null. I believe this happens because Sound Pool streams audio directly from disk, and I wonder if there’s a way to preload the sounds before playing them to avoid these issues.
On the other hand, I found a way to play sounds using the Sound Object without blocking the script by running it inside the async multi-threading function, but I’m not sure if this is the best approach.
so my questions are for those of you who are experienced enough in NVGT.
Is there a way to preload sounds when using Sound Pool to avoid lag and exceptions?
Is running Sound Object playback in an async function the best solution, or is there a better approach?
Any advice would be greatly appreciated.
Thanks in advance

From what I remember, and if NVGT follows the same principles, you can preload the sound in question by loading it into a sound object first. As long as the object doesn't get removed, it'll stay in memory and you can create as many sound objects with it as you want. This will also improve performance with the sound_pool, since it's not having to load the sound each time. As for your other question.
The reason the sound_pool can play the sounds repeatedly is because it's using an array to create and store the sound objects. Every time you hear a sound overlapping another, it's a new sound object. The sound_pool just stores the sound while it's being played, then removes it and recycles it from the array when it's done. You could copy this behavior if you wanted. I would just get use to using the sound_pool though.

sound pool is outdated shit, I ran in simular issues as well, for example pause_all doesn't work etc. It has just been ported to nvgt from bgt and then got ignored.
Use sound_manager by mason
There are no docs yet, but a very basic example and once you figure out how to get started you'll love it. Feel free to post your questions in the thread for it, there's one on the forum already.

Looks like I should start contributing to it. Also, that is why sound pool is named as legacy in the documentation, perhaps.