public void PreviewPlay(Guid trackId, bool instantStop, CriAtomClipPlayConfig config)
        {
            this.IsClipPlaying = true;

            if (config.cueSheetName != m_lastCueSheetName)
            {
                m_acb = CriAtomTimelinePreviewer.Instance.GetAcb(config.cueSheetName);
            }
            if (m_acb != null)
            {
                CriAtomTimelinePreviewer.Instance.SetCue(trackId, m_acb, config.cueName);
                this.CueLength     = GetCueLengthSec(m_acb, config.cueName);
                m_lastCueSheetName = config.cueSheetName;

                if (this.playback.status != CriAtomExPlayback.Status.Removed)
                {
                    this.playback.Stop();
                }

                if (this.CueLength > 0)
                {
                    CriAtomTimelinePreviewer.Instance.SetStartTime(trackId, config.startTimeMs);
                    CriAtomTimelinePreviewer.Instance.SetLoop(trackId, config.loop);
                    this.playback = CriAtomTimelinePreviewer.Instance.Play(trackId);
                    if (instantStop)
                    {
                        WaitAndStop();
                    }
                }
            }
        }
        public void Play(CriAtomSource atomSource, CriAtomClipPlayConfig config)
        {
            this.IsClipPlaying = true;

            if (atomSource == null)
            {
                return;
            }

            if (config.cueSheetName != m_lastCueSheetName)
            {
                m_acb = CriAtom.GetAcb(config.cueSheetName);
            }
            if (m_acb != null)
            {
                atomSource.player.SetCue(m_acb, config.cueName);
                this.CueLength     = GetCueLengthSec(m_acb, config.cueName);
                m_lastCueSheetName = config.cueSheetName;

                if (this.playback.status != CriAtomExPlayback.Status.Removed)
                {
                    this.playback.Stop();
                }

                if (this.CueLength > 0)
                {
                    atomSource.player.SetStartTime(config.startTimeMs);
                    atomSource.player.Loop(config.loop);
                    this.playback = atomSource.player.Start();
                }
            }
        }
Example #3
0
        public override void ProcessFrame(Playable playable, FrameData info, object playerData)
        {
            if (playerData == null || m_Director.time == m_lastDirectorTime)
            {
                return;
            }

            bool wrapped = false;

            if (m_Director.state == PlayState.Playing && m_Director.time < m_lastDirectorTime)
            {
                wrapped = true;
            }
            m_lastDirectorTime = m_Director.time;

            int inputPort = 0;

            foreach (var clip in m_Clips)
            {
                ScriptPlayable <CriAtomBehaviour> inputPlayable = (ScriptPlayable <CriAtomBehaviour>)playable.GetInput(inputPort);
                CriAtomBehaviour clipBehaviour = inputPlayable.GetBehaviour();
                CriAtomClip      criAtomClip   = clip.asset as CriAtomClip;
                float            inputWeight   = criAtomClip.ignoreBlend ? 1f : playable.GetInputWeight(inputPort);

                if (clipBehaviour != null)
                {
                    if (m_StopOnWrapping && wrapped)
                    {
                        if (clipBehaviour.IsClipPlaying)
                        {
                            clipBehaviour.Stop(criAtomClip.stopWithoutRelease);
                        }
                    }

                    if (m_Director.time >= clip.end ||
                        m_Director.time <= clip.start)
                    {
                        if (clipBehaviour.IsClipPlaying)
                        {
                            clipBehaviour.Stop(criAtomClip.stopWithoutRelease);
                        }
                    }
                    else if (criAtomClip.muted == false)
                    {
                        long seekTimeMs       = (long)((m_Director.time - clip.start) * 1000.0);
                        bool isDirectorPaused = (m_Director.state == PlayState.Paused);

                        var playConfig = new CriAtomClipPlayConfig(
                            criAtomClip.cueSheet,
                            criAtomClip.cueName,
                            seekTimeMs,
                            clip.timeScale,
                            criAtomClip.loopWithinClip
                            );

                        if (clipBehaviour.IsClipPlaying == false)                           /* Entering clip for the first time */
                        {
                            if (IsEditor == false)
                            {
                                clipBehaviour.Play(m_Bind, playConfig);
                            }
                            else
                            {
                                clipBehaviour.PreviewPlay(m_Guid, isDirectorPaused, playConfig);
                                m_lastScrubTime = DateTime.Now;
                            }
                            criAtomClip.SetClipDuration(clipBehaviour.CueLength);
                        }
                        else
                        {
                            var now = DateTime.Now;
                            if (IsEditor == true && isDirectorPaused &&
                                now - m_lastScrubTime > new TimeSpan(0, 0, 0, 0, cScratchTimeIntervalMs))                                   /* Scrubing the track */
                            {
                                clipBehaviour.Stop(true);
                                clipBehaviour.PreviewPlay(m_Guid, isDirectorPaused, playConfig);
                                m_lastScrubTime = now;
                            }
                        }

                        if (IsEditor == true)
                        {
                            CriAtomTimelinePreviewer.Instance.SetVolume(m_Guid, clipBehaviour.volume * inputWeight);
                            CriAtomTimelinePreviewer.Instance.SetPitch(m_Guid, clipBehaviour.pitch);
                            if (string.IsNullOrEmpty(m_AisacControls) == false)
                            {
                                CriAtomTimelinePreviewer.Instance.SetAISAC(m_Guid, m_AisacControls, clipBehaviour.AISACValue);
                            }
                            CriAtomTimelinePreviewer.Instance.PlayerUpdateParameter(m_Guid, clipBehaviour.playback);
                        }
                        else
                        {
                            m_Bind.player.SetVolume(clipBehaviour.volume * inputWeight);
                            m_Bind.player.SetPitch(clipBehaviour.pitch);
                            if (string.IsNullOrEmpty(m_AisacControls) == false)
                            {
                                m_Bind.player.SetAisacControl(m_AisacControls, clipBehaviour.AISACValue);
                            }
                            m_Bind.player.Update(clipBehaviour.playback);
                        }
                    }
                }

                inputPort++;
            }
        }