// play a track w/crossfade public void PlayMusicTrack(AudioTrackEnum trackId, bool loop = false) { if (Parameters.Tracks.Count > 0) { if (currentMusicPlayerId >= 0) { AudioSource actualPlayer = musicPlayers[currentMusicPlayerId].actualPlayer; if (actualPlayer.isPlaying) { //Debug.Log("Stopping track " + currentTrack.ToString()); // stop the currently playing track StartCoroutine(FadeMusicTrack(currentMusicPlayerId, false)); } } //Debug.Log("Playing track " + trackId.ToString()); if (MusicTracks.ContainsKey(trackId)) { currentMusicPlayerId = (currentMusicPlayerId + 1) % musicPlayers.Length; currentTrack = trackId; StartCoroutine(FadeMusicTrack(currentMusicPlayerId, true, loop)); } else { GlobalManager.MInstantMessage.DeliverMessage(InstantMessageType.MusicTrackPlayed, this, trackId); } } else { GlobalManager.MInstantMessage.DeliverMessage(InstantMessageType.MusicTrackPlayed, this, trackId); } }
void OnMusicTrackPlayed(object sender, InstantMessageArgs args) { if (musicMode == BackGroundMusicMode.All) { AudioTrackEnum trackId = (AudioTrackEnum)args.arg; if (trackId == currentTrack && currentTrack != AudioTrackEnum.Unknown) { PlayNextTrack(); } } }
protected override void AwakeInit() { currentTrack = AudioTrackEnum.Unknown; registrator.Add( new MessageRegistrationTuple { type = InstantMessageType.PlayMusicTrack, handler = OnPlayMusicTrack }, new MessageRegistrationTuple { type = InstantMessageType.BackgroundMusic, handler = OnBackgroundMusic }, new MessageRegistrationTuple { type = InstantMessageType.MusicTrackPlayed, handler = OnMusicTrackPlayed } ); }
public override void MakeInitial() { // public instance flag; it is false on start Initialized = Status.None; Parameters = GetComponentInChildren <AudioManagerParams>(); if (Parameters != null) { // set up music players musicPlayers = new MusicPlayer[Parameters.MaxAudioPlayers]; for (int i = 0; i < musicPlayers.Length; i++) { musicPlayers[i] = new MusicPlayer { actualPlayer = gameObject.AddComponent <AudioSource>(), trackId = AudioTrackEnum.Unknown, subclip = -1, order = -1 }; musicPlayers[i].actualPlayer.playOnAwake = false; musicPlayers[i].actualPlayer.volume = 0; } currentTrack = AudioTrackEnum.Unknown; currentMusicPlayerId = -1; // set up SFX players sfxPlayers = new SFXPlayer[Parameters.MaxSFXPlayers]; for (int i = 0; i < sfxPlayers.Length; i++) { sfxPlayers[i] = new SFXPlayer { actualPlayer = gameObject.AddComponent <AudioSource>(), clipId = SFXEnum.Unknown }; sfxPlayers[i].actualPlayer.playOnAwake = false; sfxPlayers[i].actualPlayer.volume = 0; } base.MakeInitial(); } else { Debug.LogError("No AudioManagerParams component found in children!"); } }
void PlayNextTrack() { if (playList.Count > 0) { switch (musicMode) { case BackGroundMusicMode.Off: currentTrack = AudioTrackEnum.Unknown; GlobalManager.MAudio.PlayMusicTrack(currentTrack, false); // just stop playing break; case BackGroundMusicMode.One: if (currentTrack == AudioTrackEnum.Unknown) { currentTrack = playList[Random.Range(0, playList.Count)]; } //GlobalManager.MAudio.PlayMusicTrack(currentTrack, false); // play the same track over and over again GlobalManager.MAudio.PlayMusicTrack(currentTrack, true); // play the same track over and over again break; case BackGroundMusicMode.All: // shuffle the original playlist but make sure each track is only played once if (allPlayList == null) { allPlayList = new List <AudioTrackEnum>(); } if (allPlayList.Count == 0) { foreach (AudioTrackEnum track in playList) { allPlayList.Add(track); } } int trackIndex = Random.Range(0, allPlayList.Count); currentTrack = allPlayList[trackIndex]; // remove the currently playing entry from the playlist allPlayList.RemoveAt(trackIndex); GlobalManager.MAudio.PlayMusicTrack(currentTrack, false); // play a random track from the playlist break; } } }