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 :slight_smile:

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;
			}
	}

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 :slight_smile:
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++;
        }
    }