See the collision action matrix at the bottom of this page to see what messages are sent in different circumstances. You can further debug this issue using a print("Collision Detected"); just before audio.Play();
Then if you don't get the debug message, the collision isn't happening.
If you get the message but no sound, something's still wrong with the sound.
if(collision.gameObject.FindWithTag("Audio"))// you can rename the tag here to whatever you tag the thing you want to hit to play the attached sound.
{
audio.Play();
}
make that adjustment, and replace it into your OnCollisionEnter function. really simple. hope this helps!