T. V. Raman
Voice-mail: 1 (415) 962-3945
Emacspeak is a full-fledged speech output interface to Emacs, and
is being used to provide direct speech access to a UNIX workstation.
The kind of speech access provided by Emacspeak is qualitatively differ-
ent from what conventional screenreaders provide ---emacspeak makes
applications speak--- as opposed to speaking the screen.
Emacspeak is the first full-fledged speech output system that will
allow someone who cannot see to work directly on a UNIX system (Until
now, the only option available to visually impaired users has been to
use a talking PC as a terminal.) Emacspeak is built on top of Emacs.
Once Emacs is started, the user gets complete spoken feedback.
I currently use Emacspeak at work on my SUN SparcStation and have also
used it on a DECALPHA workstation under Digital UNIX while at
Digital's CRLEmacspeak was developed as a spare-time project
while I worked at Digital's Cambridge Research Lab (CRL).
I also use Emacspeak as the only speech output system on my laptop
Emacspeak is available on the Internet:
Emacspeak is an Emacs subsystem that allows the user to get feedback using
synthesized speech. Traditionally, screen reading programs have allowed a
visually impaired user to get feedback using synthesized speech. Such pro-
grams have been commercially available for well over a decade. Most of
them run on PC's under DOS, and there are now a few screen-readers for the
Early screen-reading programs relied on the character
representation of the contents of the screen to produce the spoken feedback.
A significant amount of research and development has been carried out to
provide access to Graphical User Interfaces (GUI). These provide spoken ac-
cess by first constructing an off-screen model (OSM) ---a data structure that
encapsulates the information displayed visually---and then using this OSM to
provide spoken feedback. The best and perhaps the most complete speech
access system to the GUI is Screenreader/2 (ScreenReader For OS/2) de-
veloped by Dr. Jim Thatcher at the IBM Watson Research Center [Tha94].
This package provides robust spoken access to applications under the OS2
Presentation Manager and Windows 3.1. Commercial packages for Microsoft
Windows 3.1 provide varying levels of spoken access to the GUI. The Mer-
cator project [ME92, WKES94, MW94, Myn94] has focused on providing
spoken access to the X-Windows system.
As is clear from the above, screen-readers for the UNIX environment
have been conspicuous in their absence This means that most
visually impaired computer users face the additional handicap of being
DOS-impaired -- a far more serious problem!. Emacspeak is
an emacs subsystem that provides complete speech access under
UNIX. Emacspeak will always have the shortcoming that it will only
work under Emacs. This said, there is very little that cannot be done
inside Emacs, so it's not a real shortcoming.
Emacspeak does have a significant advantage: since it runs inside Emacs,
a structure-sensitive, fully customizable environment, Emacspeak often has
more context-specific information about what it is speaking than its commer-
cial counterparts. In this sense, Emacspeak is not a ``screenreader'', it is a
subsystem that produces speech output.
A traditional screen-reader speaks
the content of the screen, leaving it to the user to interpret the visually laid-
out information. Emacspeak, on the other hand, treats speech as a first-class
output modality; it speaks the information in a manner that is easy to com-
prehend when listening. The traditional screen-reading paradigm suffers from
a severe shortcoming ---the user has to interpret the semantics encapsulated
in the visual layout in order to arrive at the meaning of the information dis-
played by an application. IN contrast, Emacspeak ---a direct speech access
system--- speech-enables specific user applications to speak the informa-
tion that is being conveyed to the user. By doing this, Emacspeak has much
more contextual knowledge about the information being spoken than does a
conventional screen-reading program.
Emacspeak was motivated by my desire to run a multitasking OS on my
laptop. Before Emacspeak, the only way I could access a UNIX workstation
was via a PC emulating a talking terminal ---a crufty if workable solution on
the desktop. However, this was clearly impractical in the mobile environment
---I would have had to carry two laptops!
The available options at the time October 1994 were:
- Run DOS on the laptop and be limited to a highly restricted environ-
- Run Windows 3.1 on the laptop with a commercial screen-access pack-
age for Windows ---most of which were still flaky to say the least.
- Run Linux on the laptop and get the advantages of a 32-bit OS with
full multitasking capabilities.
- Run OS2 with IBM ScreenReader.
At the time I approached the problem, Linux was the most attractive
solution ---except that there was no speech access system available for Linux
(or any other UNIX).
Development Of Emacspeak
Initially, I decided to write a speech-enabling extension to Emacs as opposed
to writing a conventional screen-reader at the TTY level in order to get
a working system in the most expedient manner possible.
The first working prototype of Emacspeak took under a week to design and
implement. Once this prototype was working, the advantages of the speech-
enabling approach outlined earlier became apparent. I then decided to turn
Emacspeak into more than a prototype ---Emacspeak turned into my full-time
speech access interface.
Using Emacs' power and flexibility, it has proven straightforward to add
modules that customize how different applications provide spoken feedback,
e.g., depending on the major/minor mode of a given buffer. Note that the
basic speech functionality provided by Emacspeak is sufficient to use most
Emacs packages effectively; adding package-specific customizations makes the
interaction much smoother. This is because package-specific extensions can
take advantage of the application context to provide appropriate
Emacs-19's font-locking facilities are extended to the speech output as
well; for instance, a user can customize the system to have different types
of text spoken using different kinds of voices (speech fonts). Currently, this
feature is used to provide ``voice locking'' for many popular editing modes
like c-mode, tcl-mode, perl-mode, emacs-lisp-mode etc.
Emacspeak currently comes with speech extensions for several popular
Emacs subsystems and editing modes. I would like to thank their respective
authors for their wonderful work which makes Emacs more than a text editor
---Emacs is a fully customizable user environment.
Here is a partial list of the various editing modes and applications sup-
ported by Emacspeak:
- A powerful Emacs-based WWW browser.
- Publishing on the WWW.
- A mail reader.
- A USENET news reader.
- The Insidious Big Brother Data Base. This is a powerful rolodex
system that can be used to maintain and automatically update a rolodex.
- A tool for maintaining appointments etc.
- A powerful hypertext and hyperbutton system that allows
the user to organize and find information.
- Yet another rolodex system that comes with Hyperbole.
- An outlining editor for maintaining structured documents.
- Editing (L A )T E X documents.
- Emacs' file manager.
- A powerful code viewer for browsing object oriented code. The
interface provided is similar to the one provided in the Small talk world.
- A powerful interface for debugging C and C + + code.
- C and C + + editing extensions.
- Browsing online documentation.
- Browsing online UNIX MAN pages.
- Emacs as a structured folding editor.
- A package that allows for editing templates.
- A powerful interactive spell checker.
- A powerful symbolic algebra calculator.
- Launching a terminal inside Emacs. This extension enables you
to login to another system and get spoken feedback, as well as running
programs that can only be run from the shell. With this extension,
Emacspeak can do everything that a screen-reader written at the TTY
level would achieve. For instance, you can run a
VIVI is the default editor on most UNIX systems
inside the terminal emulator and
get complete spoken feedback from Emacspeak.
- Navigating through the list of currently open buffers.
- Interacting with command interpreters running in an inferior pro-
cess. This allows the user to run inferior UNIX shells, Lisp or TCL
- A powerful interface that allows the user to compare files, apply
- Supports editing and interactive debugging of TCL scripts.
- Supports editing of PERL scripts.
Emacspeak is a speech output system, and as such describing the output
from Emacspeak in print is clearly impossible. Suffice it to say that the
spoken feedback provided by Emacspeak is qualitatively superior to that of
the traditional screen-reading approach
I have used screen-readers for the last 5
In this section, we point out some
of the features of the spoken feedback provided by Emacspeak.
The Main Differentiator
The primary difference between Emacspeak and conventional screen-readers
can be summarized by saying that Emacspeak extends individual applications
to speak as opposed to speaking the final display produced by individual ap-
plications. On the surface, the approach of extending each individual applic-
ation to speak might seem intractable. On closer examination however, it
becomes obvious that speech-enabling applications is in fact the only way to
provide appropriate spoken feedback to the user. Further, the implementation
strategy used, providing appropriate hooks to key functions in an application,
is a powerful technique for speech-enabling applications. We justify this as-
sertion in the following paragraphs.
Every computing application can be viewed as having three distinct com-
Conventional software assumes that the only mode of providing output
is via a visual display. The screen-reading approach retrofits spoken output
to this design in order to provide access to these applications. Clearly, the
screen-reading approach has the advantage that providing spoken access does
not require direct cooperation from the underlying application ---but this is
also its primary shortcoming.
- Obtain user input ---get the data.
- Perform the computation.
- Display the result ---generate output.
The speech-enabling approach forces specific applications to treat speech
as a first-class I/O medium. This means that the speech output modules
do not have to wait until the information is finally displayed to the screen
before speaking it ---the speech module can access the application context
and generate the spoken output using all the information that was available
to the visual output routines.
The design used in Emacspeak can also be described as follows. Dr. Jim
Thatcher describes his IBM
ScreenReaderI used this screenreader exclusively for 5 years until I wrote Emacspeak.
as an interpreter that executes
specific scripts to provide application specific feedback. This makes IBM
ScreenReader one of the most powerful screen access systems. In the case
of IBM ScreenReader, the application specific scripts (ScreenReader Profiles)
as well as the ScreenReader interpreter that runs these scripts both run at
global scope (top-level). Emacspeak goes one step further ---the application
specific scripts as well as the core speech output routines all run within the
[ME92] Elizabeth D. Mynatt and W. Keith Edwards. Mapping GUIs
to auditory interfaces. Proceedings ACM UIST92, pages 61--70,
[MW94] E.D. Mynatt and G. Weber. Nonvisual presentation of graphical
user interfaces: Contrasting two approaches. Proceedings of the
1994 ACM Conference on Human Factors in Computing Systems
(CHI'94), April 1994.
[Myn94] E.D. Mynatt. Auditory Presentation of Graphical User Interfaces.
Santa Fe. Addison-Wesley: Reading MA.., 1994.
[Tha94] James Thatcher. Screen reader/2: Access to os/2 and the graph-
ical user interface. Proc. of The First Annual ACM Conference
on Assistive Technologies (ASSETS '94), pages 39--47, Nov 1994.
[WKES94] E. D. Mynatt W. K. Edwards and K. Stockton. Providing ac-
cess to graphical user interfaces - not graphical screens. Proc.
Of The First Annual ACM Conference on Assistive Technologies
(ASSETS '94), pages 47--54, Nov 1994.
Last modified: Mon Dec 18 20:01:46 1995