diff --git a/Source/Editor/Viewport/Previews/AudioClipPreview.cs b/Source/Editor/Viewport/Previews/AudioClipPreview.cs index 582697498..ef3d7fe75 100644 --- a/Source/Editor/Viewport/Previews/AudioClipPreview.cs +++ b/Source/Editor/Viewport/Previews/AudioClipPreview.cs @@ -37,6 +37,7 @@ namespace FlaxEditor.Viewport.Previews private readonly object _locker = new object(); private AudioClip _asset; + private int _pcmSequence = 0; private float[] _pcmData; private AudioDataInfo _pcmInfo; @@ -118,6 +119,22 @@ namespace FlaxEditor.Viewport.Previews /// public static readonly float UnitsPerSecond = 100.0f; + /// + /// Invalidates the cached audio PCM data and fetches it again from the asset. + /// + public void RefreshPreview() + { + lock (_locker) + { + // Release any cached data + _pcmData = null; + + // Invalidate any in-flight data download to reject cached data due to refresh + if (_pcmSequence != 0) + _pcmSequence++; + } + } + /// public override void Draw() { @@ -234,7 +251,13 @@ namespace FlaxEditor.Viewport.Previews /// private void DownloadData() { - var asset = _asset; + AudioClip asset; + int sequence; + lock (_locker) + { + asset = _asset; + sequence = _pcmSequence; + } if (!asset) return; @@ -259,8 +282,9 @@ namespace FlaxEditor.Viewport.Previews lock (_locker) { // If asset has been modified during data fetching, ignore it - if (_asset == asset) + if (_asset == asset && _pcmSequence == sequence) { + _pcmSequence++; _pcmData = data; _pcmInfo = dataInfo; } diff --git a/Source/Editor/Windows/Assets/AudioClipWindow.cs b/Source/Editor/Windows/Assets/AudioClipWindow.cs index 357a1cae1..a775e48f4 100644 --- a/Source/Editor/Windows/Assets/AudioClipWindow.cs +++ b/Source/Editor/Windows/Assets/AudioClipWindow.cs @@ -307,6 +307,7 @@ namespace FlaxEditor.Windows.Assets _propertiesEditor.BuildLayout(); if (_previewSource) _previewSource.Stop(); + _preview.RefreshPreview(); // Setup ClearEditedFlag();