Example #1
0
        public void GenerateBinaryFile(double TimePosition)
        {
            if (TimePosition < 0)
            {
                TimePosition = 0;
            }
            string        temp    = System.Environment.GetEnvironmentVariable("TEMP");
            DirectoryInfo info    = new DirectoryInfo(temp);
            DirectoryInfo baseDir = info.CreateSubdirectory("Chorista\\Instance." + System.Diagnostics.Process.GetCurrentProcess().Id.ToString());

            BinaryFileStruct BFS = new BinaryFileStruct();

            BFS.GlobalVolume = (float)((double)projectObject.GlobalVolume / 100.0);
            BFS.TrackVolumes = new Dictionary <int, float>();
            for (int i = 0; i < projectObject.TrackerList.Count; i++)
            {
                Calculators.VocalTrackCalculator tc = new Calculators.VocalTrackCalculator(SingerDataFinder);
                BFS.VocalTrackStructs.Add(i, tc.CalcTracker(TimePosition, projectObject.TrackerList[i], projectObject.BaseTempo));
                BFS.TrackVolumes.Add(i, (float)projectObject.TrackerList[i].getVolume());
            }

            for (int i = 0; i < projectObject.BackerList.Count; i++)
            {
                BarkerCalculator bc = new BarkerCalculator();
                BFS.BarkerTrackStructs.Add(i, bc.CalcTracker(TimePosition, projectObject.BackerList[i]));
                BFS.TrackVolumes.Add(projectObject.TrackerList.Count + i, (float)projectObject.BackerList[i].getVolume());
            }

            BFS.StartTimePosition = TimePosition;

            using (System.IO.FileStream ms = new System.IO.FileStream(baseDir.FullName + @"\\RendCmd.binary", System.IO.FileMode.Create))
            {
                //序列化操作,把内存中的东西写到硬盘中
                System.Runtime.Serialization.Formatters.Binary.BinaryFormatter fomatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(null, new System.Runtime.Serialization.StreamingContext(System.Runtime.Serialization.StreamingContextStates.File));
                fomatter.Serialize(ms, BFS);
                ms.Flush();
            }
        }
Example #2
0
        static void Main(string[] args)
        {
            tme.Elapsed += tme_Elapsed;
            tme.Enabled  = false;
            Console.WriteLine("CreateNamedPipe:" + System.Diagnostics.Process.GetCurrentProcess().Id);
            int Instance = int.Parse(args[0]);

            if (Instance > 0)
            {
                cmdReciever            = new CommandPipe_Server(System.Diagnostics.Process.GetCurrentProcess().Id);
                cmdReciever.OnRecieve += cmdReciever_OnRecieve;
                client = new CommandPipe_Client(Instance);

                string        temp    = System.Environment.GetEnvironmentVariable("TEMP");
                DirectoryInfo info    = new DirectoryInfo(temp);
                DirectoryInfo baseDir = info.CreateSubdirectory("Chorista\\Instance." + Instance);

                BinaryFileStruct BFS = new BinaryFileStruct();

                CplayerList.Clear();
                using (System.IO.FileStream ms = new System.IO.FileStream(baseDir.FullName + @"\\RendCmd.binary", System.IO.FileMode.Open))
                {
                    //序列化操作,把内存中的东西写到硬盘中
                    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter fomatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(null, new System.Runtime.Serialization.StreamingContext(System.Runtime.Serialization.StreamingContextStates.File));
                    object obj = fomatter.Deserialize(ms);
                    ms.Flush();
                    BFS = (BinaryFileStruct)obj;
                }

                StartTimeMs = (BFS.StartTimePosition * 1000);

                client.SendData_ASync("Status:Buffering");
                _EmptyProgram = false;
                for (int i = 0; i < BFS.VocalTrackStructs.Count; i++)
                {
                    CplayerList.Add(i, new CacheRender());
                    CplayerList[i].RendingStateChange += Program_RendingStateChange;
                    Task.Factory.StartNew((object prm) => {
                        object[] prms         = (object[])prm;
                        IRender cplayer       = (IRender)prms[0];
                        DirectoryInfo TempDir = (DirectoryInfo)prms[1];
                        List <Calculators.NoteListCalculator.NotePreRender> NList = (List <Calculators.NoteListCalculator.NotePreRender>)prms[2];
                        cplayer.StartRending(TempDir, NList);
                    }, new object[] { CplayerList[i], baseDir, BFS.VocalTrackStructs[i] });
                }

                for (int j = 0; j < BFS.BarkerTrackStructs.Count; j++)
                {
                    int i = BFS.VocalTrackStructs.Count + j;
                    CplayerList.Add(i, new BgmRender());
                    CplayerList[i].RendingStateChange += (object sender) =>
                    {
                        IRender cr  = (IRender)sender;
                        int     Key = -1;
                        foreach (KeyValuePair <int, IRender> kv in CplayerList)
                        {
                            if (kv.Value == cr)
                            {
                                Key = kv.Key;
                                break;
                            }
                        }
                        if (cmder != null)
                        {
                            cmder.SetupRendingStatus(Key, cr.getIsRending());
                        }
                    };
                    Task.Factory.StartNew((object prm) =>
                    {
                        object[] prms         = (object[])prm;
                        IRender cplayer       = (IRender)prms[0];
                        DirectoryInfo TempDir = (DirectoryInfo)prms[1];
                        List <VocalUtau.Calculators.BarkerCalculator.BgmPreRender> NList = (List <VocalUtau.Calculators.BarkerCalculator.BgmPreRender>)prms[2];
                        cplayer.StartRending(TempDir, NList);
                    }, new object[] { CplayerList[i], baseDir, BFS.BarkerTrackStructs[j] });
                }

                cmder = new PlayCommander(CplayerList);
                cmder.SetTrackerVolumes(BFS.TrackVolumes);
                cmder.SetGlobalVolume(BFS.GlobalVolume);
                cmder.WaitRendingStart();
                cmder.PlayFinished      += Program_PlayFinished;
                cmder.PlayProcessUpdate += cmder_PlayProcessUpdate;
                cmder.PlayPlaying       += cmder_PlayPlaying;
                cmder.PlayPaused        += cmder_PlayPaused;
                ProcessStr = "0/0/False";
                //如果为空项目,则渲染未开始即结束
                if (_EmptyProgram)
                {
                    cmder.StopAll();
                }
                else
                {
                    cmder.PlayAll();
                }
                _EmptyProgram = false;
                Console.ReadLine();
            }
        }