Yeah you'll want to keep the buffer around while the sound_lib handle exists. Remember, you are streaming, not loading. So this means you are reading small chunks of that data during playback, so if you destroy the string buffer, sometimes it will continue to play because destroying the buffer doesn't necessarily wipe the memory from that address space and make it blank, it just makes it available for use again. So if you destroy the buffer in python and you don't allocate any other memory, the sound *may, continue to play. But hen if you destroy the buffer and you read a 200mb file, likely you will overwrite that address space containing the memory from the buffer, and then sound_lib will receive invalid data and fail to continue playing when it attempts to load the next chunk of data and reads part of your 200mb file instead of the audio data. Reading invalid memory like that will usually cause all sorts of issues like access violations or even crashes if you are unlucky. One time I destroyed the buffer for fun while the sound was playing and a second later the sound stopped playing with a loud squawking sound before failing entirely lol. The only reason it was able to make that sound was because I had loaded a wav sound into memory, and you can almost directly play back bytes as wav without running them through some decoding algorithm first, so for a while there was still valid audio to play back audio before it stopped. Even if you don't allocate any other memory but you destroy the buffer, the truth is that likely something else will internally allocate memory and overwrite the address space containing your audio data, sometimes within a couple ms, sometimes a few seconds and maybe if your lucky that memory won't be overwritten. So anyway TLDR, save a reference to the buffer while the handle from sound_lib is open.
I am a web designer, and a game developer. If you wish see me at http://www.samtupy.com