Play audio clip over another audio source
Hi. I have a scene with two audio sources. One is for a constantly playing menu music. The other is for sound effects (AudioClips) that are supposed to play over the music. While the first AudioSource is playing, attempting to play an audio clip with the other source does not work. No errors occur, but the clip does not sound, even when the music is muted. To test the code for the sound effect AudioSource, I duplicated the object onto another scene that doesn't have music playing and the sound effect worked. The music AudioSource does have code to prevent multiple instances when the scene is reloaded, but I feel like it might be conflicting and the preventing sound effects. There must be a better way to do this. Help is appreciated.
Scene hierarchy:
Script for AudioSource (menu music):
public class MusicClass : MonoBehaviour
{
private static AudioSource audioSource;
private static MusicClass Instance;
// Allow only one instance of the audio source
private void Awake() {
if (Instance != null) {
Destroy(gameObject);
return;
}
DontDestroyOnLoad(gameObject);
Instance = this;
audioSource = GameObject.Find("AudioSource").GetComponent<AudioSource>();
}
// Play audio
public static void PlayMusic() {
if (!audioSource.isPlaying) audioSource.Play();
}
// Stop audio
public static void StopMusic() {
audioSource.Stop();
}
}
Script for SfxSource (sound effects):
public class Sfx : MonoBehaviour
{
public static AudioClip menuSelectClip;
private static AudioSource audioSource;
void Awake() {
// load audio clips
menuSelectClip = Resources.Load<AudioClip>("Sound/Menu_Select");
audioSource = GameObject.Find("SfxSource").GetComponent<AudioSource>();
}
// Play sound effect from resource name
public static void PlaySfx(string sfxName) {
Debug.Log("going to play sfx");
switch (sfxName) {
case "MenuSelect":
audioSource.PlayOneShot(menuSelectClip, 1.0f);
break;
}
}
}
Answer by bcapo25 · May 19, 2020 at 03:20 PM
I fixed it by applying different tags to both audio sources and making a generic DontDestroyObject script to prevent either one of them from being destroyed or duplicated if the scene changes or reloads.
Your answer
Follow this Question
Related Questions
Audio is cut in script 0 Answers
Cracking at end of audio? 0 Answers
Need help: new sound isnt played correctly anymore 2 Answers
Second AudioClip won't play 0 Answers