2010-01-02 13 views
6

No soy ciego, solo quiero tener una manera de que mi máquina Windows lea el contenido de un buffer en voz alta. Aquí están los requisitos básicos:Text-to-Speech en Emacs

  • Lea cualquier almacenamiento de texto en inglés.
  • Pause la lectura en cualquier momento y reanude en cualquier momento (no espere unos minutos hasta que un gran búfer finalice cuando alguien entre en mi oficina).
  • Ajuste la velocidad de lectura en tiempo de reproducción.
  • resaltar el texto se está leyendo actualmente (opcional)

me encontré con un par de posibles soluciones:

  • Emacspeak: Diseñado para los ciegos. Parece un programa independiente, no un plug-in de Emacs
  • festival.el: Requiere Festival. No puedo encontrar los Binarios de Windows para el Festival. Alguien los tiene?
  • También podría escribir el mío. Las bibliotecas Text-To-Speech (TTS) son muchas hoy en día. La función de pausa interactiva puede ser el truco más grande, pero debe haber algunas bibliotecas que puedan hacerlo.

¿Cuál es la mejor opción? No quiero un proyecto de una semana aquí. Compilar Festival en Windows ha sido un experimento doloroso. Emacspeak parece excesivo para lo que quiero.

+0

¿Hay una pregunta aquí? – Mike

+0

buen punto! Lo reformulé un poco. – User1

Respuesta

6

Festival para Windows está disponible here. No puedo garantizar que festival.el funcione con estos binarios. Sin embargo, tengo experiencia en trabajar con estos binarios, por lo que si tiene problemas para lograr que funcionen fuera de Emacs, es posible que pueda ayudarlo.

No creo que tengas control sobre la velocidad de reproducción con festival, aunque podría estar equivocado. En cuanto a mantener el control sobre él, diría que su mejor opción es programarlo para que solo envíe pequeñas porciones a la vez al festival. De lo contrario, realmente no hay forma de evitar que lea hasta que esté listo.

Básicamente, no creo que haya nada que satisfaga sus requisitos mínimos sin algún trabajo.

Editar: después de repasar sus requisitos, diría que el mejor enfoque sería piratear el festival.el para enviar una oración a la vez al Festival. Luego puede programar una pulsación de tecla que lo matará, de modo que solo terminará la oración actual. Al mismo tiempo, su secuencia de comandos podría resaltar la oración que actualmente se envía al Festival.

+0

¡Esta es una de las mejores respuestas que he tenido en este foro! ¿En qué parte del mundo encontraste los binarios del Festival? Intenté algunas consultas serias de Google y nada funcionó. – User1

+1

Mi google-Fu es más fuerte que el tuyo :) no, en serio, me llevó una eternidad encontrarlos. –

+0

Y así es como crearon Festival en Windows: http://www.eguidedog.net/doc_build_win_festival.php –

1

Tengo una solución simple basada en el módulo Python pyttsx. Esto inicia un script de python como un proceso de emacs y lo envía a leer.

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

El speak.py archivo de Python:

import pyttsx 

engine = pyttsx.init() 

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

while True: 
    say(raw_input())