feat: merge temp cleanup on close + v1.4 changelog + README (Phase 2)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-02 16:21:10 +02:00
co-authored by Claude Opus 4.8
parent 3922fc5174
commit 14ec29dbbe
2 changed files with 24 additions and 1 deletions
+7
View File
@@ -41,6 +41,13 @@ All clips are exactly 8 seconds — the standard length for foley sound datasets
- **Waveform preview** — a read-only strip of the current area (↻ to refresh; decode length-capped so long areas don't stall)
- **Audition** — Play/Stop the current area with the edits applied
### Audio merge (crossfade)
- **Merge pane** — assemble multiple clips into one, crossfading every join (ffmpeg `acrossfade`)
- **Add clips** — the current audio area (with its edits) or audio files from disk; reorder or remove them
- **Crossfade length** — one global crossfade applied at each join (0 = butt-join); clips shorter than the crossfade are flagged before rendering
- **Preview / Save** — audition the merged result, or render and save-as (WAV/MP3/FLAC/…)
### Audio scanning
- **Embedding models** — WAV2VEC2 (base/large), HuBERT (base/large/xlarge), BEATs
+17 -1
View File
@@ -5031,9 +5031,17 @@ class MainWindow(QMainWindow):
# ── Changelog ────────────────────────────────────────────
APP_VERSION = "1.3"
APP_VERSION = "1.4"
_SPLIT_HEADER_H = 22 # deck split-column header height (keep both deck spots in sync)
CHANGELOG: list[tuple[str, list[str]]] = [
("1.4", [
"<b>Merge (crossfade)</b> — a new <b>Merge</b> pane in the Audio tab "
"assembles multiple clips into one, crossfading every join. Add the "
"current audio area (with its edits) or files from disk, reorder or "
"remove them, set the crossfade length, then <b>Preview</b> to "
"audition or <b>Merge &amp; Save</b> to render. Clips shorter than "
"the crossfade are flagged before rendering.",
]),
("1.3", [
"<b>Audio workspace tab</b> — the <b>Scan</b> control-deck tab is "
"now <b>Audio</b>, a <code>QToolBox</code> with two panes. "
@@ -8646,6 +8654,14 @@ class MainWindow(QMainWindow):
def closeEvent(self, event):
_log("Shutting down…")
# Stop any running audition and clean up merge temp WAVs.
self._stop_audition()
for _t in list(self._merge_temps):
try:
os.remove(_t)
except OSError:
pass
self._merge_temps.clear()
# Save file-list tabs for resume (per-profile).
self._save_playlist_tabs()
# Cancel background workers to prevent callbacks into dead objects.