Pergunta

Não sou cego, só quero ter uma maneira de que minha máquina do Windows leia o conteúdo de um buffer em voz alta. Aqui estão os requisitos básicos:

  • Leia qualquer buffer de texto em inglês.
  • Pause a leitura a qualquer momento e retome a qualquer momento (não espere alguns minutos para que um grande buffer termine quando alguém entrar no meu escritório).
  • Ajuste a velocidade de leitura em tempo de jogo.
  • Destaque o texto atualmente sendo lido (opcional)

Encontrei algumas soluções possíveis:

  • Emacspeak: Projetado para cegos. Parece um programa independente, não um plug-in da EMACS
  • festival.el: Requer festival. Não consigo encontrar binários do Windows para o festival. Alguém os tem?
  • Eu também poderia escrever o meu. As bibliotecas de texto em fala (TTS) são suficientes hoje em dia. O recurso de pausa interativa pode ser o maior truque, mas deve haver algumas bibliotecas que possam fazê -lo.

Qual opção é o melhor plano? Não quero um projeto de uma semana aqui. O Festival de Compilar no Windows tem sido um experimento doloroso. Emacspeak parece um exagero pelo que eu quero.

Foi útil?

Solução

Festival para Windows está disponível aqui. Não posso garantir que o festival. El trabalhará com esses binários. No entanto, tenho experiência em trabalhar com esses binários; portanto, se você tiver problemas para fazê -los trabalhar fora da EMACS, posso ajudar.

Eu não acho que você terá controle sobre a velocidade de reprodução com o festival, embora eu possa estar enganado. Quanto a reter o controle sobre ele, eu diria que sua melhor aposta é programá -la para que ele esteja apenas enviando pequenas porções de cada vez para o festival. Caso contrário, não há realmente nenhuma maneira de impedir que ela leia até terminar.

Basicamente, não acho que exista nada por aí que atenda aos seus requisitos mínimos sem algum trabalho.

EDIT: Depois de olhar para trás, eu diria que a melhor abordagem seria hackear o festival.el para enviar uma frase de cada vez ao festival. Em seguida, você pode programar um pressionamento de tecla que o matará, para que ele apenas termine a frase atual. Ao mesmo tempo, seu script pode destacar a frase que está sendo enviada para o festival.

Outras dicas

Eu tenho uma solução simples baseada no python pyttsx módulo. Isso inicia um script python como um processo EMACS e envia strings para serem lidas.

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

O arquivo python speak.py:

import pyttsx

engine = pyttsx.init()

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

while True:
    say(raw_input())
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top