First I modded the code that inits sound to this:
int success=Mix_OpenAudio(44000, AUDIO_F32LSB, 2, 8192);
if (success==-1 ) {
LogError2("InitSetup failed to init audio because %s",Mix_GetError());
}
That extra call to Mix_GetError() returns a string saying what the problem is and in this case I got
ALSA : Couldn’t find any hardware audio formats.
ALSA is short for Advanced Linux Sound Architecture and Wikipedia is very informative. It certainly put some perspective on it.
Also I found this article adds a lot more information. What fixed it though was doing
sudo raspi-config
Then pressing enter on 1. System Options and then S2 Audio and selecting the headphones option. Simple as that. After that asteroids played the sounds as expected.
There’s a lesson here which is to use the functions provided, in this case calling the Mix_GetError() function to show errors. I added it into the PlayASound() call to see why it was failing, and it stopped doing it, i.e. it worked with lots of explosions on screen. I suspect it was the sound configuration hadn’t been properly set which is an issue with Raspberry Pis apparently.