Hello, I'm back with my investigation result.
The PlayCommand of your playsound1 is play, which was automatically detected when the playsound1 is created (when you drop the component on the form).
And that is the problem. The program "play" doesn't exist on my computer. When running your program, I got no sound. And if I set the build mode to "Debug" and run the program again, I will get EProcess exception.
Why this issue happens?
TPlaySound will automatically find the first available sound player program on the user computer when an instance of TPlaySound is created, and the data will be stored. Unfortunately, it won't automatically refresh the data if the source code is recompiled or the executable program is run on other computers.
How to solve the issue?
If you build and run the program on your computer only, it is okay. But if you want to share it to others, you should empty the PlayCommand property. Because TPlaySound will redetect any available command if that string is empty.
Sorry, I misguided you previously. When I tested your program I wasn't aware that you used TPlaySound by dropping the component on the form. And because if I set breakpoints inside TPlaySound, none of them can be reached (which is caused by the debug option configured on the package). I only needed to add TPlaySound.Create then recompiled and run the program, I heard the sound because it will create a new instance of TPlaySound and force it to detect the PlayCommand. That's why I thought you need to manually call the constructor too.