Can't play any sounds. What's wrong?

I’m trying to play an audio clip when my player collects a powerup. Is there something wrong with this code?

void OnTriggerEnter2D (Collider2D other) 
	{
		if (other.tag == "Player")
			audio.Play();
			jumper.jumpAttempts ++;
			Destroy (gameObject);
	}

Also, how to play sounds only ONCE if a condition is met? Since everything happens in Update() , if I use a conditional statement i just end up firing off my sound every frame.

if (Input.GetKeyDown("escape"))
		{
			paused = !paused;
			myAudio.Play();
		}
			
		if(paused)
		{
			Time.timeScale = 0;
        	}
		else 
		{
			Time.timeScale = 1;
		}

I can play a sound like this but that is only because the player presses the Escape button. I tried PlayOneShot but the results were the same. Ultimately I would like to have one sound on pause and another on play. With my current code I can only have 1.

For the first code snippet you are trying to call audio.Play(); on a destroyed object.For calling audio on destroying object use something like this.Use another script like SoundManager.cs on a gameobject named SoundManager for playing sounds.

//SoundManager.cs script
public class SoundManager:MonoBehaviour
{
  void Start()
  {
    //Create the audio source 

    //Load the audio clip
  }

  //The public function we will use to call to play the sound
  public void PlayJumpSound()
  {
    //Play the sound
    audio.play();
  }
}

Now use your trigger scrpit like this

void OnTriggerEnter2D(Collider2D other)
{
  if(other.tag=="Player"
  {
    //Play the audio
    GameObject.Find("SoundManager").GetComponent<SoundManager>().PlayJumpSound();
    //Incriment the jump attempts
    jumper.jumpAttempts++;
    //Destroy the gameobject
    Destroy(gameObject);
  }
}

The update function will call once per frame.That is if your FPS is 60,the Update() method will call 60 times a second.using audio.Play() directly in this method will keep on calling this method which will not give you the proper result.Use a boolean to make sure the function will only get called once

bool IsSoundPlayed=false;

if (Input.GetKeyDown("escape"))
{
  paused = !paused;

  if(!IsSoundPlayed)
  {
    myAudio.Play();
    IsSoundPlayed=true;
  }
}

if(paused)
{
  Time.timeScale = 0;
  //State to false
  IsSoundPlayed=false;
}
else
{
  Time.timeScale = 1;
  //State to false
  IsSoundPlayed=false;
}