Emacs speech and Braille output interface

speechd-el is an Emacs client to speech synthesizers, Braille displays and other alternative output interfaces. It provides full speech and Braille output environment for Emacs. It is aimed primarily at visually impaired users who need non-visual communication with Emacs, but it can be used by anybody who needs sophisticated speech or other kind of alternative output from Emacs. speechd-el can make Emacs a completely speech and BrlTTY enabled application suitable for visually impaired users or, depending on its configuration, it can only speak in certain situations or when asked, to serve needs of any Emacs user.

speechd-el was designed considering our experience with other free accessibility technologies. We sometimes meet problems such as lack of maintenance power, duplicated efforts, making technology specific solutions instead of generally useful tools, important bugs. As other Free(b)soft projects speechd-el attempts to fill an empty space in the accessibility area and to do it in a way ready for future. speechd-el tries to offer technology that is useful, simple, supporting general accessibility architecture models and that effectively utilizes the limited accessibility development resources.

The particular desired speechd-el features imposed by its design are:

  • Providing advanced accessible user environment that works out of the box and utilizes standard Emacs features wherever possible.
  • Implementing just the necessary functionality, without duplicating features presented in other components such as Speech Dispatcher, speech synthesizers or Braille APIs.
  • Simple and clean source code that requires only minimal maintenance and allows future extensions.
  • As little modifications to standard Emacs environment as possible, with the possibility to make additional customizations if needed, either shared or private.
  • Ability to work well in a multilingual environment.
  • Completely Free Software architecture, without requiring any proprietary component.

Major speechd-el features:

  • Speech output.
  • Braille display input/output.
  • Both automated and explicit reading.
  • Message priorities ensuring you don't miss important messages while you needn't listen to or view unimportant messages.
  • "Intelligent" and customizable selection of text to be read based on lines, text properties and other criteria.
  • Support for changing speech parameters (such as language, voice, rate, pitch, volume, speech synthesizer). Different speech parameters can be used in different buffers, major modes, faces, etc.
  • Support for events (such as sound icons).
  • Emacs status changes reporting (such as mode, keyboard, process changes, etc.).
  • Multilingual environment support. speechd-el works well with languages other than English, support for language selection based on the kind of texts, selected keyboard, etc.
  • Reasonable immediate speech and Braille output in most Emacs packages.
  • Speech and Braille output can be enabled/disabled independently to each other, for the whole Emacs session or just for particular buffers.
  • Speech synthesizer independence, you can use all speech synthesizers supported by Speech Dispatcher (such as Festival, Flite, eSpeak, Epos, Dectalk, IBM TTS, Cicero, etc.). Similarly, you can use all Braille displays supported by BrlTTY.
  • Programming libraries for those who want to extend speechd-el facilities or who just want to talk to speech synthesizers, Braille display and other output/input devices.
  • Special features for speechd-el developers such as silence in debugger, providing debugging variables, ability to completely disable speechd-el hooks, etc.
  • Honoring the design criteria stated above.

speechd-el design is strictly modular. It contains the following components:

  • Low-level access Elisp libraries to the speech and Braille APIs: SSIP (the Speech Dispatcher communication protocol) and BrlAPI (BrlTTY access protocol). You can use them in your Elisp programs to access the speech output and Braille input/output directly. Or you can write such libraries for other devices if needed.
  • Higher level Elisp library for common access to the alternative output devices. That library separates you from particular kinds of output (such as SSIP or BrlAPI) and you can output messages without caring about particular technologies actually selected and used by the user.
  • User interface. This part makes Emacs speak or write to Braille display automatically.

There are some other auxiliary components, look into speechd-el source code if interested.

Emacspeak is another Emacs accessibility technology, available before speechd-el was written. People sometimes ask about differences between speechd-el and Emacspeak. Despite speechd-el and Emacspeak serve a similar purpose, they are based on different principles, resulting in different user and technical features. Some of the main differences are:

  • speechd-el uses message priorities for more effective speech and Braille output and input, Emacspeak doesn't have such a mechanism.
  • Both systems can speak Emacs faces in different voices. In speechd-el you customize the voice changes using Emacs options, in Emacspeak by using Aural CSS.
  • Emacspeak contains a lot of specific custom behavior, speechd-el doesn't. We think such customizations may be useful but we don't want to impose them on users without being requested; instead we provide a general mechanism to add them.
  • speechd-el changes standard Emacs behavior as little as possible (a user can work with Emacs the same way whether speechd-el is loaded or not), while Emacspeak redefines some command keys and other settings.
  • speechd-el uses Speech Dispatcher for speech output, Emacspeak uses its own set of servers. Among other things, this implies that the sets of supported speech synthesizers are different.
  • speechd-el works well with Festival (through Speech Dispatcher), the most advanced free speech synthesizer, without any special arrangements.
  • speechd-el supports Braille output, Emacspeak doesn't.
  • speechd-el contains support for using multiple languages.
  • speechd-el tries to utilize general mechanisms so that it could output proper information wherever possible without any special customizations. Emacspeak is based more on particular customizations. For instance, in Dired mode both systems speak just a file name when moving over files instead of speaking the whole line; but while speechd-el does this without any piece of Dired support, Emacspeak implements this by special Dired support in its code (which means more code lines, more maintenance and more risk of bugs).
  • speechd-el doesn't include any text-to-speech processing — as this functionality has nothing to do with Emacs it is left to other components such as speech synthesizers. Emacspeak makes some text-to-speech processing itself.
  • Emacspeak includes additional general purpose packages (such as frontends to multimedia players), bound to Emacspeak features. speechd-el doesn't do that, we think such packages should be implemented independent of any speech technology.
  • speechd-el source code is about ten times smaller than Emacspeak source code.

Note that we are not in agreement with the Emacspeak author on this list, so you may want to look at both the projects to understand the differences better.

The source code is managed using Git. You can use the GitHub web interface or clone the repository from:

https://github.com/brailcom/speechd-el.git

Documentation is available as a part of the project and is distributed together with the source code. You can browse the HTML version on-line.

If you have questions, suggestions or other things you would like to discuss with us, you can contact us at the following places: