Hi,
I'm using emacspeak with eSpeak. I like it a lot but unfortunately it
uses British English by default and I would like to use American
English instead.
How can I force it to use American English.
I'm able to force espeak to use American English when running it from
command line as follows:
espeak -v en-us "Hi there"
I'm not able to configure emacspeak to use espeak with american english.
I'm using Emacspeak in Ubuntu 16.04. I've installed it from a standard
distro package. I did not modify the configuration.
My Emacspeak is launched as follows:
emacs24 -l /usr/share/emacs24/site-lisp/emacspeak/lisp/emacspeak-setup.el
/usr/bin/tclsh /usr/share/emacs24/site-lisp/emacspeak/servers/espeak
I use the following ubuntu packages:
emacs24 - 24.5+1-6ubuntu1.1
emacspeak - 41.0+dfsg-2
emacspeak-espeak-server - 41.0+dfsg-2
espeak - 1.48.04+dfsg-2
Below is the listing of the following 2 files:
/usr/share/emacs24/site-lisp/emacspeak/lisp/emacspeak-setup.el
/usr/bin/tclsh /usr/share/emacs24/site-lisp/emacspeak/servers/espeak
Please help me to use American English language.
Great thanks in advance.
Pawel
################################# emacspeak-setup.el
;;; emacspeak-setup.el --- Setup Emacspeak environment --loaded to
start Emacspeak
;;; $Id: emacspeak-setup.el 9594 2014-11-26 01:17:48Z tv.raman.tv $
;;; $Author: tv.raman.tv $
;;; Description: File for setting up and starting Emacspeak
;;; Keywords: Emacspeak, Setup, Spoken Output
;;{{{ LCD Archive entry:
;;; LCD Archive Entry:
;;; emacspeak| T. V. Raman |raman@xxxxxxxxxxx
;;; A speech interface to Emacs |
;;; $Date: 2008-06-06 19:00:23 -0700 (Fri, 06 Jun 2008) $ |
;;; $Revision: 4532 $ |
;;; Location undetermined
;;;
;;}}}
;;{{{ Copyright:
;;;Copyright (C) 1995 -- 2011, T. V. Raman
;;; Copyright (c) 1994, 1995 by Digital Equipment Corporation.
;;; All Rights Reserved.
;;;
;;; This file is not part of GNU Emacs, but the same permissions apply.
;;;
;;; GNU Emacs is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 2, or (at your option)
;;; any later version.
;;;
;;; GNU Emacs is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Emacs; see the file COPYING. If not, write to
;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
;;}}}
;;{{{ Introduction
;;; Commentary:
;;; Entry point for Emacspeak.
;;; Code:
;;}}}
;;{{{ Required Modules
(eval-when-compile (require 'cl))
(declaim (optimize (safety 0) (speed 3)))
(require 'custom)
(eval-when (compile)
(require 'emacspeak-preamble))
;;}}}
;;{{{ Define locations
;;;###autoload
(defvar emacspeak-directory
(expand-file-name "../" (file-name-directory load-file-name))
"Directory where emacspeak is installed. ")
;;;###autoload
(defvar emacspeak-lisp-directory
(expand-file-name "lisp/" emacspeak-directory)
"Directory where emacspeak lisp files are installed. ")
;;;###autoload
(defvar emacspeak-sounds-directory
(expand-file-name "sounds/" emacspeak-directory)
"Directory containing auditory icons for Emacspeak.")
;;;###autoload
(defvar emacspeak-xslt-directory
(expand-file-name "xsl/" emacspeak-directory)
"Directory holding XSL transformations.")
;;;###autoload
(defvar emacspeak-etc-directory
(expand-file-name "etc/" emacspeak-directory)
"Directory containing miscellaneous files for
Emacspeak.")
;;;###autoload
(defvar emacspeak-servers-directory
(expand-file-name "servers/" emacspeak-directory)
"Directory containing speech servers for
Emacspeak.")
;;;###autoload
(defvar emacspeak-info-directory
(expand-file-name "info/" emacspeak-directory)
"Directory containing Emacspeak info files.")
;;;###autoload
(defvar emacspeak-resource-directory (expand-file-name "~/.emacspeak/")
"Directory where Emacspeak resource files such as
pronunciation dictionaries are stored. ")
;;;###autoload
(defvar emacspeak-readme-file
(expand-file-name "README"
emacspeak-directory)
"README file from where we get SVN revision number.")
;;;###autoload
(defconst emacspeak-codename
"NiceDog"
"Code name of present release.")
;;;###autoload
(defconst emacspeak-version
(format
"41.0 %s: %s"
emacspeak-codename
(cond
((file-exists-p emacspeak-readme-file)
(let ((buffer (find-file-noselect emacspeak-readme-file))
(revision nil))
(save-current-buffer
(set-buffer buffer)
(goto-char (point-min))
(setq revision
(format "Revision %s"
(or
(nth 2 (split-string
(buffer-substring-no-properties
(line-beginning-position)
(line-end-position))))
"unknown"))))
(kill-buffer buffer)
revision))
(t "")))
"Version number for Emacspeak.")
;;}}}
;;{{{ speech rate
;;;###autoload
(defcustom outloud-default-speech-rate 50
"Default speech rate for outloud."
:group 'tts
:type 'integer)
;;;###autoload
(defcustom mac-default-speech-rate 225
"Default speech rate for mac."
:group 'tts
:type 'integer)
;;;###autoload
(defcustom multispeech-default-speech-rate 225
"Default speech rate for multispeech."
:group 'tts
:type 'integer)
;;;###autoload
(defcustom dectalk-default-speech-rate 225
"*Default speech rate at which TTS is started. "
:group 'tts
:type 'integer)
;;;###autoload
(defcustom espeak-default-speech-rate 175
"Default speech rate for eSpeak."
:group 'tts
:type 'integer)
;;}}}
;;{{{ Hooks
(add-to-list 'load-path emacspeak-lisp-directory )
(add-to-list 'load-path (expand-file-name "g-client" emacspeak-lisp-directory ))
(load-library "emacspeak")
(defvar dtk-startup-hook nil)
;;;###autoload
(defun emacspeak-tts-startup-hook ()
"Default hook function run after TTS is started."
(declare (special tts-default-speech-rate))
(tts-configure-synthesis-setup)
(dtk-set-rate tts-default-speech-rate t)
(dtk-interp-sync))
(add-hook 'dtk-startup-hook 'emacspeak-tts-startup-hook)
(defvar emacspeak-startup-hook nil)
(defun emacspeak-setup-header-line ()
"Set up Emacspeak to show a default header line."
(declare (special emacspeak-use-header-line
header-line-format
emacspeak-header-line-format))
(when emacspeak-use-header-line
(setq header-line-format
emacspeak-header-line-format)))
(defun emacspeak-tvr-startup-hook ()
"Emacspeak startup hook that I use."
(load-library "emacspeak-alsaplayer")
(load-library "emacspeak-webspace")
(load-library "emacspeak-dbus"))
(add-hook 'emacspeak-startup-hook 'emacspeak-setup-header-line)
(add-hook 'emacspeak-startup-hook 'emacspeak-tvr-startup-hook)
;;}}}
(emacspeak)
(provide 'emacspeak-setup)
;;{{{ emacs local variables
;;; local variables:
;;; major-mode: emacs-lisp-mode
;;; folded-file: t
;;; end:
;;}}}
################################## espeak
#!/usr/bin/tclsh
# Keywords: Emacspeak, eSpeak , TCL
# {{{ LCD Entry:
# LCD Archive Entry:
# emacspeak| T. V. Raman |raman@xxxxxxxxxxx
# A speech interface to Emacs |
# $Date: 2006-08-11 21:11:17 +0200 (ven, 11 aoű 2006) $ |
# $Revision: 4047 $ |
# Location undetermined
#
# }}}
# {{{ Copyright:
#Copyright (C) 1995 -- 2001, T. V. Raman
#All Rights Reserved
#
# This file is not part of GNU Emacs, but the same permissions apply.
#
# GNU Emacs is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# GNU Emacs is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Emacs; see the file COPYING. If not, write to
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
# }}}
# {{{source common code
package require Tclx
set wd [file dirname $argv0]
source $wd/tts-lib.tcl
# }}}
# {{{ procedures
# Language switching
#
# langsynth: available languages of the voice synthesis
# This variable is set by atcleci
# For example: langsynth(0)=3
# 3 is the atcleci code for the finnish language
# langsynth(current): current synthesis language,
# Gives the code of the current synth language.
# This variable is set by the application
# For example: langsynth(current)=3
# means finnish is the current language
# langsynth(top): max available index.
# For example, if there are three available languages:
# langsynth(top)=2
# langlabel: what will be announced
# e.g. langlabel(0)="finnish"
# This variable is set by tclespeak
# langcode: language identifier
# e.g. langcode(0)="fi"
# This variable is set by tclespeak
# langalias converts a code language ("en", "en_GB",...) to its index
in the langsynth array.
# e.g. langalias(fi)=3 could mean "fi_FI" will be used if "fi" is required.
set langsynth(0) 0
set langsynth(current) 0
set langsynth(top) 0
set langlabel(0) "english"
set langcode(0) "en-uk"
set langcode(current) "en-uk"
set mswindows [expr { $tcl_platform(platform) == "windows" } ]
# select the next synth language
proc set_next_lang {say_it} {
global langsynth
global langalias
global langlabel
global langcode
set langsynthkey 0
set index 0
while { $index <= $langsynth(top) } {
if { $langsynth($index) == $langsynth(current) } {
set langsynthkey $index
break
}
incr index
}
if { $langsynthkey >= $langsynth(top) } {
set langsynthkey 0
} else {
incr langsynthkey
}
set langsynth(current) $langsynth($langsynthkey)
set langcode(current) $langcode($langsynthkey)
setLanguage $langsynth(current)
if { [info exists say_it]} {
tts_say "$langlabel($langsynthkey) "
}
}
# select the previous synth language
proc set_previous_lang {say_it} {
global langsynth
global langalias
global langlabel
global langcode
set langsynthkey 0
set index 0
while { $index <= $langsynth(top) } {
if { $langsynth($index) == $langsynth(current) } {
set langsynthkey $index
break
}
incr index
}
if { $langsynthkey <= 0 } {
set langsynthkey $langsynth(top)
} else {
incr langsynthkey -1
}
set langsynth(current) $langsynth($langsynthkey)
set langcode(current) $langcode($langsynthkey)
setLanguage $langsynth(current)
if { [info exists say_it]} {
tts_say "$langlabel($langsynthkey) "
}
}
# select a new synth language
# set_lang "en"
proc set_lang {{name "en"} {say_it "nil"}} {
global langsynth
global langalias
global langcode
global langlabel
if { ![info exists langalias($name)]} {
return
}
if { $langalias($name) == $langsynth(current) } {
return
}
set langsynth(current) $langalias($name)
set langcode(current) $langcode($langsynthkey)
setLanguage $langsynth(current)
set langsynthkey 0
set index 0
while { $index <= $langsynth(top) } {
if { $langsynth($index) == $langsynth(current) } {
set langsynthkey $index
break
}
incr index
}
if { $say_it == "t"} {
tts_say "$langlabel($langsynthkey) "
}
}
# set_preferred_lang "en" "en_GB"
proc set_preferred_lang {alias lang} {
global langsynth
global langalias
if { ![info exists langalias($lang)]} {
return
}
set langalias($alias) $langalias($lang)
}
#debug
proc list_lang {} {
global langsynth
echo [ array get langsynth ]
}
proc list_langalias {} {
global langalias
echo [ array get langalias ]
}
proc version {} {
SHOW "proc version"
q " eSpeak [ttsVersion]"
d
}
proc tts_set_punctuations {mode} {
global tts
set tts(punctuations) $mode
punct $mode
service
return ""
}
proc tts_set_speech_rate {rate} {
global tts
set factor $tts(char_factor)
set tts(speech_rate) $rate
setRate 0 $rate
service
return ""
}
proc tts_set_character_scale {factor} {
global tts
set tts(say_rate) [round \
[expr $tts(speech_rate) * $factor ]]
set tts(char_factor) $factor
service
return ""
}
proc tts_say {text} {
global tts
global langcode
global langsynth
service
set la $langcode(current)
set prefix "<voice xml:lang=\"$la\" gender=\"male\" variant=\"1\">"
regsub -all {\[\*\]} $text { } text
synth " $prefix $text"
service
return ""
}
proc l {text} {
global tts
global langcode
global langsynth
set la $langcode(current)
set prefix "<voice xml:lang=\"$la\" gender=\"male\" variant=\"1\">"
if {[regexp {[A-Z]} $text]} {
# pitch instead of 80%, high which could be 75%.
set prefix "$prefix <prosody pitch=\"high\">"
}
set tts(not_stopped) 1
# TBD: say-as, format attribute: instead of characters/glyphs, define "word"
synth "$prefix <say-as interpret-as=\"characters\"
format=\"characters\">$text"
service
return ""
}
proc d {} {
service
speech_task
}
proc tts_resume {} {
resume
return ""
}
proc tts_pause {} {
pause
return ""
}
proc s {} {
global tts
if {$tts(not_stopped) == 1} {
set tts(not_stopped) 0
stop
queue_clear
} else {
puts stderr StopNoOp
}
}
proc t {{pitch 440} {duration 50}} {
global tts queue
if {$tts(beep)} {
b $pitch $duration
return ""
}
service
}
proc sh {{duration 50}} {
global tts queue
set silence "<break time=\"$duration ms\"/>"
set queue($tts(q_tail)) [list t $silence]
incr tts(q_tail)
service
return ""
}
# Caps: this driver currently offers either
# - announcing each capitals (tts_split_caps)
# - or highering pitch (tts_capitalize)
# - or beeping (tts_allcaps_beep)
#
proc tts_split_caps {flag} {
global tts
set tts(split_caps) $flag
if { $flag == 1 } {
set tts(allcaps_beep) 0
set tts(capitalize) 0
caps "spelling"
} else {
if { ( $tts(capitalize) == 0 ) && ( $tts(allcaps_beep) == 0 ) } {
caps "none"
}
}
service
return ""
}
proc tts_capitalize {flag} {
global tts
set tts(capitalize) $flag
if { $flag == 1 } {
set tts(split_caps) 0
set tts(allcaps_beep) 0
caps "pitch"
} else {
if { ( $tts(split_caps) == 0 ) && ( $tts(allcaps_beep) == 0 ) } {
caps "none"
}
}
service
return ""
}
proc tts_allcaps_beep {flag} {
global tts
set tts(allcaps_beep) $flag
if { $flag == 1 } {
set tts(split_caps) 0
set tts(capitalize) 0
caps "tone"
} else {
if { ( $tts(split_caps) == 0 ) && ( $tts(capitalize) == 0 ) } {
caps "none"
}
}
service
return ""
}
proc tts_reset {} {
global tts
#synth -reset
queue_clear
synth "Resetting engine to factory defaults."
}
proc r {rate} {
global queue tts
set queue($tts(q_tail)) [list r $rate]
incr tts(q_tail)
return ""
}
proc useStereoOutput {} {
global tts
setOutput buffer
}
# }}}
# {{{ speech task
proc trackIndex {index} {
global tts
set tts(last_index) $index
}
proc stdin_readable_handler {} {
global stdin_is_readable
global timer_or_stdin_breaks
set stdin_is_readable 1
set timer_or_stdin_breaks 1
}
if $mswindows { fileevent stdin readable stdin_readable_handler }
proc timer_handler {} {
global timer_ticks
global timer_or_stdin_breaks
after 200 timer_handler
set timer_ticks 1
incr timer_or_stdin_breaks
}
if $mswindows { after 0 timer_handler }
proc service {} {
global tts
global stdin_is_readable # used only by mswindows
set talking [speakingP]
set stdin_is_readable 0
while {$talking == 1} {
if $::mswindows {
# need to workaround lack of "select stdin" on windows
# set status to 1 if input is available at stdin
# if input is not available, timer will cause an exit from vwait
set status -1
vwait timer_or_stdin_breaks
if { $stdin_is_readable > 0 } {
set status 1
}
} else {
set status [lsearch [select [list stdin] {} {} 0.02] stdin]
}
if { $status >= 0} {
set tts(talking?) 0
set talking 0
break
} else {
set talking [speakingP]
}
}
return $talking
}
proc speech_task {} {
global queue tts
global langcode
global langsynth
set tts(talking?) 1
set tts(not_stopped) 1
set length [queue_length]
set la $langcode(current)
#set prefix "<voice xml:lang=\"$la\" gender=\"male\"
#variant=\"1\">"
set prefix ""
loop index 0 $length {
set event [queue_remove]
set event_type [lindex $event 0]
switch -exact -- $event_type {
s {
set text [clean [lindex $event 1]]
synth " $prefix $text"
set retval [service]
}
c {
set text [lindex $event 1]
synth "$text"
set retval ""
}
a {
set sound [lindex $event 1]
exec $tts(play) $sound >/dev/null &
}
b {
if {$tts(beep)} {
lvarpop event
eval beep $event
}
}
r {
# The first argument to setRate is ignored.
setRate 0 [lindex $event 1]
}
}
if {$tts(talking?) == 0} {break;}
}
set tts(talking?) 0
service
return ""
}
# }}}
# {{{clean
#preprocess element before sending it out:
proc clean {element} {
global queue tts
# The text conversion is expected to be done by eSpeak.
# For example, the * symbol will be said according to the selected language.
#
# If relying on eSpeak is too optimitisc for text conversion, you may
# perhaps propose to the eSpeak author a new feature.
#
return $element
}
# }}}
# {{{ Initialize and set state.
#do not die if you see a control-c
signal ignore {sigint}
# Set input encoding to utf-8
fconfigure stdin -encoding utf-8
#initialize eSpeak
tts_initialize
set tts(speech_rate) 225
beep_initialize
set tts(input) stdin
if {[info exists server_p]} {
set tts(input) sock0
}
load /usr/lib/emacspeak/tclespeak.so
if {[file exists /proc/asound]} {
set tts(play) /usr/bin/aplay
}
synth {<voice xml:lang="en" variant="1">eSpeak.}
service
#Start the main command loop:
if $mswindows {
# there is a bug on windows, interactive -on does not work
# https://sourceforge.net/p/tclx/bugs/81/
commandloop -interactive off
} else {
commandloop
}
# }}}
# {{{ Emacs local variables
### Local variables:
### major-mode: tcl-mode
### voice-lock-mode: t
### folded-file: t
### End:
# }}}
|May 1995 - Last Year |Current Year|
If you have questions about this archive or had problems using it, please contact us.