audio.clip.length 'hides' my button! yaiks!

I ran into something I cannot yet understand; ere's my problem:

   if (GUI.Button (Rect(154,128, 495,72), "", SingleplayerButton)){
    audio.PlayOneShot(buttonTap);
    yield WaitForSeconds (audio.clip.length);
    Application.LoadLevel ("Test"); 

}

as soon as I add the yield WaitForSeconds (audio.clip.length); line, the buttons stop being rendered. all this is called in a onGui function and its supposed to play the button sound in its full lenght before going on and load the level.

You can't put yield into OnGUI, which (like Update) runs every frame and can't be interrupted. That has to be done in another function.