示例#1
0
        /// <summary>
        /// 停止歌曲
        /// </summary>
        private static void StopSong()
        {
            LogicDatas  logicDatas  = ModelManager.Instance.GetLogicDatas;
            ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas;

            scenesDatas.AudioSource.Stop();
            scenesDatas.VideoPlayer.Stop();
        }
示例#2
0
        /// <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]);
        }
示例#3
0
        /// <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;
        }
示例#4
0
        /// <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);
            }
        }
示例#5
0
        /// <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);
            }
        }
示例#6
0
        /// <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]);
            }
        }
示例#7
0
        /// <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();
            }
        }
示例#8
0
        /// <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;
        }
示例#9
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();
            }
        }
示例#10
0
        /// <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]);
            }
        }
示例#11
0
        /// <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]);
            }
        }
示例#12
0
        /// <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);
        }
示例#13
0
        /// <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++;
            }
        }