2010-01-02 5 views
6

Я не слепой, я просто хочу, чтобы моя машина Windows прочитала содержимое буфера outloud. Вот основные требования:Текст в речь в Emacs

  • Прочтите любой текстовый буфер английского языка.
  • Приостановите чтение в любое время и возобновите работу в любое время (не дожидайтесь нескольких минут, пока большой буфер не закончит, когда кто-нибудь зайдет в мой офис).
  • Отрегулируйте скорость чтения во время воспроизведения.
  • Выделите текст в настоящее время чтения (необязательно)

я нашел несколько возможных решений:

  • Emacspeak: Предназначен для слепых. Похож на автономную программу, а не на модуль Emacs
  • festival.el: Требуется фестиваль. Я не могу найти Windows Binaries для фестиваля. У кого-нибудь есть их?
  • Я также мог написать свой собственный. Библиотеки Text-To-Speech (TTS) сегодня много. Функция интерактивной паузы может быть самым большим трюком, но там должны быть некоторые библиотеки, которые могут это сделать.

Какой вариант является лучшим планом? Мне не нужен недельный проект здесь. Компиляция фестиваля в Windows была болезненным экспериментом. Emacspeak выглядит как излишество для того, что я хочу.

+0

Есть вопрос здесь? – Mike

+0

хорошо пункт! Я переформулировал это немного. – User1

ответ

6

Фестиваль для Windows доступен here. Я не могу гарантировать, что festival.el будет работать с этими двоичными файлами. Однако у меня есть опыт работы с этими двоичными файлами, поэтому, если у вас возникли проблемы с их работой за пределами Emacs, я могу помочь.

Я не думаю, что у вас будет контроль над скоростью воспроизведения с фестивалем, хотя я могу ошибаться. Что касается сохранения контроля над ним, я бы сказал, что лучше всего запрограммировать его так, чтобы он отправлял только небольшие порции на фестиваль. В противном случае, действительно нет никакого способа предотвратить его чтение до завершения.

В принципе, я не думаю, что есть что-то, что соответствовало бы вашим минимальным требованиям без какой-либо работы.

Редактировать: оглянувшись на ваши требования, я бы сказал, что лучшим подходом было бы взломать festival.el, чтобы отправить предложение на время фестиваля. Затем вы можете запрограммировать нажатие клавиши, которое убьет его, чтобы оно только закончило текущее предложение. В то же время ваш сценарий может выделить предложение, которое в настоящее время отправляется на фестиваль.

+0

Это один из лучших ответов, которые я когда-либо имел на этом форуме! Как в мире вы нашли бинарники фестиваля? Я пробовал некоторые серьезные запросы Google, и ничего не получилось. – User1

+1

Мой google-Fu сильнее вашего. Я серьезно не верил, что навсегда найду их. –

+0

И вот как они построили фестиваль на окнах: http://www.eguidedog.net/doc_build_win_festival.php –

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