2010-01-02 107 views
6

我沒有失明,我只想讓Windows機器能夠讀取緩衝區中的內容。以下是基本要求:Emacs中的文本到語音轉換

  • 請閱讀任何英文文本緩衝區。
  • 隨時暫停閱讀並隨時恢復(當有人走進我的辦公室時,不要等待幾分鐘才能完成大緩衝區)。
  • 在播放時調整回讀速度。
  • 突出顯示當前正在讀(可選)文本

我發現一對夫婦可能的解決方案:

  • Emacspeak:專爲盲人。看起來像一個獨立程序,而不是Emacs插件
  • festival.el:需要節日。我無法找到節日的Windows二進制文件。任何人都有他們?
  • 我也可以寫我自己的。文本到語音轉換(TTS)庫很多。交互式暫停功能可能是最大的竅門,但必須有一些庫可以做到。

哪個選項是最好的計劃?我不想在這裏度過一個爲期一週的項目。在Windows編譯節日是一個痛苦的實驗。 Emacspeak看起來像我想要的矯枉過正。

+0

是否有此問題? – Mike 2010-01-02 04:10:38

+0

好點!我重新說了一下。 – User1 2010-01-02 04:24:27

回答

6

節日窗口可用here。我不能保證festival.el會與這些二進制文件一起工作。不過,我確實有使用這些二進制文件的經驗,所以如果您在Emacs之外工作時遇到問題,我可能會提供幫助。

我不認爲你會控制節日的播放速度,儘管我可能會誤解。至於保留它的控制權,我想說你最好的選擇就是編程,這樣它只能一次發送一小部分到節日。否則,在完成之前確實沒有辦法阻止它讀取。

基本上,我不認爲有沒有什麼東西可以滿足你的最低要求而不需要做一些工作。

編輯:在回顧一下你的要求後,我會說最好的辦法是破解festival.el一次發送一個句子到節日。然後你可以編寫一個擊鍵來殺死它,這樣它只會完成當前的句子。同時,您的劇本可以突出顯示當前發送到節日的句子。

+0

這是我在這個論壇上得到的最好答案之一!你在世界上是如何找到節日二進制文件的?我試過一些嚴重的谷歌查詢,沒有任何工作。 – User1 2010-01-02 04:50:23

+1

我的谷歌-Fu比你的更強大:)沒有認真的,它讓我永遠找到它們。 – 2010-01-02 05:21:17

+0

這裏是他們如何建造節後窗口:http://www.eguidedog.net/doc_build_win_festival.php – 2013-09-27 06:54:49

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"))) 

蟒蛇文件speak.py:

import pyttsx 

engine = pyttsx.init() 

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

while True: 
    say(raw_input())