public CriAtomClipWaveformPreviewer(CriAtomClip criAtomClip) { if (!CriAtomTimelinePreviewer.IsInitialized || string.IsNullOrEmpty(criAtomClip.cueSheet)) { return; } var acb = CriAtomTimelinePreviewer.Instance.GetAcb(criAtomClip.cueSheet); if (acb == null) { Debug.LogError("[CRIWARE][Timeline] faild to load acb object."); return; } this.material = new Material(Shader.Find(atomClipWaveformRenderShader)); decodeTask = Task.Run(() => { this.atomClipWaveformInfo = new CriAtomClipWaveformInfo(); if (!acb.GetWaveFormInfo(criAtomClip.cueName, out this.atomClipWaveformInfo.waveformInfo)) { /* without waveform */ return; } this.atomClipWaveformInfo.lpcmBufferByInterleave = new Int16[this.atomClipWaveformInfo.waveformInfo.numSamples * this.atomClipWaveformInfo.waveformInfo.numChannels]; if (!this.LoadWaveform(acb.nativeHandle, criAtomClip.cueName, ref this.atomClipWaveformInfo.lpcmBufferByInterleave)) { this.atomClipWaveformInfo.lpcmBufferByInterleave = null; return; } this.atomClipWaveformInfo.waveDurationSecond = this.atomClipWaveformInfo.waveformInfo.numSamples / (double)this.atomClipWaveformInfo.waveformInfo.samplingRate; }); }
public override void OnCreate(TimelineClip clip, TrackAsset track, TimelineClip clonedFrom) { base.OnCreate(clip, track, clonedFrom); #if CRI_TIMELINE_ATOM_VERBOSE_DEBUG Debug.Log("[CRIWARE][Timeline] OnCreate"); #endif atomClipPreviewDirectory.Clear(); CriAtomClip atomClip = clip.asset as CriAtomClip; atomClipPreviewDirectory.Add(atomClip, new CriAtomClipWaveformPreviewer(atomClip)); }
public override void OnClipChanged(TimelineClip clip) { base.OnClipChanged(clip); #if CRI_TIMELINE_ATOM_VERBOSE_DEBUG Debug.Log("[CRIWARE][Timeline] OnClipChanged"); #endif CriAtomClip atomClip = clip.asset as CriAtomClip; if (atomClipPreviewDirectory.ContainsKey(atomClip)) { return; } atomClipPreviewDirectory.Add(atomClip, new CriAtomClipWaveformPreviewer(atomClip)); }
public override void DrawBackground(TimelineClip clip, ClipBackgroundRegion region) { base.DrawBackground(clip, region); #if CRI_TIMELINE_ATOM_VERBOSE_DEBUG Debug.Log("[CRIWARE][Timeline] DrawBackground"); Debug.Log("region.startTime : " + region.startTime.ToString() + "region.endTime : " + region.endTime.ToString()); #endif CriAtomClip atomClip = clip.asset as CriAtomClip; CriAtomClipWaveformPreviewer atomClipPreviewer; if (!atomClipPreviewDirectory.TryGetValue(atomClip, out atomClipPreviewer)) { #if CRI_TIMELINE_ATOM_VERBOSE_DEBUG Debug.LogError("[CRIWARE][Timeline] not contains key : " + clip.displayName); #endif return; } if (!atomClipPreviewer.HasDecodeTask()) { atomClipPreviewDirectory.Remove(atomClip); atomClipPreviewDirectory.Add(atomClip, new CriAtomClipWaveformPreviewer(atomClip)); } if (!atomClipPreviewer.HasPreviewData()) { /* While decoding or decode error. Skip renderring. */ return; } atomClipPreviewer.IsLooping = atomClip.loopWithinClip; atomClipPreviewer.IsMuted = atomClip.muted; CriAtomTrack atomTrack = clip.parentTrack as CriAtomTrack; if (atomTrack.m_IsRenderMono) { atomClipPreviewer.ChannelMode = CriAtomClipWaveformPreviewer.RenderChannelMode.Mono; } else { atomClipPreviewer.ChannelMode = CriAtomClipWaveformPreviewer.RenderChannelMode.All; } atomClipPreviewer.RenderMaterial(region); }
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++; } }