emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/greader 29d7140dc6 1/4: Aggiunta del back-end "say" per


From: ELPA Syncer
Subject: [elpa] externals/greader 29d7140dc6 1/4: Aggiunta del back-end "say" per mac-os.
Date: Sat, 28 Jan 2023 08:57:46 -0500 (EST)

branch: externals/greader
commit 29d7140dc614f940e6e8585e7fe78a66f4b6aab8
Author: Michelangelo Rodriguez <michelangelo.rodriguez@gmail.com>
Commit: Michelangelo Rodriguez <michelangelo.rodriguez@gmail.com>

    Aggiunta del back-end "say" per mac-os.
---
 greader-mac.el | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 98 insertions(+)

diff --git a/greader-mac.el b/greader-mac.el
new file mode 100644
index 0000000000..9275d9fedc
--- /dev/null
+++ b/greader-mac.el
@@ -0,0 +1,98 @@
+(defgroup greader-mac
+  nil
+  "Back-end of mac for greader."
+  :group 'greader
+  )
+
+(defcustom greader-mac-voice nil
+  "Set the desired voice for the tts `say’.
+nil means to use the system voice."
+  :tag "mac tts voice"
+  :type '(choice (const :tag "system voice" nil)
+                (string :tag "Specify")))
+
+(defcustom greader-mac-rate 200
+  "Rate of tts expressed in words per minute."
+  :tag "Mac tts speech rate"
+  :type 'integer)
+
+(defcustom greader-mac-executable-name "say"
+  "Name of the program that actually produces the voice."  
+  :tag "mac tts command"
+  :type 'string)
+
+(defun greader-mac-set-rate (&optional rate)
+  "Return a string suitable for setting mac RATE."
+  (if (not rate)
+      (concat "-r" (number-to-string greader-mac-rate))
+    (progn
+      (setq-local greader-mac-rate rate)
+      (concat "-r" (number-to-string rate)))))
+
+(defun greader-mac-set-voice (voice)
+  "Set specified VOICE for `say'.
+When called interactively, this function reads a string from the minibuffer 
providing completion."
+  (interactive
+   (list (read-string "voice: " nil nil (greader--mac-get-voices))))
+  (let (result)
+    (if (called-interactively-p 'any)
+       (progn
+         (if (string-equal "system" voice)
+             (setq-local greader-mac-voice nil)
+           (setq-local greader-mac-voice voice)))
+      (when voice
+       (if (string-equal voice "system")
+           (progn
+             (setq result nil)
+             (setq-local greader-mac-voice nil))
+         (setq result (concat "-v" voice))
+         (setq-local greader-mac-voice voice)))
+      (unless voice
+       (if greader-mac-voice
+           (setq result (concat "-v" greader-mac-voice))
+         (setq result nil)))
+      result)))
+
+;;;###autoload
+(defun greader-mac (command &optional arg &rest _)
+  "Back-end main function of greader-mac.
+COMMAND must be a string suitable for `make-process'."
+  (pcase command
+    ('executable
+     greader-mac-executable-name)
+    ('lang
+     (greader-mac-set-voice arg))
+    ('set-voice
+     (call-interactively 'greader-mac-set-voice))
+    ('rate
+     (cond
+      ((equal arg 'value)
+       greader-mac-rate)
+      (t
+       (greader-mac-set-rate arg))))
+    ('punctuation
+     nil)
+    (_
+     'not-implemented)))
+(put 'greader-mac 'greader-backend-name "greader-mac")
+
+(defun greader--mac-get-voices ()
+  "Return a list which contains all voices suitable for this backend."
+  (with-temp-buffer
+    (call-process "say" nil t nil "-v" "?")
+    (beginning-of-buffer)
+    (let ((lines (list "system")))
+      (while (not (eobp))
+       (let ((mymarker (make-marker)))
+         (search-forward "_")
+         (backward-word)
+         (re-search-backward "[^ ]")
+         (forward-char)
+         (set-marker mymarker (point))
+         (end-of-line)
+         (delete-region mymarker (point)))       
+       (push (string-chop-newline (thing-at-point 'line)) lines)
+       (forward-line))
+      (reverse lines))))
+
+(provide 'greader-mac)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]