-
-
Notifications
You must be signed in to change notification settings - Fork 145
feat(editor): imported audio as a first-class timeline region #569
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
EtienneLescot
wants to merge
86
commits into
main
Choose a base branch
from
feat/imported-audio
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
86 commits
Select commit
Hold shift + click to select a range
9f9d669
feat(editor): add audio-track data model for external audio import
Beetix 95e80d6
feat(editor): import external audio files as audio-kind assets
Beetix 255b9f2
feat(editor): add timeline state ops for imported audio tracks
Beetix 336f5fc
feat(editor): import audio onto the timeline with a lane and inspector
Beetix 1affb14
feat(editor): drag and trim audio tracks on the timeline lane
Beetix db66bbc
feat(editor): play imported audio tracks in the preview
Beetix 79efff1
feat(export): mix imported audio tracks into the exported MP4
Beetix 5310b28
feat(editor): fold audio import into the single "Import media" button
Beetix a6ca70b
fix(editor): smooth audio-track preview and stop audio becoming a clip
Beetix 7b167ae
feat(editor): add audio from the timeline toolbar, not the media tab
Beetix 5dd510d
refine(editor): tidy the audio toolbar button and inspector pane
Beetix 84a439d
refine(editor): reposition Add audio and make Delete track span
Beetix 86a78b9
refine(editor): match the audio-track pane to the global Audio pane
Beetix 0ef1af3
refactor(editor): drop the superseded audio-track move/resize ops
Beetix f7c4062
refactor(editor): remove the mute feature from imported audio tracks
Beetix 1cc8f0e
docs: list audioTracks[] in the document-model top-level shape
Beetix 73c1e4d
fix(editor): address CodeRabbit review on the audio-import PR (#502)
Beetix f5339a2
feat(editor): honor imported-track boost in the preview (CodeRabbit #5)
Beetix 93ae2ad
feat(editor): always show the audio lane + an "Add audio" shortcut (M)
Beetix ee68186
fix(editor): sync imported audio tracks to trims in the export (issue…
Beetix 2914c22
fix(editor): address CodeRabbit follow-up on the audio-track PR (#502)
Beetix 1bb1913
docs(editor): correct the timelineStartSec comments — the head is raw…
EtienneLescot ef33206
fix(editor): play imported audio contiguously in preview to match the…
Beetix 93c06e0
fix(ipc): accept audio paths in the generic media reads so imported w…
Beetix b47e791
fix(editor): three more preview↔export audio seam bugs
Beetix efd3cbb
fix(editor): four imported-audio state leaks
Beetix 8da3230
refactor(editor): three imported-audio cleanups
Beetix eb6c4ab
feat(audio): clip-anchor timeline audio tracks
olamide226 518f125
feat(audio): fades, loop and mute on timeline audio tracks
olamide226 2c62010
feat(audio): record voiceovers against the timeline
olamide226 876277c
fix(audio): unblock voiceover recording and restore the left-edge trim
olamide226 f545556
fix(audio): make the loop toggle reachable, and give voiceover a button
olamide226 19c3807
test(timeline): pin the voiceover toolbar button
olamide226 d397d08
feat(audio): make loop fill by itself, and mark where it repeats
olamide226 2753103
feat(timeline): one audio button with a named menu, and real tooltips
olamide226 09f2dcd
fix(ui): forward refs through the Popover and Tooltip wrappers
olamide226 8ed15ff
feat(timeline): stack overlapping audio tracks on their own rows
olamide226 18854ad
fix(audio): silence the timeline's own tracks while recording a take
olamide226 2819518
feat(audio): dock the voiceover recorder instead of covering the video
olamide226 88595d5
fix(audio): stop tracks inside a trimmed stretch from playing
olamide226 9a2ab93
fix(audio): keep tracks at 1x and in place under speed regions
olamide226 9b6420e
Merge origin/main into the audio branch
olamide226 bd17803
perf(transcription): extract audio natively, off the UI thread
EtienneLescot 21925c4
fix(timeline): let the keyboard activate a lane pill, not just the po…
EtienneLescot 9dcc816
fix(transcription): stop the background pass transcribing music
EtienneLescot 49023c0
feat(ai): let the agent see and place audio tracks
EtienneLescot fa76747
feat(timeline): show what an audio pill crops, and let it slip
EtienneLescot 2ff5699
fix(timeline): say that Alt slips, instead of leaving it to be discov…
EtienneLescot 67a5a36
fix(timeline): put the slip gesture where it is read without hovering
EtienneLescot 34b9bef
feat(editor): fold captions into the transcript tab
EtienneLescot b9e0f1f
feat(editor): read the transcript from the voiceover, not just the film
EtienneLescot a6c16a4
feat(document): add immutable transcript word edits
sunyuchenyaobo fbce0ca
fix(document): validate referenced word ownership and join CJK indepe…
sunyuchenyaobo c001278
fix(document): read CJK segment edges by code point for non-BMP Han
sunyuchenyaobo b74565a
feat(document): make a corrected word survive its re-transcription
EtienneLescot f33571c
feat(editor): correct a word in the transcript without cutting the film
EtienneLescot 492bdbb
feat(editor): add words to the transcript that nobody said
EtienneLescot 188f365
feat(editor): an added word buys itself time, and the film holds its …
EtienneLescot 2745da4
revert(editor): an added word no longer splits the clip it lands in
EtienneLescot bef60e9
feat(timeline): mark where words were added, without storing anything…
EtienneLescot 0258709
feat(ai): let the chat correct a word it heard wrong
EtienneLescot 24ae842
feat(document): store the pause an added word needs, as a region
EtienneLescot 0ea2f38
feat(editor): the readers count the pause an added word bought
EtienneLescot 7a54294
Merge feat/transcript-word-edits into the audio branch
EtienneLescot d0aa9d3
feat(timeline): one answer to whether a raw moment is in the film
EtienneLescot d602d54
feat(editor): decide a word by the ruler, so both lanes agree
EtienneLescot 456beeb
feat(audio): a cut under a voiceover takes the words, not the take's …
EtienneLescot 53ff467
feat(editor): a transcript cut names a moment, not an owner
EtienneLescot 0cf5a6c
feat(captions): the lane is a document fact, and the captions follow it
EtienneLescot 9757910
feat(audio): one voiceover row, one music row, through a single door
EtienneLescot 0f7e0fc
fix(document): sweep the trims that struck words through without cutting
EtienneLescot 9c5aa3f
feat(timeline): tell the two insertion lanes apart, and pin the inert…
EtienneLescot 38cbe5e
feat(timeline): one walk over a take, losing time to a cut and gainin…
EtienneLescot 9e996c0
fix(timeline): the projection counts the pauses, so audio stops landi…
EtienneLescot 1a29125
fix(export): a pause reaches the compositor, instead of exporting as …
EtienneLescot d920635
feat(audio): the export and the transcript read the take's walk
EtienneLescot ab6ff6e
feat(preview): the voice parks with the walk, and every take plays once
EtienneLescot 66519ee
feat(editor): add a word on either lane, and draw the time it buys
EtienneLescot 30e27e7
feat(editor): cut the notch into the take, inside one outline
EtienneLescot ae4d22e
fix(timeline): a scrub names a moment on the ruler, not on the tape
EtienneLescot 92189a1
fix(preview): the picture spends the pause a word bought
EtienneLescot 43e7397
fix(preview): an insertion is media that plays, not a pause
EtienneLescot caf56fa
fix(preview): park the picture on the insertion, don't re-seek it
EtienneLescot f44d521
fix(timeline): the scrub release carries its ruler second too
EtienneLescot 140d56d
refactor(timeline): one clock — an insertion is media, so the clip is…
EtienneLescot 8ca6473
fix(captions): place a cue past an insertion on the source it names
EtienneLescot File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -132,3 +132,4 @@ workbench/fixtures/ | |
| /aur_ci | ||
| /aur_ci.pub | ||
| /aur_known_hosts | ||
| tmp_handoff.md | ||
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
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
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
The programme cap changes the fade-out position.
trim_endis capped at the room left in the programme.overlay_track_pcmthen measures the fades against the decoded length, which is now that capped length. For a track that runs past the programme end, the fade-out ramps down at the truncation point instead of at the track's real end. The doc comment on lines 1466-1468 states the opposite intent.Pass the uncapped window length to the fade resolution so the ramp keeps its original position and is simply cut off.
♻️ Proposed fix
Then pass
fade_len_sectooverlay_track_pcmand use it (converted to samples) instead ofdecoded_leninresolve_fade_samples/fade_envelope.🤖 Prompt for AI Agents