Repository navigation
Conversation
Member
|
I will not be able to get to this for a while. |
bmatherly
force-pushed
the
audio_mixing_assistant
branch
from
September 9, 2026 01:52
4444b7d to
1733516
Compare
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
The review identified unresolved cancellation, completion, rerun cleanup, ducking, timing, labeling, and menu-state issues.
4 open issues
What changed in this PR
Adds an Audio Mixing Assistant for track-role assignment, loudness analysis, filter recommendations, ducking, tagging, and undoable application.
Changes:
- Adds persistent track roles and loudness targets.
- Adds timeline-integrated analysis and recommendation workflow.
- Adds assistant attribution to supported audio filters.
| File | Description |
|---|---|
src/shotcut_mlt_properties.h |
Adds assistant metadata properties. |
src/qml/modules/Shotcut/Controls/qmldir |
Registers the assistant tag control. |
src/qml/modules/Shotcut/Controls/AudioMixingAssistantTag.qml |
Displays assistant filter attribution. |
src/qml/filters/audio_lowpass/ui.qml |
Adds assistant attribution to the low-pass filter UI. |
src/qml/filters/audio_highpass/ui.qml |
Adds assistant attribution to the high-pass filter UI. |
src/qml/filters/audio_gain/ui.qml |
Adds assistant attribution to the gain filter UI. |
src/qml/filters/audio_eqparametric/ui.qml |
Adds assistant attribution to the parametric EQ UI. |
src/qml/filters/audio_compressor/ui.qml |
Adds assistant attribution to the compressor UI. |
src/models/multitrackmodel.h |
Declares track roles and loudness support. |
src/models/multitrackmodel.cpp |
Implements track roles and loudness storage. |
src/mainwindow.cpp |
Registers the timeline action. |
src/docks/timelinedock.h |
Declares the assistant menu integration. |
src/docks/timelinedock.cpp |
Adds the menu action and dialog launching. |
src/dialogs/audiomixingassistantdialog.h |
Declares the assistant dialog. |
src/dialogs/audiomixingassistantdialog.cpp |
Implements analysis, recommendations, ducking, and filter application. |
src/commands/timelinecommands.h |
Declares undoable role changes. |
src/commands/timelinecommands.cpp |
Implements undoable role changes. |
src/CMakeLists.txt |
Includes the new dialog sources. |
Review effort: Lite
Signal readers to stop between frames and wait for them to exit before closing the dialog, discarding partial results.
Only add background music and sound effects ducking recommendations when dialogue events were detected, so applying them cannot create a gain filter with no ducking keyframes.
Add each dialogue track's planned normalization gain to its frame levels before comparing them against the ducking threshold, sharing the gain calculation with the loudness recommendation.
Measure frame levels for premixed program tracks and include them with dialogue tracks when detecting the speech events used for ducking, since premixed program audio can also contain dialogue.
Require the assistant ownership tag before replacing existing filters, so user-added volume, gain, and normalize filters remain untouched.
bmatherly
force-pushed
the
audio_mixing_assistant
branch
from
October 25, 2026 23:57
1044c2c to
d5c8fc1
Compare
Member
|
I do not have an interest in the details of this. Go ahead and merge it when you are comfortable. |
ddennedy
approved these changes
Oct 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Add an Audio Mixing Assistant tool.
Looking for feedback on this proof of concept. I'm happy to abandon it, or go a wildly different direction if that is where the discussion goes.
The purpose of this tool is to give the user a jump start to an audio mix on their timeline. It also implements audio ducking as keyframes on a gain filter if they choose to accept that recommendation.
The tool is launched from the Edit menu in the timeline.

This opens a dialog. To start, the user assigns an audio role to each track: dialog, background music, ambiance, etc. They also specify the target program loudness for the main mix.

The tool scans the audio on all the tracks.

Based on the track audio role, the tool recommends filters to be applied to each track.

Here is the full list of possible recommendations:
Dialogue
Background Music
Ambience
Sound Effects
Premixed Program
The user can read each recommendation, and then select the ones they want to apply. Clicking Apply will cause the filters to be added. to the tracks.
Even if multiple filters are created, the operation makes one undo operation

Filters that are created are tagged as being applied by the Assistant so the user can be reminded later why the filter is there: (The yellow box is a tooltip popup, not a fixed banner. My mouse is not shown in this screenshot)

If the assistant is run a second time, any audio assistant filters are removed and new ones are added. So they do not accumulate after multiple runs.
This tool is based on simple rules and creates static filters (some use keyframes for ducking).
Ideas that I did not incorporate:
Please provide feedback on the concept before I dive too deep into the code review.