- Home /
Play AudioClips from a List by using yield WaitForSeconds (C#)
I wanna play an AudioClip by pressing the M-Button and then it has to wait until the clip is finished an then it should start with the next clip from the songlist so until now i have this script(only this part), and there are no syntax mistakes It would be pretty nice if someone could help :)
using UnityEngine; using System.Collections; using System.Collections.Generic;
public class RadioManager : MonoBehaviour { // Musik Variablen public List SongList = new List(); public bool stop = true; public bool play = false;
 void Start () 
 {
    
 }
 
 // Update is called once per frame
 void FixedUpdate () 
 {
   RadioSound();
 }
  IEnumerator RadioSound()
 {
   if(Input.GetKey(KeyCode.M))
     {
             int index=0;
             while(index>=0 && stop && !play)
             {
                 if(index<=7)
                 {
                 audio.PlayOneShot(SongList[index].song);
                 play=true;
                 stop=false;
                 yield return new WaitForSeconds(SongList[index].song.length);
                 }    
                 else
                 {
                     index=0;
                 }
              
              index++;  
              stop=true;
              play=false;
             }
     }
Answer by EliteMossy · Feb 15, 2013 at 11:28 PM
You are setting stop to true after the first song, i would do it like this:
 void Start () { StartCoroutine(RadioSound()); }
  
  IEnumerator RadioSound()
  {
      while ( true )
      {
          yield return new WaitForSeconds(0.1f);
          if ( !Input.GetKey(KeyCode.M) && !play)
          {
              continue;
          }
 
          for ( int index = 0; index < SongList.Count, index++)
          {
              audio.PlayOneShot(SongList[index].song);
              play = true;
              yield return new WaitForSeconds(SongList[index].song.length);
          }
 
          play = false;
      }
  }
Something like that :) Thinking about it i was not 100% sure if you want it that the clips are not continuous, ie pressing m again plays the next song. If so then this is what you are after
     void Start() { StartCoroutine(RadioSound()); }
 
     IEnumerator RadioSound()
     {
         int index = 0;
         while ( true )
         {
             yield return new WaitForEndOfFrame();
 
             if ( !Input.GetKey(KeyCode.M) )
             {
                 continue;
             }
 
             if ( index >= SongList.Count )
             {
                 index = 0;
             }
             audio.PlayOneShot(SongList[index].song);
             yield return new WaitForSeconds(SongList[index].song.length);
             index++;
         }
     }
thanks :) if i press m again,after its finished it plays the second clip do u also now how to do this automatically? so that it plays the second one after finishing the first, its not necesarry, only if u can help :)
ah i didnt tried the first one :) thanks it helped very much
Your answer
 
 
             Follow this Question
Related Questions
IEnumerator's did not read "bool" after yield return new WaitForSeconds. 1 Answer
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
how to yield in C# 1 Answer
Proper Way to Wait in C# 1 Answer
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                