6

我不是盲人,我只是想有一种方法让我的 Windows 机器大声读取缓冲区的内容。以下是基本要求:

  • 读取任何英文文本缓冲区。
  • 随时暂停阅读并随时恢复(当有人走进我的办公室时,不要等待几分钟才能完成大缓冲区)。
  • 在播放时调整回读速度。
  • 突出显示当前正在阅读的文本(可选)

我找到了几个可能的解决方案:

  • Emacspeak:专为盲人设计。看起来像一个独立的程序,而不是 Emacs 插件
  • Festival.el:需要节日。我找不到 Festival 的 Windows 二进制文件。有人有吗?
  • 我也可以自己写。如今,文本转语音 (TTS) 库已经很多了。交互式暂停功能可能是最大的技巧,但必须有一些库可以做到。

哪个选项是最好的计划?我不想在这里进行为期一周的项目。在 Windows 中编译 Festival 是一个痛苦的实验。对于我想要的东西,Emacspeak 看起来有点矫枉过正。

4

2 回答 2

6

可在此处获得适用于 Windows 的音乐节。我不能保证festival.el 可以使用这些二进制文件。不过,我确实有使用这些二进制文件的经验,所以如果你在让它们在 Emacs 之外工作时遇到问题,我也许可以提供帮助。

我不认为你可以控制节日的播放速度,尽管我可能弄错了。至于保留对它的控制权,我想说你最好的选择是对其进行编程,以便它一次只发送一小部分到节日。否则,真的没有办法阻止它在完成之前读取。

基本上,我认为没有任何工作可以满足您的最低要求。

编辑:回顾您的要求后,我想说最好的方法是破解festival.el 一次向Festival 发送一个句子。然后你可以编写一个键击来杀死它,这样它只会完成当前的句子。同时,您的脚本可以突出显示当前发送到 Festival 的句子。

于 2010-01-02T04:21:09.917 回答
1

我有一个基于 Python pyttsx模块的简单解决方案。这会将 python 脚本作为 emacs 进程启动,并将其发送到要读取的字符串。

(defvar tts nil "text to speech process")

(defun tts-up ()
  (interactive)
  (and (not (null tts))
       (eq (process-status tts) 'run)))

(defun tts-start ()
  (interactive)
  (if (not (tts-up))
      (setq tts
            (start-process "tts-python"
                           "*tts-python*"
                           "python" "speak.py"))))

(defun tts-end ()
  (interactive)
  (delete-process tts)
  (setq tts nil))

(defun tts-say (text)
  (interactive)
  (tts-start)
  (process-send-string tts (concat text "\n")))

python文件speak.py:

import pyttsx

engine = pyttsx.init()

def say(data):
    engine.say(data)
    engine.runAndWait()

while True:
    say(raw_input())
于 2014-08-29T16:11:57.430 回答