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