[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/subed 3561ab71c8 1/3: subed-align-region: Call new hook su
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/subed 3561ab71c8 1/3: subed-align-region: Call new hook subed-align-region-hook |
Date: |
Tue, 17 Dec 2024 16:02:54 -0500 (EST) |
branch: elpa/subed
commit 3561ab71c85b7715fa95c4a017b7bb15325c5f9c
Author: Sacha Chua <sacha@sachachua.com>
Commit: Sacha Chua <sacha@sachachua.com>
subed-align-region: Call new hook subed-align-region-hook
* subed/subed-align.el (subed-align-region-hook):
New hook.
* subed/subed-align.el (subed-align-region):
Handle subtitles with multiple lines.
* subed/subed-align.el (subed-align-region): Run the hook.
* subed/subed-waveform.el (subed-align): Refresh
properties after aligning.
(subed-waveform-refresh-current-subtitle): Add
alias for convenience.
(subed-waveform-add-to-all): Work with regions.
(subed-waveform-refresh-after-realigning): New function.
* subed/subed-word-data.el (subed-word-data-refresh-region):
New function.
* subed/subed-word-data.el (subed-align): Use subed-file-duration-ms.
---
subed/subed-align.el | 19 ++++++++++++-------
subed/subed-waveform.el | 30 +++++++++++++++++++++++-------
subed/subed-word-data.el | 11 +++++++++++
3 files changed, 46 insertions(+), 14 deletions(-)
diff --git a/subed/subed-align.el b/subed/subed-align.el
index 50eaacc31f..753898ed1c 100644
--- a/subed/subed-align.el
+++ b/subed/subed-align.el
@@ -41,6 +41,9 @@
Ex:
task_adjust_boundary_nonspeech_min=0.500|task_adjust_boundary_nonspeech_string=REMOVE
will remove silence and other non-speech spans.")
+(defvar subed-align-region-hook nil "Functions to run after realigning a
region.
+Each function will be called with BEG and END.")
+
;;;###autoload
(defun subed-align-region (audio-file beg end)
"Align just the given section."
@@ -55,10 +58,11 @@ will remove silence and other non-speech spans.")
(let* ((format (cond
((derived-mode-p 'subed-vtt-mode) "VTT")
((derived-mode-p 'subed-srt-mode) "SRT")))
- (temp-text-file
+ (input-mode major-mode)
+ (input-subtitles (subed-subtitle-list beg end))
+ (temp-input-file
(make-temp-file "subed-align" nil ".txt"
- (subed-subtitle-list-text
- (subed-subtitle-list beg end))))
+ (mapconcat (lambda (o) (elt o 3)) input-subtitles
"\n\n")))
(temp-file
(concat (make-temp-name "subed-align")
"."
@@ -85,13 +89,13 @@ will remove silence and other non-speech spans.")
t
(append (cdr subed-align-command)
(list (expand-file-name audio-file)
- temp-text-file
+ temp-input-file
(format
"is_audio_file_head_length=%.3f|is_audio_file_process_length=%.3f|task_language=%s|os_task_file_format=%s|is_text_type=%s%s"
ignore-before
process-length
subed-align-language
(downcase format)
- "plain"
+ "subtitles"
(if subed-align-options (concat "|"
subed-align-options) ""))
temp-file)))
;; parse the subtitles from the resulting output
@@ -100,8 +104,9 @@ will remove silence and other non-speech spans.")
(subed-for-each-subtitle beg end nil
(let ((current (pop results)))
(subed-set-subtitle-time-start (elt current 1))
- (subed-set-subtitle-time-stop (elt current 2))))))
- (delete-file temp-text-file)
+ (subed-set-subtitle-time-stop (elt current 2)))))
+ (run-hook-with-args 'subed-align-region-hook beg end))
+ (delete-file temp-input-file)
(delete-file temp-file))))
;;;###autoload
diff --git a/subed/subed-waveform.el b/subed/subed-waveform.el
index 7b5cacce31..0df6e29b88 100644
--- a/subed/subed-waveform.el
+++ b/subed/subed-waveform.el
@@ -206,6 +206,9 @@ rounded to the nearest multiple of this number."
(remove-hook 'subed-subtitle-merged-hook 'subed-waveform-subtitle-merged t)
(remove-hook 'subed-subtitles-sorted-hook 'subed-waveform-refresh t)))
+(with-eval-after-load 'subed-align
+ (add-hook 'subed-align-region-hook
#'subed-waveform-refresh-after-realigning))
+
(defconst subed-waveform-volume-map
(let ((map (make-sparse-keymap)))
(define-key map (kbd "C-=") #'subed-waveform-volume-increase)
@@ -294,7 +297,7 @@ and HEIGHT are dimensions in pixels."
(defun subed-waveform--image-parameters (&optional width height)
"Return a plist of media-file, start, stop, width, height.
Use WIDTH and HEIGHT if specified."
- (let* ((duration (subed-waveform-file-duration-ms (subed-media-file)))
+ (let* ((duration (subed-file-duration-ms (subed-media-file)))
(start (floor (max 0 (- (subed-subtitle-msecs-start)
subed-waveform-preview-msecs-before))))
(stop
(min
@@ -401,7 +404,7 @@ If POSITION is nil, remove the bar."
(setq overlay (or overlay (subed-waveform--get-current-overlay)))
(let* ((start (subed-subtitle-msecs-start))
(stop (min (subed-subtitle-msecs-stop)
- (or (subed-waveform-file-duration-ms)
most-positive-fixnum)))
+ (or (subed-file-duration-ms) most-positive-fixnum)))
(start-pos (subed-waveform--position-to-percent
start
(overlay-get overlay 'waveform-start)
@@ -489,6 +492,7 @@ times per second."
(setq subed-waveform--update-timer
(run-with-idle-timer 0 nil 'subed-waveform-put-svg))))
+(defalias 'subed-waveform-refresh-current-subtitle #'subed-waveform-put-svg)
(defun subed-waveform-put-svg (&rest _)
"Put or update an overlay with the SVG in the current subtitle.
Set the relevant variables if necessary.
@@ -505,14 +509,26 @@ This function ignores arguments and can be used in hooks."
(when overlay (delete-overlay overlay))
(setq overlay (subed-waveform--make-overlay)))))))
-(defun subed-waveform-add-to-all ()
- "Update all subtitles with overlays."
- (interactive)
- (remove-overlays (point-min) (point-max) 'subed-waveform t)
- (subed-for-each-subtitle (point-min) (point-max) nil
+(defun subed-waveform-add-to-all (&optional beg end)
+ "Update subtitles from BEG to END."
+ (interactive (list (if (region-active-p) (min (point) (mark)))
+ (if (region-active-p) (max (point) (mark)))))
+ (setq beg (or beg (point-min)))
+ (setq end (or end (point-max)))
+ (remove-overlays beg end 'subed-waveform t)
+ (subed-for-each-subtitle beg end nil
(subed-jump-to-subtitle-text)
(subed-waveform--make-overlay)))
+(defun subed-waveform-refresh-after-realigning (beg end)
+ "Refresh waveforms after modifying region."
+ (when subed-waveform-minor-mode
+ (save-excursion
+ (if subed-waveform-show-all
+ (subed-waveform-add-to-all beg end)
+ (subed-waveform-remove)
+ (subed-waveform-put-svg)))))
+
(defun subed-waveform-refresh ()
"Add all waveforms or just the current one.
Controlled by `subed-waveform-show-all`."
diff --git a/subed/subed-word-data.el b/subed/subed-word-data.el
index 2bb7f958cc..20cfeecaf0 100644
--- a/subed/subed-word-data.el
+++ b/subed/subed-word-data.el
@@ -274,6 +274,12 @@ Return non-nil if they are the same after normalization."
(subed-word-data--add-word-properties (point) pos candidate)
(setq word-data try-list))))))
+(defun subed-word-data-refresh-region (beg end)
+ "Refresh text properties in region."
+ (when subed-word-data--cache
+ (subed-for-each-subtitle beg end nil
+ (subed-word-data-refresh-text-properties-for-subtitle))))
+
(defsubst subed-word-data--candidate-face (candidate)
"Return the face to use for CANDIDATE."
(if (and (alist-get 'score candidate)
@@ -360,5 +366,10 @@ Requires the text properties to be set."
max-pause pause)))
(setq last-start-time nil)))
(goto-char max-pos)))
+
+(with-eval-after-load 'subed-align
+ (add-hook 'subed-align-region-hook #'subed-word-data-refresh-region))
+
+
(provide 'subed-word-data)
;;; subed-word-data.el ends here