Skip to content

Freeze: Fixed group-frozen tracks going silent when not rendered to any output device - #438

Merged
drowaudio merged 2 commits into
developfrom
bugfix/frozen_track_silent_playback
Sep 23, 2026
Merged

drowaudio merged 2 commits into
developfrom
bugfix/frozen_track_silent_playback

Conversation

@drowaudio

Copy link
Copy Markdown
Contributor

Summary

Group-frozen tracks could go silent with no error. Two fixes:

  1. TrackOutput::outputsToDevice now matches a track whose output is stored as a device ID. It resolves the ID and compares the device's name.
  2. Edit::updateFrozenTracks now unfreezes any group-frozen track that didn't make it into a device's freeze render (e.g. it's muted, or its output device isn't available), and shows a warning, instead of leaving it frozen and silent.

Root cause

  • Group freeze renders one file per WaveOutputDevice. A track is only included if getOutput().outputsToDevice (outputDevice->getName(), true) is true and it isn't muted.
  • Since 9ed2e5d5526 ("Refactored TrackOutput to use device IDs rather than names", 2024-08), TrackOutput::outputDevice holds a device ID. outputsToDevice was still comparing it with a device name, so a track routed to a specific device never matched. Only the "(default audio output)" alias path still worked.
  • When no track qualifies, updateFrozenTracks skips the render silently. The tracks keep frozen = true, so createNodeForTrack drops them from the live graph, and createNodeForFrozenOutputDevice has no file to play. The result is a frozen, silent track and no error.

Regression tests (tracktion_Renderer.test.cpp, freeze block)

  • "Track Freeze: Group freeze matches a track to its output device" uses the hosted EnginePlayer device, so it's deterministic without audio hardware. It checks the default alias and a specific device ID. The specific-ID case failed before the fix.
  • "Track Freeze: Group freezing a track that can't be rendered unfreezes it": a muted track, and a track whose output device doesn't exist, both end up unfrozen with no freeze files. Both failed before the fix (the track stayed group-frozen).
  • "Track Freeze: Frozen wave clip/synth track is audible in the playback graph": individual freeze playback coverage (frozen RMS matches unfrozen). These already passed; they're here as coverage.

The full TestRunner suite passes: 379 doctest cases and the JUCE tests.

Note

The new warning string needs a translation pass on the app side.

Fixes Tracktion/waveform_beta#1146

🤖 Generated with Claude Code

drowaudio and others added 2 commits September 23, 2026 14:15
…ck graph

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…red to any output device

TrackOutput::outputsToDevice compared the stored output (a device ID since the
switch to IDs) with a device name, so a track routed to a specific output device
was never included in its device's group-freeze render. Edit::updateFrozenTracks
also left tracks that weren't rendered (e.g. muted) group-frozen, which removes
them from the playback graph with nothing to play back. They're now unfrozen
with a warning.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@codecov

codecov Bot commented Sep 23, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 97.14286% with 3 lines in your changes missing coverage. Please review.
✅ Project coverage is 60.81%. Comparing base (8896b5f) to head (e3e4801).

Files with missing lines Patch % Lines
...les/tracktion_engine/model/edit/tracktion_Edit.cpp 84.61% 2 Missing ⚠️
...on_engine/model/export/tracktion_Renderer.test.cpp 98.88% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##           develop     #438      +/-   ##
===========================================
+ Coverage    60.64%   60.81%   +0.16%     
===========================================
  Files          568      568              
  Lines        80287    80392     +105     
  Branches     12406    12418      +12     
===========================================
+ Hits         48690    48887     +197     
+ Misses       31597    31505      -92     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@drowaudio
drowaudio merged commit 13b5132 into develop Sep 23, 2026
39 checks passed
@drowaudio
drowaudio deleted the bugfix/frozen_track_silent_playback branch September 23, 2026 14:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant