Vermutung, ohne jetzt die sndPlaySound()-Routine zu kennen:
Du forderst das
Handle an, startest das Abspielen (was sicher "nicht-blockierend" ist) und gibst das
Handle gleich wieder frei.
Somit reisst du der sndPlaySound()-Routine das
Handle gleich wieder weg.
Ich schätze, du musst über Event-Routinen abfragen, wann der sound zuende ist und dann erst freigeben.
Ohne Gewähr..ist mir nur beim Drüberschauen gerade aufgefallen.