Skip to content

Commit 6ec90ff

Browse files
committed
release: v0.12.2
1 parent 8c316e7 commit 6ec90ff

2 files changed

Lines changed: 38 additions & 17 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
66

77
## [Unreleased]
88

9+
## [0.12.2] - 2026-04-04
10+
911
### Changed
1012
- Improved internal stability and maintenance in the waveform, slice, and signal-chain editor code
1113

14+
### Fixed
15+
- Reopened projects now keep sample speed and pitch consistent when the project sample rate differs from the sample file
16+
1217
## [0.12.1] - 2026-04-01
1318

1419
### Changed

src/PluginProcessor.cpp

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2125,28 +2125,44 @@ void IntersectProcessor::processBlock (juce::AudioBuffer<float>& buffer,
21252125
{
21262126
std::unique_ptr<SampleData::DecodedSample> decoded (rawDecoded);
21272127
const int currentToken = latestLoadToken.load (std::memory_order_acquire);
2128+
const auto currentLoadKind = (LoadKind) latestLoadKind.load (std::memory_order_acquire);
21282129
const bool isStateRestoreLoad = pendingStateRestoreToken.load (std::memory_order_acquire) == currentToken;
2129-
clearVoicesBeforeSampleSwap();
2130-
sampleData.applyDecodedSample (std::move (decoded));
2131-
sampleMissing.store (false);
2132-
clearMissingFileInfo();
2133-
sampleAvailability.store ((int) SampleStateLoaded, std::memory_order_relaxed);
2134-
2135-
if (! isStateRestoreLoad
2136-
&& latestLoadKind.load (std::memory_order_acquire) == (int) LoadKindReplace)
2137-
sliceManager.clearAll();
2138-
else
2130+
2131+
const bool needsSampleRateRetry = decoded->filePath.isNotEmpty()
2132+
&& currentSampleRate > 0.0
2133+
&& decoded->decodedSampleRate > 0.0
2134+
&& std::abs (decoded->decodedSampleRate - currentSampleRate) > 0.01;
2135+
2136+
if (needsSampleRateRetry)
21392137
{
2140-
applyPendingSliceTimelineRemap();
2141-
clampSlicesToSampleBounds();
2142-
sliceManager.rebuildMidiMap();
2138+
const int retryToken = requestSampleLoad (juce::File (decoded->filePath), currentLoadKind);
2139+
if (isStateRestoreLoad)
2140+
pendingStateRestoreToken.store (retryToken, std::memory_order_release);
21432141
}
2142+
else
2143+
{
2144+
clearVoicesBeforeSampleSwap();
2145+
sampleData.applyDecodedSample (std::move (decoded));
2146+
sampleMissing.store (false);
2147+
clearMissingFileInfo();
2148+
sampleAvailability.store ((int) SampleStateLoaded, std::memory_order_relaxed);
2149+
2150+
if (! isStateRestoreLoad
2151+
&& currentLoadKind == LoadKindReplace)
2152+
sliceManager.clearAll();
2153+
else
2154+
{
2155+
applyPendingSliceTimelineRemap();
2156+
clampSlicesToSampleBounds();
2157+
sliceManager.rebuildMidiMap();
2158+
}
21442159

2145-
if (isStateRestoreLoad)
2146-
pendingStateRestoreToken.store (0, std::memory_order_release);
2160+
if (isStateRestoreLoad)
2161+
pendingStateRestoreToken.store (0, std::memory_order_release);
21472162

2148-
loadStateChanged = true;
2149-
uiSnapshotDirty.store (true, std::memory_order_release);
2163+
loadStateChanged = true;
2164+
uiSnapshotDirty.store (true, std::memory_order_release);
2165+
}
21502166
}
21512167
}
21522168

0 commit comments

Comments
 (0)