Tap-to-time provides the user the ability to tap to the lyrics/syllables
of the song in order to time lines or karaoke. It consists of these
extra UI interactions:
- **Indicator**: tap marker: a designated marker that can be moved to
the current audio position; indicated in:
- the audio display by a green arrow underneath a marker
- the karaoke display by a green-colored syllable
- **Control**: tap marker: the tap marker can be changed by selecting
syllables on audio display in karaoke mode, or clicking the markers on
audio display in dialogue mode
- **Control**: ctrl-right-click audio display: starts playing the audio
from that exact position until the end of the file
- **Option**: Timing/Tap To Time: enables the tap marker indicator and
commands
- **Button**: time_opt_tap_to_time: toggles the Timing/Tap To Time option
- **Button**: time_tap_connect (hotkey I): a command that:
- moves the tap marker's position to the current playing audio
position
- sets the next marker to be the tap marker
- if the tap marker is already the last marker AND BOTH autocommit AND
next-line-on-commit is ON, will move onto the next line
- if moved on to the next line, also sets the start marker to the current
audio position, so the two lines are connected, and moves to the
next tap marker (essentially reinvoking time_tap_connect once)
- **Button**: time_tap_no_connect (hotkey O): similar to
time_tap_connect, except it will not set the next line's start
position even if moved to the next line
Expected workflow:
1) User loads song lyrics
2) User splits each line into syllables
3) User turns on tap-to-time, autocommit, and next-line-on-commit
4) User plays audio from beginning, tapping time_tap_connect to each
syllable, occasionally tapping time_tap_no_connect when a break between
lines is desired
5) If user messes up a line, they can set the tap marker to where they
want to restart from, and ctrl-right-click to start the audio a few
seconds before it
6) Syllables can be split/merged at will, and adjustments to timing can
be done using normal karaoke timing controls
Having the timing correction in MoveMarker is extremely surprising
behavior if any other part of the code uses MoveMarker expecting it to
work correctly as advertised
Some matroska files have audio start at timestamp 0 and video later.
In this case mkvtoolnix seems to use the first block of the first
cluster to the audio track (I would assume this is only an
implementation detail and not really from the matroska specs. And also
could happen in other cases without the video being delayed, but that's
not the point). Aegisub used to read this first block and use its
timestamp as the starting point of the video track.
With this commit, Aegisub tries to read all the blocks until it can read
the first timestamp of the video track and use it for the subtitles'
timestamps. Audio tracks don't seem to be impacted by these changes.
Meson unconditionally uses the wrapped bestsource dependency when the
bestsource option is enabled. Update meson.build to support using a
system-provided version of bestsource when it is present.
The previous logic was actually redundant (except in weird edge cases
where it may cause equally weird behavior) since frame props always take
precedence over explicit arguments in VapourSynth's resize.
Actually support all YCbCr Matrix values instead of only a 601 matrix.
Simplify the override logic and move most of it outside of the ffms2
provider so it can be shared with other providers.
Also stop erroring out on unknown video color spaces.
This is not yet perfect (the guessing logic could be improved, invalid
matrices should probably default to TV.601, and the added functions feel
a bit out of place in video_provider_manager.cpp and are partially
redundant with ycbcr_conv.cpp) but it's a lot better and more
maintainable than before.
Actually support all YCbCr Matrix values instead of only a 601 matrix.
Simplify the override logic and move most of it outside of the ffms2
provider so it can be shared with other providers.
Also stop erroring out on unknown video color spaces.
This is not yet perfect (the guessing logic could be improved, invalid
matrices should probably default to TV.601, and the added functions feel
a bit out of place in video_provider_manager.cpp and are partially
redundant with ycbcr_conv.cpp) but it's a lot better and more
maintainable than before.
Actually support all YCbCr Matrix values instead of only a 601 matrix.
Simplify the override logic and move most of it outside of the ffms2
provider so it can be shared with other providers.
Also stop erroring out on unknown video color spaces.
This is not yet perfect (the guessing logic could be improved, invalid
matrices should probably default to TV.601, and the added functions feel
a bit out of place in video_provider_manager.cpp and are partially
redundant with ycbcr_conv.cpp) but it's a lot better and more
maintainable than before.
I do not see a reason to prefer the flat_map implementation,
and it’s causing crashes when compiled with GCC >= 13 and
Boost 1.85.0 at optimization level 2 or higher.
Whether or not this is a bug in GCC, or Boost hitting a case of
undefined behavior, avoiding it altogether doesn’t seem to hurt.
Fixes#137