/// <summary> /// 入队一个音乐处理消息 /// </summary> /// <param name="msg">消息对象</param> public static void EnqueueMessage(MusicianMessage msg) { lock (MusicianRouterHandler.syncObject) { MusicianRouterHandler.messageQueue.Enqueue(msg); } }
/// <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; }