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(); } } }
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++; } }