コード例 #1
0
ファイル: RenderEngine.cs プロジェクト: zhouweitong3/OpenUtau
        async Task <SequencingSampleProvider> RenderPartAsync(UVoicePart part, UProject project, string cacheDir)
        {
            var singer = project.Tracks[part.TrackNo].Singer;

            if (singer == null || !singer.Loaded)
            {
                return(null);
            }
            var tasks    = new List <Task <RenderItem> >();
            var progress = new Progress(part.Notes.Sum(note => note.Phonemes.Count));

            progress.Clear();
            foreach (var note in part.Notes)
            {
                foreach (var phoneme in note.Phonemes)
                {
                    if (string.IsNullOrEmpty(phoneme.Oto.File))
                    {
                        Log.Warning($"Cannot find phoneme in note {note.Lyric}");
                        continue;
                    }
                    var item = new RenderItem(phoneme, part, project);
                    item.progress = progress;
                    tasks.Add(Task <RenderItem> .Factory.StartNew(ResamplePhonemeAsync, item, cancellationTokenSource.Token));
                }
            }
            await Task.WhenAll(tasks.ToArray());

            progress.Clear();
            return(new SequencingSampleProvider(tasks.Select(task => new RenderItemSampleProvider(task.Result))));
        }
コード例 #2
0
 public void OnSelfClose(Mobile m)
 {
     if (Progress != null)
     {
         Progress.Clear();
     }
 }
コード例 #3
0
        public void Serialize()
        {
            //CSharpCodeProvider.cre
            CSharpCodeProvider prov = new CSharpCodeProvider(new Dictionary <string, string>()
            {
                { "CompilerVersion", "v4.0" }
            });

            CompilerParameters cp = new CompilerParameters(new []
            {
                "mscorlib.dll", "System.dll", "System.IO.dll", "System.xml.dll", "System.Xml.Serializer.dll", "System.Runtime.dll",
                "System.ObjectModel.dll", "System.Collections.dll",
                "FileExplorer3.dll", "FileExplorer3.IO.dll", "FileExplorer3.WPF.dll",
                "Caliburn.Micro.dll", "Caliburn.Micro.Platform.dll"
            });

            cp.GenerateExecutable = false;
            cp.GenerateInMemory   = true;

            Progress.Clear();

            CompilerResults cr = prov.CompileAssemblyFromSource(cp, Script);

            if (cr.Errors.HasErrors)
            {
                Progress.Add("Error when serializing:");
                cr.Errors.Cast <CompilerError>().ToList().ForEach(err =>
                                                                  Progress.Add(String.Format("{0} at line {1} column {2} ", err.ErrorText, err.Line, err.Column)));
            }
        }
コード例 #4
0
ファイル: RenderEngine.cs プロジェクト: SeleDreams/OpenUtau
        public Tuple <MasterAdapter, List <Fader>, CancellationTokenSource, Task> RenderProject(int startTick)
        {
            var source = new CancellationTokenSource();
            var items  = new List <RenderItem>();
            var faders = new List <Fader>();

            foreach (var track in project.tracks)
            {
                var trackItems = PrepareTrack(track, project, startTick).ToArray();
                var sources    = trackItems.Select(item => {
                    var waveSource  = new WaveSource(item.PosMs, item.DurMs, item.Envelope, item.SkipOver);
                    item.OnComplete = data => waveSource.SetWaveData(data);
                    return(waveSource);
                }).ToList();
                sources.AddRange(project.parts
                                 .Where(part => part is UWavePart && part.trackNo == track.TrackNo)
                                 .Select(part => part as UWavePart)
                                 .Select(part => {
                    var waveSource = new WaveSource(
                        project.TickToMillisecond(part.position),
                        project.TickToMillisecond(part.Duration),
                        null,
                        part.skipMs);
                    if (part.Samples != null)
                    {
                        waveSource.SetSamples(part.Samples);
                    }
                    return(waveSource);
                }));
                var trackMix = new WaveMix(sources);
                items.AddRange(trackItems);
                var fader = new Fader(trackMix);
                fader.Scale = PlaybackManager.DecibelToVolume(track.Volume);
                faders.Add(fader);
            }
            items = items.OrderBy(item => item.PosMs).ToList();
            int threads  = Util.Preferences.Default.PrerenderThreads;
            var progress = new Progress(items.Count);
            var task     = Task.Run(() => {
                var progress = new Progress(items.Count);
                Parallel.ForEach(source: items, parallelOptions: new ParallelOptions()
                {
                    MaxDegreeOfParallelism = threads
                }, body: item => {
                    if (source.Token.IsCancellationRequested)
                    {
                        return;
                    }
                    item.progress = progress;
                    Resample(item);
                });
                ReleaseSourceTemp();
                progress.Clear();
            });
            var master = new MasterAdapter(new WaveMix(faders));

            master.SetPosition((int)(project.TickToMillisecond(startTick) * 44100 / 1000));
            return(Tuple.Create(master, faders, source, task));
        }
コード例 #5
0
 public void Update(IEnumerable <LevelProgressDto> collection)
 {
     Progress.Clear();
     foreach (var model in collection)
     {
         Progress.Add(model);
     }
 }
コード例 #6
0
 public void Restart()
 {
     ProgressHelper.STATUS status = Progress.GetStatus();
     if (status == ProgressHelper.STATUS.CANCLE || status == ProgressHelper.STATUS.ERROR)
     {
         Progress.Clear();
         Start();
     }
 }
コード例 #7
0
ファイル: EtMGame.cs プロジェクト: heyx3/EscapeTheMine
        /// <summary>
        /// Generates a new world using the current settings,
        ///     then starts the first level.
        /// </summary>
        public void GenerateWorld()
        {
            if (IsInGame)
            {
                StopCoroutine(mapGameCoroutine);
            }
            mapGameCoroutine = null;

            Map.Clear();
            Progress.Clear();

            GenerateMap(true);

            if (OnStart != null)
            {
                OnStart();
            }
        }
コード例 #8
0
ファイル: RenderEngine.cs プロジェクト: SeleDreams/OpenUtau
        public List <WaveMix> RenderTracks()
        {
            List <WaveMix> result = new List <WaveMix>();

            foreach (var track in project.tracks)
            {
                var items    = PrepareTrack(track, project, 0);
                var progress = new Progress(items.Count());
                var mix      = new WaveMix(items.Select(item => {
                    var waveSource  = new WaveSource(item.PosMs, item.DurMs, item.Envelope, item.SkipOver);
                    item.progress   = progress;
                    item.OnComplete = data => waveSource.SetWaveData(data);
                    Resample(item);
                    return(waveSource);
                }));
                progress.Clear();
                result.Add(mix);
            }
            return(result);
        }
コード例 #9
0
ファイル: EtMGame.cs プロジェクト: heyx3/EscapeTheMine
        /// <summary>
        /// Quits the current world without saving and goes back to the main menu.
        /// </summary>
        public void QuitWorld()
        {
            if (IsInGame)
            {
                StopCoroutine(mapGameCoroutine);
                mapGameCoroutine = null;
            }

            if (OnEnd != null)
            {
                OnEnd();
            }

            Map.Clear();

            Progress.Clear();
            Settings = new WorldSettings();

            MenuController.Instance.Activate(MenuController.Instance.Menu_Main);
        }
コード例 #10
0
ファイル: RenderEngine.cs プロジェクト: SeleDreams/OpenUtau
        public CancellationTokenSource PreRenderProject()
        {
            int threads = Util.Preferences.Default.PrerenderThreads;
            var source  = new CancellationTokenSource();

            Task.Run(() => {
                try {
                    Thread.Sleep(200);
                    if (source.Token.IsCancellationRequested)
                    {
                        return;
                    }
                    RenderItem[] items;
                    lock (project) {
                        items = PrepareProject(project, startTick)
                                .OrderBy(item => item.PosMs)
                                .ToArray();
                    }
                    var progress = new Progress(items.Length);
                    Parallel.ForEach(source: items, parallelOptions: new ParallelOptions()
                    {
                        MaxDegreeOfParallelism = threads
                    }, body: item => {
                        if (source.Token.IsCancellationRequested)
                        {
                            return;
                        }
                        item.progress = progress;
                        Resample(item);
                    });
                    ReleaseSourceTemp();
                    progress.Clear();
                } catch (Exception e) {
                    if (!source.IsCancellationRequested)
                    {
                        Log.Error(e, "Failed to pre-render.");
                    }
                }
            });
            return(source);
        }
コード例 #11
0
 void IGlobalListener.ClearProgress()
 {
     Progress.Clear();
 }
コード例 #12
0
 public void Reset()
 {
     Progress.Clear();
 }