我不是盲目的,我只想让我的Windows机器读取缓冲区的内容。以下是基本要求:
我找到了几个可能的解决方案:
哪个选项是最好的计划?我不想在这里进行为期一周的项目。 Windows中的编译节是一个痛苦的实验。 Emacspeak对于我想要的东西看起来有点过分。
答案 0 :(得分:6)
适用于Windows的Festival here。我不能保证festival.el会使用这些二进制文件。不过,我确实有使用这些二进制文件的经验,所以如果你在Emacs以外的地方工作时遇到问题,我可以提供帮助。
我认为你不会控制节日播放速度,但我可能会弄错。至于保留对它的控制权,我会说你最好的选择就是对其进行编程,使其一次只能向节日发送一小部分内容。否则,在完成之前,确实没有办法阻止它阅读。
基本上,我认为没有任何工作可以满足您的最低要求。
编辑:在回顾过你的要求之后,我会说最好的方法是破解festival.el一次向Festival发送一个句子。然后你可以编程一个会杀死它的击键,这样它只会完成当前的句子。同时,您的脚本可以突出显示当前发送到Festival的句子。
答案 1 :(得分: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())