Lower volume when another audio source plays

I have two audio sources:

  • Audio source 1: Plays the background
    music.
  • Audio source 2: Plays some
    guiding speech OnTriggerEnter on a
    game object.

I want to lower source 1’s volume just before source 2 plays and then return the volume back to normal when source 2 is done playing. Lowering the sound is easy but getting it to return back to normal at the right time is a problem. Here is what I’ve tried

Player.js:

var one_bg_sound : AudioSource;
var two_guide_sound : AudioSource;

function OnTriggerEnter (other : Collider) {

	// Lower background sound on collision
	one_bg_sound.volume = 0.25;
	
	// Play 4 seconds long clip
	two_guide_sound.Play();
	
	// After 4 seconds return the background sound to normal
	Camera.ResetBgAudioInSeconds( one_bg_sound, 4 );

}

Camera.js:

static function ResetBgAudioInSeconds( audioSource: AudioSource, secs: int ) {

	Debug.Log( "Reset music volumn in seconds:" + secs );
	yield WaitForSeconds ( secs );
	
	Debug.Log( "Music volume reset" );
	audioSource.volume = 1;
}

The problem is:
The ResetBgAudioInSeconds doesn’t execute unless I remove the “yield” line. What am I doing wrong?

Yield isn’t working because it is contained in a static function.