Exemplo n.º 1
0
 /// <summary>
 /// 入队一个音乐处理消息
 /// </summary>
 /// <param name="msg">消息对象</param>
 public static void EnqueueMessage(MusicianMessage msg)
 {
     lock (MusicianRouterHandler.syncObject)
     {
         MusicianRouterHandler.messageQueue.Enqueue(msg);
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// 音乐控制线程的入口
        /// </summary>
        private static void MusicianHandler()
        {
            var musician = Musician.GetInstance();

            while (true)
            {
                if (MusicianRouterHandler.TerminalFlag)
                {
                    MusicianRouterHandler.IsInitialized = false;
                    break;
                }
                MusicianMessage mmsg = null;
                lock (MusicianRouterHandler.syncObject)
                {
                    if (MusicianRouterHandler.messageQueue.Any())
                    {
                        mmsg = MusicianRouterHandler.messageQueue.Dequeue();
                    }
                }
                if (mmsg == null)
                {
                    Thread.Sleep(50);
                    continue;
                }
                switch (mmsg.Type)
                {
                case MusicianOperation.PlayBGM:
                    musician.PlayBGM(
                        mmsg.Args["resourceName"] as string,
                        mmsg.Args["ms"] as MemoryStream,
                        (float)mmsg.Args["vol"]
                        );
                    break;

                case MusicianOperation.PauseBGM:
                    musician.PauseBGM();
                    break;

                case MusicianOperation.ResumeBGM:
                    musician.ResumeBGM();
                    break;

                case MusicianOperation.StopAndReleaseBGM:
                    musician.StopAndReleaseBGM();
                    break;

                case MusicianOperation.PlayBGS:
                    musician.PlayBGS(
                        mmsg.Args["resourceName"] as string,
                        mmsg.Args["ms"] as MemoryStream,
                        (float)mmsg.Args["vol"],
                        (int)mmsg.Args["track"]
                        );
                    break;

                case MusicianOperation.StopBGS:
                    musician.StopBGS();
                    break;

                case MusicianOperation.SetBGMVolume:
                    musician.SetBGMVolume(
                        (float)mmsg.Args["vol"]
                        );
                    break;

                case MusicianOperation.SetBGSVolume:
                    musician.SetBGSVolume(
                        (float)mmsg.Args["vol"],
                        (int)mmsg.Args["track"]
                        );
                    break;

                case MusicianOperation.PlaySE:
                    musician.PlaySE(
                        mmsg.Args["ms"] as MemoryStream,
                        (float)mmsg.Args["vol"]
                        );
                    break;

                case MusicianOperation.PlayVocal:
                    musician.PlayVocal(
                        mmsg.Args["ms"] as MemoryStream,
                        (float)mmsg.Args["vol"]
                        );
                    break;

                case MusicianOperation.FadeBgm:
                    musician.FadeBgm(
                        (float)mmsg.Args["vol"],
                        (int)mmsg.Args["ms"]
                        );
                    break;

                case MusicianOperation.StopAndReleaseVocal:
                    musician.StopAndReleaseVocal();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            MusicianRouterHandler.IsCollapsed = true;
        }