Thank you for sharing your insights and solutions!
You way of monitoring the sound’s open state using Sound::getOpenState and delaying the CREATE_PROGRAMMER_SOUND call until the sound is ready sounds like a solid approach to ensure that playback begins only when the sound data is fully available.
Alternatively, if your projects design allows for it, preloading the required sounds on the main thread before triggering the event could be an effective strategy.
I also found a similar discussion here that might relevant to your case: