/// <summary> /// 停止歌曲 /// </summary> private static void StopSong() { LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas; ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas; scenesDatas.AudioSource.Stop(); scenesDatas.VideoPlayer.Stop(); }
/// <summary> /// 当歌曲播放完毕时是循环播放时 /// </summary> private static void OnLoopPlayback() { LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas; logicDatas.CurrentSongIndex++; logicDatas.CurrentSongIndex %= logicDatas.SongsName.Length; logicDatas.Index = 0; SongControl.ReleaseAudioRelatedResources(); SongControl.LoadNextSong(logicDatas.SongsName[logicDatas.CurrentSongIndex]); }
/// <summary> /// 播放加载完毕的歌曲 /// </summary> internal static void PlayLoadFinishSong() { LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas; ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas; UILyricControl.InitLyric(scenesDatas.LyricItems, logicDatas.LyricInfo); scenesDatas.SongName.text = System.IO.Path.GetFileNameWithoutExtension(logicDatas.SongsName[logicDatas.CurrentSongIndex]); scenesDatas.SongPlayingTime.text = "00:00"; scenesDatas.SongTotalTime.text = SongTimeTools.SongTimeToStringTime(scenesDatas.AudioSource.clip.length); scenesDatas.SongTimeSlide.value = 0.0f; scenesDatas.AudioSource.time = 0.0f; scenesDatas.AudioSource.Play(); logicDatas.GameState = GameState.Playing; }
/// <summary> /// 心跳刷新 /// </summary> /// <param name="data">数据</param> internal static void RefreshHeartbeat() { LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas; logicDatas.Timer += Time.deltaTime; if (logicDatas.Timer > ModelManager.Instance.GetParameter.UpdateInterval) { logicDatas.Timer = 0; AudioVisualizer.Surround(ModelManager.Instance.GetScenesDatas.AudioDatas, ModelManager.Instance.GetParameter); if (logicDatas.GameState != GameState.Playing) { return; } AudioVisualizer.UpdateAudioData(AudioDataDistributionType.DoubleSymmetry); } }
/// <summary> /// 改变歌曲进度 /// </summary> /// <param name="songTime">歌曲进度</param> internal static void ChangeSongTime(float songTime) { if (songTime <= 0.0f || songTime >= 1.0) { return; } LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas; ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas; if (logicDatas.GameState == GameState.Playing || logicDatas.GameState == GameState.Pause) { scenesDatas.AudioSource.time = songTime * scenesDatas.AudioSource.clip.length; scenesDatas.VideoPlayer.time = songTime * scenesDatas.VideoPlayer.frameCount / scenesDatas.VideoPlayer.frameRate; SongLyric.ChangeLyric(songTime * scenesDatas.AudioSource.clip.length); } }
/// <summary> /// 播放下一首 /// </summary> internal static void PlayNextSong() { LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas; if (logicDatas.GameState == GameState.StandBy) { SongControl.LoadNextSong(logicDatas.SongsName[0]); } else if (logicDatas.GameState == GameState.Playing || logicDatas.GameState == GameState.Pause) { logicDatas.CurrentSongIndex++; logicDatas.CurrentSongIndex %= logicDatas.SongsName.Length; logicDatas.Index = 0; SongControl.StopSong(); SongControl.ReleaseAudioRelatedResources(); SongControl.LoadNextSong(logicDatas.SongsName[logicDatas.CurrentSongIndex]); } }
/// <summary> /// 刷新资源 /// </summary> internal static void RefreshAssets() { LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas; ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas; if (logicDatas.GameState != GameState.Loading) { return; } if (AssetsControl.IsLoadFinishAssets()) { //此处应统一调用并更新UI AssetsControl.LoadFinish(out AudioClip audioClip, out string textContent); scenesDatas.AudioSource.clip = audioClip; logicDatas.LyricInfo = ParseLyric.ParseLyricFunc(textContent); SongControl.PlayLoadFinishSong(); } }
/// <summary> /// 当歌曲播放完毕时是单曲循环时 /// </summary> private static void OnSingleCycle() { LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas; ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas; scenesDatas.AudioSource.time = 0.0f; scenesDatas.AudioSource.Play(); scenesDatas.VideoPlayer.time = 0.0f; scenesDatas.VideoPlayer.Play(); scenesDatas.SongPlayingTime.text = "00:00"; scenesDatas.SongTimeSlide.value = 0.0f; UILyricControl.ResetLyric(scenesDatas.LyricItems); UILyricControl.InitLyric(scenesDatas.LyricItems, logicDatas.LyricInfo); if (!string.IsNullOrEmpty(scenesDatas.VideoPlayer.url) && scenesDatas.VideoPlayer.isPrepared) { scenesDatas.VideoPlayer.Play(); } logicDatas.Index = 0; }
/// <summary> /// 播放或暂停 /// </summary> internal static void PlayOrPauseSong() { LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas; ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas; if (logicDatas.GameState == GameState.Pause) { logicDatas.GameState = GameState.Playing; SongControl.PlaySong(); } else if (logicDatas.GameState == GameState.StandBy) { logicDatas.GameState = GameState.Playing; SongControl.ChangeSong(0); } else if (logicDatas.GameState == GameState.Playing) { logicDatas.GameState = GameState.Pause; SongControl.PauseSong(); } }
/// <summary> /// 当歌曲播放完毕时是顺序播放时 /// </summary> private static void OnPlayInOrder() { LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas; ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas; logicDatas.CurrentSongIndex++; logicDatas.Index = 0; if (logicDatas.CurrentSongIndex >= logicDatas.SongsName.Length) { scenesDatas.AudioSource.Stop(); UILyricControl.ResetLyric(scenesDatas.LyricItems); if (scenesDatas.VideoPlayer.isPlaying) { scenesDatas.VideoPlayer.Stop(); } logicDatas.CurrentSongIndex = logicDatas.SongsName.Length - 1; } else { SongControl.ReleaseAudioRelatedResources(); SongControl.LoadNextSong(logicDatas.SongsName[logicDatas.CurrentSongIndex]); } }
/// <summary> /// 当歌曲播放完毕时是随机播放时 /// </summary> private static void OnRandomPlay() { LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas; ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas; int index = UnityEngine.Random.Range(0, logicDatas.SongsName.Length); logicDatas.Index = 0; if (index == logicDatas.CurrentSongIndex) { scenesDatas.AudioSource.Play(); if (string.IsNullOrEmpty(scenesDatas.VideoPlayer.url) && scenesDatas.VideoPlayer.isPrepared) { scenesDatas.VideoPlayer.Play(); } UILyricControl.InitLyric(scenesDatas.LyricItems, logicDatas.LyricInfo); } else { logicDatas.CurrentSongIndex = index; SongControl.ReleaseAudioRelatedResources(); SongControl.LoadNextSong(logicDatas.SongsName[logicDatas.CurrentSongIndex]); } }
/// <summary> /// 改变歌词 /// </summary> /// <param name="songtime">歌曲时间</param> internal static void ChangeLyric(float songtime) { LyricInfo lyricInfo = ModelManager.Instance.GetLogicDatas.LyricInfo; int index = -1; for (int i = 0; i < lyricInfo.lyrics.Count; i++) { if (lyricInfo.lyrics[i].lyricTime >= songtime) { index = i; break; } } if (index == -1) { return; } LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas; ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas; logicDatas.Index = index; UILyricControl.ChangeLyric(scenesDatas.LyricItems, logicDatas.Index, logicDatas.LyricInfo); }
/// <summary> /// 监听歌曲歌词 /// </summary> internal static void ListeningSongLyric() { LogicDatas logicDatas = ModelManager.Instance.GetLogicDatas; ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas; if (logicDatas.LyricInfo == null) { return; } //最后一句歌词 if (logicDatas.Index >= logicDatas.LyricInfo.lyrics.Count - 1) { return; } //需播放下一句歌词时 if (Tools.AudioSourceData.GetCurrentSongTime(scenesDatas.AudioSource) >= logicDatas.LyricInfo.lyrics[logicDatas.Index + 1].lyricTime) { //切换当前歌词为index+1 UILyricControl.NextLyric(scenesDatas.LyricItems, logicDatas.Index, logicDatas.LyricInfo); logicDatas.Index++; } }