protected override void OnUpdate(float time, float previousTime) { if (_PlayOver) { return; } if (audioClip == null) { return; } if (source != null && !_PlayLoop) { float currentTimeLength = time - clipOffset; if (currentTimeLength > audioClip.length) { _PlayOver = true; return; } var weight = Easing.Ease(EaseType.QuadraticInOut, 0, 1, GetClipWeight(time)); var totalVolume = weight * volume * track.weight; AudioSampler.Sample(source, audioClip, currentTimeLength, previousTime - clipOffset, totalVolume, track.ignoreTimeScale); source.panStereo = Mathf.Clamp01(stereoPan + track.stereoPan); source.loop = _PlayLoop; if (!string.IsNullOrEmpty(subtitlesText)) { var lerpColor = subtitlesColor; lerpColor.a = weight; DirectorGUI.UpdateSubtitles(string.Format("{0}{1}", parent is ActorAudioTrack? (actor.name + ": ") : "", subtitlesText), lerpColor); } } }
protected override void OnUpdate(float time, float previousTime) { if (source != null) { var weight = Easing.Ease(EaseType.QuadraticInOut, 0, 1, GetClipWeight(time)); var settings = track.sampleSettings; settings.volume *= weight * volume; settings.pitch *= pitch; settings.pan += stereoPan; AudioSampler.Sample(source, audioClip, time - clipOffset, previousTime - clipOffset, settings); if (AutoJawSync != null) { AutoJawSync.SyncUpdate(); } if (!string.IsNullOrEmpty(subtitlesText)) { var lerpColor = subtitlesColor; lerpColor.a = weight; DirectorGUI.UpdateSubtitles(string.Format("{0}{1}", parent is ActorAudioTrack ? (actor.name.Replace("(Clone)", "") + ": ") : "", subtitlesText), lerpColor); } } }
public void Update() { if (AudioSampler.Instance.AudioPlaybackState == AudioPlaybackState.Playing) { double[] _dAudioSamples = AudioSampler.Instance.GetSamples(); if (_detector != null) { _detector.UpdatePLP(ref _dAudioSamples, AudioSampler.Instance.ChannelCount, AudioSampler.Instance.ClipFrequency); } _fftRawBins = AudioSampler.Instance.GetFFTOutputBins(ref _dAudioSamples); System.Array.Clear(_fftSegregated, 0, _fftSegregated.Length); AudioSampler.BinFFTOutput(ref _fftRawBins, ref _fftSegregated, 2, AudioSampler.Instance.ClipFrequency, _frequenciesToMonitor); AudioSampler.NormalizeFFTOutput(ref _fftSegregated, AudioSampler.Instance.ClipFrequency); for (int i = 0; i < _fftSegregated.Length; ++i) { float barCount = (float)_fftSegregated[i]; if (barCount > _barHeights [i]) { _barHeights [i] = barCount; } if (_barHeights [i] > 0) { _barHeights [i] -= Mathf.Min(_decayRate, _barHeights[i]); } } } }
public void Awake() { AudioSampler.InstantiateSampler(AudioSamplerType.Local); _commonRect = new Rect(); _fftSegregated = new double[_frequenciesToMonitor.Length]; _barHeights = new float[_fftSegregated.Length]; }
public static void RegenerateAudioSampleMask() { if (Selection.objects != null && Selection.objects.Any(obj => (obj is AudioSampleMask))) { var masks = Selection.objects .Where(obj => obj is AudioSampleMask) .Select(mask => (AudioSampleMask)mask); foreach (var mask in masks) { if (mask != null && mask.clip != null) { mask.values = AudioSampler.LoadSamples(mask.clip, SAMPLE_STEP_SIZE); } } } }
public static void CreateAudioSampleMask() { if (Selection.objects != null && Selection.objects.Any(obj => (obj is AudioClip))) { var clips = Selection.objects .Where(obj => obj is AudioClip) .Select(clip => (AudioClip)clip); foreach (var clip in clips) { AudioSampleMask newMask = ScriptableObject.CreateInstance <AudioSampleMask>(); newMask.clip = clip; newMask.values = AudioSampler.LoadSamples(clip, SAMPLE_STEP_SIZE); string path = AssetDatabase.GetAssetPath(clip).Split('.')[0]; AssetDatabase.CreateAsset(newMask, path + "_Mask.asset"); } } }