Ondřej Lysoněk 45bfd2
From 6df30ecf05440a1a0f197817d3e39c15d04f15c0 Mon Sep 17 00:00:00 2001
Ondřej Lysoněk 45bfd2
From: =?UTF-8?q?Ond=C5=99ej=20Lyson=C4=9Bk?= <olysonek@redhat.com>
Ondřej Lysoněk 45bfd2
Date: Wed, 28 Feb 2018 22:49:07 +0100
Ondřej Lysoněk 45bfd2
Subject: [PATCH] Add support for eSpeak-NG
Ondřej Lysoněk 45bfd2
Ondřej Lysoněk 45bfd2
It is mostly a copy of the eSpeak driver.
Ondřej Lysoněk 45bfd2
Ondřej Lysoněk 45bfd2
Squashed with Dave Mielke's commit:
Ondřej Lysoněk 45bfd2
Some modifications to the introduction of the eSpeak-NG speech driver: (dm)
Ondřej Lysoněk 45bfd2
Ondřej Lysoněk 45bfd2
Fix the order of lists that are alphabetically sorted by driver code.
Ondřej Lysoněk 45bfd2
Undo the changes to the derived Portuguese documents.
Ondřej Lysoněk 45bfd2
---
Ondřej Lysoněk 45bfd2
 Documents/CONTRIBUTORS                             |   1 +
Ondřej Lysoněk 45bfd2
 Documents/Manual-BRLTTY/English/driver-codes.sgml  |   1 +
Ondřej Lysoněk 45bfd2
 .../Manual-BRLTTY/English/speech-drivers.sgml      |   2 +
Ondřej Lysoněk 45bfd2
 Documents/Manual-BRLTTY/French/driver-codes.sgml   |   1 +
Ondřej Lysoněk 45bfd2
 Documents/Manual-BRLTTY/French/speech-drivers.sgml |   2 +
Ondřej Lysoněk 45bfd2
 Documents/README.DOS                               |   5 +-
Ondřej Lysoněk 45bfd2
 Documents/brltty.1.in                              |   3 +
Ondřej Lysoněk 45bfd2
 Documents/brltty.conf.in                           |   7 +
Ondřej Lysoněk 45bfd2
 Documents/speech-driver.csv                        |   1 +
Ondřej Lysoněk 45bfd2
 Drivers/Speech/eSpeak-NG/Makefile.in               |  29 ++++
Ondřej Lysoněk 45bfd2
 Drivers/Speech/eSpeak-NG/README                    |  34 ++++
Ondřej Lysoněk 45bfd2
 Drivers/Speech/eSpeak-NG/speech.c                  | 174 +++++++++++++++++++++
Ondřej Lysoněk 45bfd2
 README                                             |   1 +
Ondřej Lysoněk 45bfd2
 brltty.spec.in                                     |  25 +++
Ondřej Lysoněk 45bfd2
 cfg-android                                        |   1 +
Ondřej Lysoněk 45bfd2
 cfg-darwin                                         |   1 +
Ondřej Lysoněk 45bfd2
 cfg-dos                                            |   1 +
Ondřej Lysoněk 45bfd2
 config.mk.in                                       |   1 +
Ondřej Lysoněk 45bfd2
 configure.ac                                       |   4 +
Ondřej Lysoněk 45bfd2
 19 files changed, 292 insertions(+), 2 deletions(-)
Ondřej Lysoněk 45bfd2
 create mode 100644 Drivers/Speech/eSpeak-NG/Makefile.in
Ondřej Lysoněk 45bfd2
 create mode 100644 Drivers/Speech/eSpeak-NG/README
Ondřej Lysoněk 45bfd2
 create mode 100644 Drivers/Speech/eSpeak-NG/speech.c
Ondřej Lysoněk 45bfd2
Ondřej Lysoněk 45bfd2
diff --git a/Documents/CONTRIBUTORS b/Documents/CONTRIBUTORS
Ondřej Lysoněk 45bfd2
index 5a3af85b8..282ea193a 100644
Ondřej Lysoněk 45bfd2
--- a/Documents/CONTRIBUTORS
Ondřej Lysoněk 45bfd2
+++ b/Documents/CONTRIBUTORS
Ondřej Lysoněk 45bfd2
@@ -50,6 +50,7 @@ Nikita Tseykovets <tseikovets@rambler.ru>
Ondřej Lysoněk 45bfd2
 Ole Guldberg <ole@omgwtf.dk>
Ondřej Lysoněk 45bfd2
 Olivier Bert <obert01@mistigri.org>
Ondřej Lysoněk 45bfd2
 Ollie Mallard <mallard@ilgerone.net>
Ondřej Lysoněk 45bfd2
+olysonek
Ondřej Lysoněk 45bfd2
 Oscar Fernandez <ofa@once.es>
Ondřej Lysoněk 45bfd2
 Pete De Vasto <pdevasto@incyte.com>
Ondřej Lysoněk 45bfd2
 Peter Lundblad <plundblad@google.com>
Ondřej Lysoněk 45bfd2
diff --git a/Documents/Manual-BRLTTY/English/driver-codes.sgml b/Documents/Manual-BRLTTY/English/driver-codes.sgml
Ondřej Lysoněk 45bfd2
index 09eae4039..870cde7e3 100644
Ondřej Lysoněk 45bfd2
--- a/Documents/Manual-BRLTTY/English/driver-codes.sgml
Ondřej Lysoněk 45bfd2
+++ b/Documents/Manual-BRLTTY/English/driver-codes.sgml
Ondřej Lysoněk 45bfd2
@@ -10,6 +10,7 @@ bm|Baum (Native, HT, PB1, PB2)@
Ondřej Lysoněk 45bfd2
 bn|BrailleNote@
Ondřej Lysoněk 45bfd2
 cb|CombiBraille@
Ondřej Lysoněk 45bfd2
 ec|EcoBraille@
Ondřej Lysoněk 45bfd2
+en|eSpeak-NG@
Ondřej Lysoněk 45bfd2
 es|eSpeak@
Ondřej Lysoněk 45bfd2
 eu|EuroBraille@
Ondřej Lysoněk 45bfd2
 fl|FestivalLite@
Ondřej Lysoněk 45bfd2
diff --git a/Documents/Manual-BRLTTY/English/speech-drivers.sgml b/Documents/Manual-BRLTTY/English/speech-drivers.sgml
Ondřej Lysoněk 45bfd2
index 49caa060f..66c66e850 100644
Ondřej Lysoněk 45bfd2
--- a/Documents/Manual-BRLTTY/English/speech-drivers.sgml
Ondřej Lysoněk 45bfd2
+++ b/Documents/Manual-BRLTTY/English/speech-drivers.sgml
Ondřej Lysoněk 45bfd2
@@ -8,6 +8,8 @@ CombiBraille
Ondřej Lysoněk 45bfd2
   |@
Ondřej Lysoněk 45bfd2
 eSpeak
Ondřej Lysoněk 45bfd2
   |text to speech engine@
Ondřej Lysoněk 45bfd2
+eSpeak-NG
Ondřej Lysoněk 45bfd2
+  |text to speech engine@
Ondřej Lysoněk 45bfd2
 ExternalSpeech
Ondřej Lysoněk 45bfd2
   |runs /usr/local/bin/externalspeech@
Ondřej Lysoněk 45bfd2
 Festival
Ondřej Lysoněk 45bfd2
diff --git a/Documents/Manual-BRLTTY/French/driver-codes.sgml b/Documents/Manual-BRLTTY/French/driver-codes.sgml
Ondřej Lysoněk 45bfd2
index 09eae4039..870cde7e3 100644
Ondřej Lysoněk 45bfd2
--- a/Documents/Manual-BRLTTY/French/driver-codes.sgml
Ondřej Lysoněk 45bfd2
+++ b/Documents/Manual-BRLTTY/French/driver-codes.sgml
Ondřej Lysoněk 45bfd2
@@ -10,6 +10,7 @@ bm|Baum (Native, HT, PB1, PB2)@
Ondřej Lysoněk 45bfd2
 bn|BrailleNote@
Ondřej Lysoněk 45bfd2
 cb|CombiBraille@
Ondřej Lysoněk 45bfd2
 ec|EcoBraille@
Ondřej Lysoněk 45bfd2
+en|eSpeak-NG@
Ondřej Lysoněk 45bfd2
 es|eSpeak@
Ondřej Lysoněk 45bfd2
 eu|EuroBraille@
Ondřej Lysoněk 45bfd2
 fl|FestivalLite@
Ondřej Lysoněk 45bfd2
diff --git a/Documents/Manual-BRLTTY/French/speech-drivers.sgml b/Documents/Manual-BRLTTY/French/speech-drivers.sgml
Ondřej Lysoněk 45bfd2
index 9d079b6c6..ede82d398 100644
Ondřej Lysoněk 45bfd2
--- a/Documents/Manual-BRLTTY/French/speech-drivers.sgml
Ondřej Lysoněk 45bfd2
+++ b/Documents/Manual-BRLTTY/French/speech-drivers.sgml
Ondřej Lysoněk 45bfd2
@@ -6,6 +6,8 @@ CombiBraille
Ondřej Lysoněk 45bfd2
   |@
Ondřej Lysoněk 45bfd2
 eSpeak
Ondřej Lysoněk 45bfd2
   |text to speech engine@
Ondřej Lysoněk 45bfd2
+eSpeak-NG
Ondřej Lysoněk 45bfd2
+  |text to speech engine@
Ondřej Lysoněk 45bfd2
 ExternalSpeech
Ondřej Lysoněk 45bfd2
   |runs /usr/local/bin/externalspeech@
Ondřej Lysoněk 45bfd2
 Festival
Ondřej Lysoněk 45bfd2
diff --git a/Documents/README.DOS b/Documents/README.DOS
Ondřej Lysoněk 45bfd2
index eca9540ec..5b5de15c4 100644
Ondřej Lysoněk 45bfd2
--- a/Documents/README.DOS
Ondřej Lysoněk 45bfd2
+++ b/Documents/README.DOS
Ondřej Lysoněk 45bfd2
@@ -285,8 +285,9 @@ You should be able to use a configure command like this one::
Ondřej Lysoněk 45bfd2
       --disable-api --disable-icu --disable-x \
Ondřej Lysoněk 45bfd2
       --without-usb-package --without-bluetooth-package \
Ondřej Lysoněk 45bfd2
       --without-libbraille --with-braille-driver=-vr,all \
Ondřej Lysoněk 45bfd2
-      --without-espeak --without-flite \
Ondřej Lysoněk 45bfd2
-      --without-speechd --with-speech-driver=all \
Ondřej Lysoněk 45bfd2
+      --without-espeak --without-espeak-ng \
Ondřej Lysoněk 45bfd2
+      --without-flite --without-speechd \
Ondřej Lysoněk 45bfd2
+      --with-speech-driver=all \
Ondřej Lysoněk 45bfd2
       --with-screen-driver=pb,-all
Ondřej Lysoněk 45bfd2
 
Ondřej Lysoněk 45bfd2
 The ``cfg-dos`` Script
Ondřej Lysoněk 45bfd2
diff --git a/Documents/brltty.1.in b/Documents/brltty.1.in
Ondřej Lysoněk 45bfd2
index ab7b3c1db..b95aaa964 100644
Ondřej Lysoněk 45bfd2
--- a/Documents/brltty.1.in
Ondřej Lysoněk 45bfd2
+++ b/Documents/brltty.1.in
Ondřej Lysoněk 45bfd2
@@ -714,6 +714,9 @@ CombiBraille
Ondřej Lysoněk 45bfd2
 .B ec
Ondřej Lysoněk 45bfd2
 EcoBraille
Ondřej Lysoněk 45bfd2
 .TP 4
Ondřej Lysoněk 45bfd2
+.B en
Ondřej Lysoněk 45bfd2
+eSpeak-NG
Ondřej Lysoněk 45bfd2
+.TP 4
Ondřej Lysoněk 45bfd2
 .B es
Ondřej Lysoněk 45bfd2
 eSpeak
Ondřej Lysoněk 45bfd2
 .TP 4
Ondřej Lysoněk 45bfd2
diff --git a/Documents/brltty.conf.in b/Documents/brltty.conf.in
Ondřej Lysoněk 45bfd2
index e11273674..80967177a 100644
Ondřej Lysoněk 45bfd2
--- a/Documents/brltty.conf.in
Ondřej Lysoněk 45bfd2
+++ b/Documents/brltty.conf.in
Ondřej Lysoněk 45bfd2
@@ -343,6 +343,7 @@
Ondřej Lysoněk 45bfd2
 #speech-driver	an	# Android (text to speech engine)
Ondřej Lysoněk 45bfd2
 #speech-driver	bl	# BrailleLite
Ondřej Lysoněk 45bfd2
 #speech-driver	cb	# CombiBraille
Ondřej Lysoněk 45bfd2
+#speech-driver	en	# eSpeak-NG (text to speech engine)
Ondřej Lysoněk 45bfd2
 #speech-driver	es	# eSpeak (text to speech engine)
Ondřej Lysoněk 45bfd2
 #speech-driver	fl	# FestivalLite (text to speech engine)
Ondřej Lysoněk 45bfd2
 #speech-driver	fv	# Festival (text to speech engine)
Ondřej Lysoněk 45bfd2
@@ -383,6 +384,12 @@
Ondřej Lysoněk 45bfd2
 #speech-parameters es:PunctList=
Ondřej Lysoněk 45bfd2
 #speech-parameters es:Voice=default
Ondřej Lysoněk 45bfd2
 
Ondřej Lysoněk 45bfd2
+# eSpeak-NG Speech Driver Parameters
Ondřej Lysoněk 45bfd2
+#speech-parameters en:MaxRate=450 # [80-]
Ondřej Lysoněk 45bfd2
+#speech-parameters en:Path=
Ondřej Lysoněk 45bfd2
+#speech-parameters en:PunctList=
Ondřej Lysoněk 45bfd2
+#speech-parameters en:Voice=en
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
 # ExternalSpeech Speech Driver Parameters
Ondřej Lysoněk 45bfd2
 #speech-parameters xs:Program=/usr/local/bin/externalspeech
Ondřej Lysoněk 45bfd2
 #speech-parameters xs:Uid=65534
Ondřej Lysoněk 45bfd2
diff --git a/Documents/speech-driver.csv b/Documents/speech-driver.csv
Ondřej Lysoněk 45bfd2
index 2e339a6bf..b56e85cbf 100644
Ondřej Lysoněk 45bfd2
--- a/Documents/speech-driver.csv
Ondřej Lysoněk 45bfd2
+++ b/Documents/speech-driver.csv
Ondřej Lysoněk 45bfd2
@@ -4,6 +4,7 @@
Ondřej Lysoněk 45bfd2
 "bl","BrailleLite"
Ondřej Lysoněk 45bfd2
 "cb","CombiBraille"
Ondřej Lysoněk 45bfd2
 "es","eSpeak (text to speech engine)"
Ondřej Lysoněk 45bfd2
+"en","eSpeak-NG (text to speech engine)"
Ondřej Lysoněk 45bfd2
 "fl","FestivalLite (text to speech engine)"
Ondřej Lysoněk 45bfd2
 "fv","Festival (text to speech engine)"
Ondřej Lysoněk 45bfd2
 "gs","GenericSay (pipes to /usr/local/bin/say)"
Ondřej Lysoněk 45bfd2
diff --git a/Drivers/Speech/eSpeak-NG/Makefile.in b/Drivers/Speech/eSpeak-NG/Makefile.in
Ondřej Lysoněk 45bfd2
new file mode 100644
Ondřej Lysoněk 45bfd2
index 000000000..d91f9c59d
Ondřej Lysoněk 45bfd2
--- /dev/null
Ondřej Lysoněk 45bfd2
+++ b/Drivers/Speech/eSpeak-NG/Makefile.in
Ondřej Lysoněk 45bfd2
@@ -0,0 +1,29 @@
Ondřej Lysoněk 45bfd2
+###############################################################################
Ondřej Lysoněk 45bfd2
+# BRLTTY - A background process providing access to the console screen (when in
Ondřej Lysoněk 45bfd2
+#          text mode) for a blind person using a refreshable braille display.
Ondřej Lysoněk 45bfd2
+#
Ondřej Lysoněk 45bfd2
+# Copyright (C) 1995-2018 by The BRLTTY Developers.
Ondřej Lysoněk 45bfd2
+#
Ondřej Lysoněk 45bfd2
+# BRLTTY comes with ABSOLUTELY NO WARRANTY.
Ondřej Lysoněk 45bfd2
+#
Ondřej Lysoněk 45bfd2
+# This is free software, placed under the terms of the
Ondřej Lysoněk 45bfd2
+# GNU Lesser General Public License, as published by the Free Software
Ondřej Lysoněk 45bfd2
+# Foundation; either version 2.1 of the License, or (at your option) any
Ondřej Lysoněk 45bfd2
+# later version. Please see the file LICENSE-LGPL for details.
Ondřej Lysoněk 45bfd2
+#
Ondřej Lysoněk 45bfd2
+# Web Page: http://brltty.com/
Ondřej Lysoněk 45bfd2
+#
Ondřej Lysoněk 45bfd2
+# This software is maintained by Dave Mielke <dave@mielke.cc>.
Ondřej Lysoněk 45bfd2
+###############################################################################
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+DRIVER_CODE = en
Ondřej Lysoněk 45bfd2
+DRIVER_NAME = eSpeak-NG
Ondřej Lysoněk 45bfd2
+DRIVER_COMMENT = text to speech engine
Ondřej Lysoněk 45bfd2
+DRIVER_VERSION = 0.1
Ondřej Lysoněk 45bfd2
+DRIVER_DEVELOPERS = Nicolas Pitre <nico@fluxnic.net>, Ondřej Lysoněk <olysonek@redhat.com>
Ondřej Lysoněk 45bfd2
+SPK_OBJS = @speech_libraries_en@
Ondřej Lysoněk 45bfd2
+include $(SRC_TOP)speech.mk
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+speech.$O:
Ondřej Lysoněk 45bfd2
+	$(CC) $(SPK_CFLAGS) -I$(ESPEAK_NG_ROOT)/include -c $(SRC_DIR)/speech.c
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
diff --git a/Drivers/Speech/eSpeak-NG/README b/Drivers/Speech/eSpeak-NG/README
Ondřej Lysoněk 45bfd2
new file mode 100644
Ondřej Lysoněk 45bfd2
index 000000000..825848aa0
Ondřej Lysoněk 45bfd2
--- /dev/null
Ondřej Lysoněk 45bfd2
+++ b/Drivers/Speech/eSpeak-NG/README
Ondřej Lysoněk 45bfd2
@@ -0,0 +1,34 @@
Ondřej Lysoněk 45bfd2
+This directory contains the BRLTTY speech driver for the eSpeak-NG text to
Ondřej Lysoněk 45bfd2
+speech engine.  The eSpeak-NG web site is
Ondřej Lysoněk 45bfd2
+https://github.com/espeak-ng/espeak-ng/.
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+eSpeak-NG comes with a simple command-line tool called espeak-ng which can be
Ondřej Lysoněk 45bfd2
+used to test it, and to recompile modified dictionaries, etc. Please see
Ondřej Lysoněk 45bfd2
+the espeak-ng man page for more information.
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+BRLTTY's configure script automatically includes this driver if the
Ondřej Lysoněk 45bfd2
+eSpeak-NG development library is installed.
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+This driver recognizes the following parameters:
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+path
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+	Specifies the directory containing the espeak-ng-data directory.
Ondřej Lysoněk 45bfd2
+	If not specified, the default location is used.
Ondřej Lysoněk 45bfd2
+	
Ondřej Lysoněk 45bfd2
+punctlist
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+	Specified a list of punctuation characters whose names are to be
Ondřej Lysoněk 45bfd2
+	spoken when the speech punctuation parameter is set to "Some".
Ondřej Lysoněk 45bfd2
+	If not specified, a default list is used.
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+voice
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+	Specifies a voice/language to use.  The complete list of available
Ondřej Lysoněk 45bfd2
+	voices may be obtained with the command 'espeak-ng --voices'.
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+maxrate
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+	Overrides the maximum speech rate value. The default is 450.
Ondřej Lysoněk 45bfd2
+	This cannot be lower than 80.
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
diff --git a/Drivers/Speech/eSpeak-NG/speech.c b/Drivers/Speech/eSpeak-NG/speech.c
Ondřej Lysoněk 45bfd2
new file mode 100644
Ondřej Lysoněk 45bfd2
index 000000000..af918c971
Ondřej Lysoněk 45bfd2
--- /dev/null
Ondřej Lysoněk 45bfd2
+++ b/Drivers/Speech/eSpeak-NG/speech.c
Ondřej Lysoněk 45bfd2
@@ -0,0 +1,174 @@
Ondřej Lysoněk 45bfd2
+/*
Ondřej Lysoněk 45bfd2
+ * BRLTTY - A background process providing access to the console screen (when in
Ondřej Lysoněk 45bfd2
+ *          text mode) for a blind person using a refreshable braille display.
Ondřej Lysoněk 45bfd2
+ *
Ondřej Lysoněk 45bfd2
+ * Copyright (C) 1995-2018 by The BRLTTY Developers.
Ondřej Lysoněk 45bfd2
+ *
Ondřej Lysoněk 45bfd2
+ * BRLTTY comes with ABSOLUTELY NO WARRANTY.
Ondřej Lysoněk 45bfd2
+ *
Ondřej Lysoněk 45bfd2
+ * This is free software, placed under the terms of the
Ondřej Lysoněk 45bfd2
+ * GNU Lesser General Public License, as published by the Free Software
Ondřej Lysoněk 45bfd2
+ * Foundation; either version 2.1 of the License, or (at your option) any
Ondřej Lysoněk 45bfd2
+ * later version. Please see the file LICENSE-LGPL for details.
Ondřej Lysoněk 45bfd2
+ *
Ondřej Lysoněk 45bfd2
+ * Web Page: http://brltty.com/
Ondřej Lysoněk 45bfd2
+ *
Ondřej Lysoněk 45bfd2
+ * This software is maintained by Dave Mielke <dave@mielke.cc>.
Ondřej Lysoněk 45bfd2
+ */
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+#include "prologue.h"
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+#include <stdio.h>
Ondřej Lysoněk 45bfd2
+#include <stdlib.h>
Ondřej Lysoněk 45bfd2
+#include <string.h>
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+#include "log.h"
Ondřej Lysoněk 45bfd2
+#include "parse.h"
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+typedef enum {
Ondřej Lysoněk 45bfd2
+	PARM_PATH,
Ondřej Lysoněk 45bfd2
+	PARM_PUNCTLIST,
Ondřej Lysoněk 45bfd2
+	PARM_VOICE,
Ondřej Lysoněk 45bfd2
+	PARM_MAXRATE
Ondřej Lysoněk 45bfd2
+} DriverParameter;
Ondřej Lysoněk 45bfd2
+#define SPKPARMS "path", "punctlist", "voice", "maxrate"
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+#include "spk_driver.h"
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+#include <espeak-ng/speak_lib.h>
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+static int maxrate = espeakRATE_MAXIMUM;
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+static void
Ondřej Lysoněk 45bfd2
+spk_say(volatile SpeechSynthesizer *spk, const unsigned char *buffer, size_t length, size_t count, const unsigned char *attributes)
Ondřej Lysoněk 45bfd2
+{
Ondřej Lysoněk 45bfd2
+	int result;
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+	/* add 1 to the length in order to pass along the trailing zero */
Ondřej Lysoněk 45bfd2
+	result = espeak_Synth(buffer, length+1, 0, POS_CHARACTER, 0,
Ondřej Lysoněk 45bfd2
+			espeakCHARS_UTF8, NULL, (void *)spk);
Ondřej Lysoněk 45bfd2
+	if (result != EE_OK)
Ondřej Lysoněk 45bfd2
+		logMessage(LOG_ERR, "eSpeak-NG: Synth() returned error %d", result);
Ondřej Lysoněk 45bfd2
+}
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+static void
Ondřej Lysoněk 45bfd2
+spk_mute(volatile SpeechSynthesizer *spk)
Ondřej Lysoněk 45bfd2
+{
Ondřej Lysoněk 45bfd2
+	espeak_Cancel();
Ondřej Lysoněk 45bfd2
+}
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+static int SynthCallback(short *audio, int numsamples, espeak_EVENT *events)
Ondřej Lysoněk 45bfd2
+{
Ondřej Lysoněk 45bfd2
+	volatile SpeechSynthesizer *spk = events->user_data;
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+	while (events->type != espeakEVENT_LIST_TERMINATED) {
Ondřej Lysoněk 45bfd2
+		if (events->type == espeakEVENT_WORD)
Ondřej Lysoněk 45bfd2
+			tellSpeechLocation(spk, events->text_position - 1);
Ondřej Lysoněk 45bfd2
+		if (events->type == espeakEVENT_MSG_TERMINATED)
Ondřej Lysoněk 45bfd2
+			tellSpeechFinished(spk);
Ondřej Lysoněk 45bfd2
+		events++;
Ondřej Lysoněk 45bfd2
+	}
Ondřej Lysoněk 45bfd2
+	return 0;
Ondřej Lysoněk 45bfd2
+}
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+static void
Ondřej Lysoněk 45bfd2
+spk_drain(volatile SpeechSynthesizer *spk)
Ondřej Lysoněk 45bfd2
+{
Ondřej Lysoněk 45bfd2
+	espeak_Synchronize();
Ondřej Lysoněk 45bfd2
+}
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+static void
Ondřej Lysoněk 45bfd2
+spk_setVolume(volatile SpeechSynthesizer *spk, unsigned char setting)
Ondřej Lysoněk 45bfd2
+{
Ondřej Lysoněk 45bfd2
+	int volume = getIntegerSpeechVolume(setting, 50);
Ondřej Lysoněk 45bfd2
+	espeak_SetParameter(espeakVOLUME, volume, 0);
Ondřej Lysoněk 45bfd2
+}
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+static void
Ondřej Lysoněk 45bfd2
+spk_setRate(volatile SpeechSynthesizer *spk, unsigned char setting)
Ondřej Lysoněk 45bfd2
+{
Ondřej Lysoněk 45bfd2
+	int h_range = (maxrate - espeakRATE_MINIMUM)/2;
Ondřej Lysoněk 45bfd2
+	int rate = getIntegerSpeechRate(setting, h_range) + espeakRATE_MINIMUM;
Ondřej Lysoněk 45bfd2
+	espeak_SetParameter(espeakRATE, rate, 0);
Ondřej Lysoněk 45bfd2
+}
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+static void
Ondřej Lysoněk 45bfd2
+spk_setPitch(volatile SpeechSynthesizer *spk, unsigned char setting)
Ondřej Lysoněk 45bfd2
+{
Ondřej Lysoněk 45bfd2
+	int pitch = getIntegerSpeechPitch(setting, 50);
Ondřej Lysoněk 45bfd2
+	espeak_SetParameter(espeakPITCH, pitch, 0);
Ondřej Lysoněk 45bfd2
+}
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+static void
Ondřej Lysoněk 45bfd2
+spk_setPunctuation(volatile SpeechSynthesizer *spk, SpeechPunctuation setting)
Ondřej Lysoněk 45bfd2
+{
Ondřej Lysoněk 45bfd2
+	espeak_PUNCT_TYPE punct;
Ondřej Lysoněk 45bfd2
+	if (setting <= SPK_PUNCTUATION_NONE)
Ondřej Lysoněk 45bfd2
+		punct = espeakPUNCT_NONE;
Ondřej Lysoněk 45bfd2
+	else if (setting >= SPK_PUNCTUATION_ALL)
Ondřej Lysoněk 45bfd2
+		punct = espeakPUNCT_ALL;
Ondřej Lysoněk 45bfd2
+	else
Ondřej Lysoněk 45bfd2
+		punct = espeakPUNCT_SOME;
Ondřej Lysoněk 45bfd2
+	espeak_SetParameter(espeakPUNCTUATION, punct, 0);
Ondřej Lysoněk 45bfd2
+}
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+static int spk_construct(volatile SpeechSynthesizer *spk, char **parameters)
Ondřej Lysoněk 45bfd2
+{
Ondřej Lysoněk 45bfd2
+	char *data_path, *voicename, *punctlist;
Ondřej Lysoněk 45bfd2
+	int result;
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+	spk->setVolume = spk_setVolume;
Ondřej Lysoněk 45bfd2
+	spk->setRate = spk_setRate;
Ondřej Lysoněk 45bfd2
+	spk->setPitch = spk_setPitch;
Ondřej Lysoněk 45bfd2
+	spk->setPunctuation = spk_setPunctuation;
Ondřej Lysoněk 45bfd2
+	spk->drain = spk_drain;
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+	logMessage(LOG_INFO, "eSpeak-NG version %s", espeak_Info(NULL));
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+	data_path = parameters[PARM_PATH];
Ondřej Lysoněk 45bfd2
+	if (data_path && !*data_path)
Ondřej Lysoněk 45bfd2
+		data_path = NULL;
Ondřej Lysoněk 45bfd2
+	result = espeak_Initialize(AUDIO_OUTPUT_PLAYBACK, 0, data_path, 0);
Ondřej Lysoněk 45bfd2
+	if (result < 0) {
Ondřej Lysoněk 45bfd2
+		logMessage(LOG_ERR, "eSpeak-NG: initialization failed");
Ondřej Lysoněk 45bfd2
+		return 0;
Ondřej Lysoněk 45bfd2
+	}
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+	voicename = parameters[PARM_VOICE];
Ondřej Lysoněk 45bfd2
+	if(!voicename || !*voicename)
Ondřej Lysoněk 45bfd2
+		voicename = "en";
Ondřej Lysoněk 45bfd2
+	result = espeak_SetVoiceByName(voicename);
Ondřej Lysoněk 45bfd2
+	if (result != EE_OK) {
Ondřej Lysoněk 45bfd2
+		espeak_VOICE voice_select;
Ondřej Lysoněk 45bfd2
+		memset(&voice_select, 0, sizeof(voice_select));
Ondřej Lysoněk 45bfd2
+		voice_select.languages = voicename;
Ondřej Lysoněk 45bfd2
+		result = espeak_SetVoiceByProperties(&voice_select);
Ondřej Lysoněk 45bfd2
+	}
Ondřej Lysoněk 45bfd2
+	if (result != EE_OK) {
Ondřej Lysoněk 45bfd2
+		logMessage(LOG_ERR, "eSpeak-NG: unable to load voice '%s'", voicename);
Ondřej Lysoněk 45bfd2
+		return 0;
Ondřej Lysoněk 45bfd2
+	}
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+	punctlist = parameters[PARM_PUNCTLIST];
Ondřej Lysoněk 45bfd2
+	if (punctlist && *punctlist) {
Ondřej Lysoněk 45bfd2
+		wchar_t w_punctlist[strlen(punctlist) + 1];
Ondřej Lysoněk 45bfd2
+		int i = 0;
Ondřej Lysoněk 45bfd2
+		while ((w_punctlist[i] = punctlist[i]) != 0) i++;
Ondřej Lysoněk 45bfd2
+		espeak_SetPunctuationList(w_punctlist);
Ondřej Lysoněk 45bfd2
+	}
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+	if (parameters[PARM_MAXRATE]) {
Ondřej Lysoněk 45bfd2
+		int val = atoi(parameters[PARM_MAXRATE]);
Ondřej Lysoněk 45bfd2
+		if (val > espeakRATE_MINIMUM) maxrate = val;
Ondřej Lysoněk 45bfd2
+	}
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+	espeak_SetSynthCallback(SynthCallback);
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+	return 1;
Ondřej Lysoněk 45bfd2
+}
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+static void spk_destruct(volatile SpeechSynthesizer *spk)
Ondřej Lysoněk 45bfd2
+{
Ondřej Lysoněk 45bfd2
+	espeak_Cancel();
Ondřej Lysoněk 45bfd2
+	espeak_Terminate();
Ondřej Lysoněk 45bfd2
+}
Ondřej Lysoněk 45bfd2
diff --git a/README b/README
Ondřej Lysoněk 45bfd2
index 5fcd8c221..9fd946eb5 100644
Ondřej Lysoněk 45bfd2
--- a/README
Ondřej Lysoněk 45bfd2
+++ b/README
Ondřej Lysoněk 45bfd2
@@ -210,6 +210,7 @@ The following speech synthesizers are supported:
Ondřej Lysoněk 45bfd2
 -  BrailleLite
Ondřej Lysoněk 45bfd2
 -  CombiBraille
Ondřej Lysoněk 45bfd2
 -  eSpeak [text to speech engine]
Ondřej Lysoněk 45bfd2
+-  eSpeak-NG [text to speech engine]
Ondřej Lysoněk 45bfd2
 -  ExternalSpeech [runs /usr/local/bin/externalspeech]
Ondřej Lysoněk 45bfd2
 -  Festival [text to speech engine]
Ondřej Lysoněk 45bfd2
 -  FestivalLite [text to speech engine]
Ondřej Lysoněk 45bfd2
diff --git a/brltty.spec.in b/brltty.spec.in
Ondřej Lysoněk 45bfd2
index 8a4986c5d..f5aa33dc2 100644
Ondřej Lysoněk 45bfd2
--- a/brltty.spec.in
Ondřej Lysoněk 45bfd2
+++ b/brltty.spec.in
Ondřej Lysoněk 45bfd2
@@ -144,6 +144,27 @@ Install this package if you would like to be able to use the
Ondřej Lysoněk 45bfd2
 eSpeak text-to-speech engine.
Ondřej Lysoněk 45bfd2
 
Ondřej Lysoněk 45bfd2
 
Ondřej Lysoněk 45bfd2
+%package -n brltty-speech-espeak-ng
Ondřej Lysoněk 45bfd2
+Version: @PACKAGE_VERSION@
Ondřej Lysoněk 45bfd2
+Release: 1
Ondřej Lysoněk 45bfd2
+Group: System Environment/Daemons
Ondřej Lysoněk 45bfd2
+License: GPL
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+Requires: espeak-ng
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+BuildRequires: espeak-ng-devel
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+AutoProv: no
Ondřej Lysoněk 45bfd2
+AutoReq: yes
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+Summary: eSpeak-NG speech driver for BRLTTY.
Ondřej Lysoněk 45bfd2
+%description -n brltty-speech-espeak-ng
Ondřej Lysoněk 45bfd2
+This package provides the eSpeak-NG speech driver for BRLTTY.
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+Install this package if you would like to be able to use the
Ondřej Lysoněk 45bfd2
+eSpeak-NG text-to-speech engine.
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
 %package -n brltty-speech-festival
Ondřej Lysoněk 45bfd2
 Version: @PACKAGE_VERSION@
Ondřej Lysoněk 45bfd2
 Release: 1
Ondřej Lysoněk 45bfd2
@@ -512,6 +533,7 @@ rm -fr "${RPM_BUILD_ROOT}"
Ondřej Lysoněk 45bfd2
 %{_libdir}/brltty
Ondřej Lysoněk 45bfd2
 %exclude %{_libdir}/brltty/libbrlttybba.so
Ondřej Lysoněk 45bfd2
 %exclude %{_libdir}/brltty/libbrlttybxw.so
Ondřej Lysoněk 45bfd2
+%exclude %{_libdir}/brltty/libbrlttysen.so
Ondřej Lysoněk 45bfd2
 %exclude %{_libdir}/brltty/libbrlttyses.so
Ondřej Lysoněk 45bfd2
 %exclude %{_libdir}/brltty/libbrlttysfl.so
Ondřej Lysoněk 45bfd2
 %exclude %{_libdir}/brltty/libbrlttysfv.so
Ondřej Lysoněk 45bfd2
@@ -541,6 +563,9 @@ rm -fr "${RPM_BUILD_ROOT}"
Ondřej Lysoněk 45bfd2
 %files -n brltty-speech-espeak
Ondřej Lysoněk 45bfd2
 %{_libdir}/brltty/libbrlttyses.so
Ondřej Lysoněk 45bfd2
 
Ondřej Lysoněk 45bfd2
+%files -n brltty-speech-espeak-ng
Ondřej Lysoněk 45bfd2
+%{_libdir}/brltty/libbrlttysen.so
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
 %files -n brltty-speech-festival
Ondřej Lysoněk 45bfd2
 %{_libdir}/brltty/libbrlttysfv.so
Ondřej Lysoněk 45bfd2
 
Ondřej Lysoněk 45bfd2
diff --git a/cfg-android b/cfg-android
Ondřej Lysoněk 45bfd2
index 1c9ad3e14..db83a28a6 100755
Ondřej Lysoněk 45bfd2
--- a/cfg-android
Ondřej Lysoněk 45bfd2
+++ b/cfg-android
Ondřej Lysoněk 45bfd2
@@ -89,6 +89,7 @@ export LDFLAGS="-Wl,--fix-cortex-a8"
Ondřej Lysoněk 45bfd2
    --with-braille-driver=-ba,-bg,-tt,-vr,al,at,bm,bn,ce,eu,fs,hm,ht,hw,ic,ir,md,mm,mt,np,pg,pm,sk,vo \
Ondřej Lysoněk 45bfd2
    \
Ondřej Lysoněk 45bfd2
    --without-espeak \
Ondřej Lysoněk 45bfd2
+   --without-espeak-ng \
Ondřej Lysoněk 45bfd2
    --without-flite \
Ondřej Lysoněk 45bfd2
    --without-mikropuhe \
Ondřej Lysoněk 45bfd2
    --without-speechd \
Ondřej Lysoněk 45bfd2
diff --git a/cfg-darwin b/cfg-darwin
Ondřej Lysoněk 45bfd2
index 13741c371..992292717 100755
Ondřej Lysoněk 45bfd2
--- a/cfg-darwin
Ondřej Lysoněk 45bfd2
+++ b/cfg-darwin
Ondřej Lysoněk 45bfd2
@@ -25,6 +25,7 @@
Ondřej Lysoněk 45bfd2
    --without-libbraille \
Ondřej Lysoněk 45bfd2
    \
Ondřej Lysoněk 45bfd2
    --without-espeak \
Ondřej Lysoněk 45bfd2
+   --without-espeak-ng \
Ondřej Lysoněk 45bfd2
    --without-flite \
Ondřej Lysoněk 45bfd2
    --without-mikropuhe \
Ondřej Lysoněk 45bfd2
    --without-speechd \
Ondřej Lysoněk 45bfd2
diff --git a/cfg-dos b/cfg-dos
Ondřej Lysoněk 45bfd2
index 82277980b..55427b7b2 100755
Ondřej Lysoněk 45bfd2
--- a/cfg-dos
Ondřej Lysoněk 45bfd2
+++ b/cfg-dos
Ondřej Lysoněk 45bfd2
@@ -57,6 +57,7 @@ export LDFLAGS=""
Ondřej Lysoněk 45bfd2
    --with-braille-driver=-vr,all \
Ondřej Lysoněk 45bfd2
    \
Ondřej Lysoněk 45bfd2
    --without-espeak \
Ondřej Lysoněk 45bfd2
+   --without-espeak-ng \
Ondřej Lysoněk 45bfd2
    --without-flite \
Ondřej Lysoněk 45bfd2
    --without-mikropuhe \
Ondřej Lysoněk 45bfd2
    --without-speechd \
Ondřej Lysoněk 45bfd2
diff --git a/config.mk.in b/config.mk.in
Ondřej Lysoněk 45bfd2
index ead6ca348..89af949de 100644
Ondřej Lysoněk 45bfd2
--- a/config.mk.in
Ondřej Lysoněk 45bfd2
+++ b/config.mk.in
Ondřej Lysoněk 45bfd2
@@ -370,6 +370,7 @@ SCREEN_DRIVER_LIBRARIES = @screen_driver_libraries@
Ondřej Lysoněk 45bfd2
 SCREEN_DRIVERS = @screen_drivers@
Ondřej Lysoněk 45bfd2
 
Ondřej Lysoněk 45bfd2
 ESPEAK_ROOT = @espeak_root@
Ondřej Lysoněk 45bfd2
+ESPEAK_NG_ROOT = @espeak_ng_root@
Ondřej Lysoněk 45bfd2
 FLITE_ROOT = @flite_root@
Ondřej Lysoněk 45bfd2
 FLITE_LANGUAGE = @flite_language@
Ondřej Lysoněk 45bfd2
 FLITE_LEXICON = @flite_lexicon@
Ondřej Lysoněk 45bfd2
diff --git a/configure.ac b/configure.ac
Ondřej Lysoněk 45bfd2
index 39eb98390..b86f85209 100644
Ondřej Lysoněk 45bfd2
--- a/configure.ac
Ondřej Lysoněk 45bfd2
+++ b/configure.ac
Ondřej Lysoněk 45bfd2
@@ -1742,6 +1742,10 @@ BRLTTY_ARG_DISABLE(
Ondřej Lysoněk 45bfd2
    BRLTTY_SPEECH_DRIVER([bl], [BrailleLite])
Ondřej Lysoněk 45bfd2
    BRLTTY_SPEECH_DRIVER([cb], [CombiBraille])
Ondřej Lysoněk 45bfd2
 
Ondřej Lysoněk 45bfd2
+   BRLTTY_IF_PACKAGE([eSpeak-NG], [espeak_ng], [include/espeak-ng/speak_lib.h], [dnl
Ondřej Lysoněk 45bfd2
+      BRLTTY_SPEECH_DRIVER([en], [eSpeak-NG], [-L$(ESPEAK_NG_ROOT)/lib -lespeak-ng])
Ondřej Lysoněk 45bfd2
+   ])
Ondřej Lysoněk 45bfd2
+
Ondřej Lysoněk 45bfd2
    BRLTTY_IF_PACKAGE([eSpeak], [espeak], [include/espeak/speak_lib.h], [dnl
Ondřej Lysoněk 45bfd2
       BRLTTY_SPEECH_DRIVER([es], [eSpeak], [-L$(ESPEAK_ROOT)/lib -lespeak])
Ondřej Lysoněk 45bfd2
    ])
Ondřej Lysoněk 45bfd2
-- 
Ondřej Lysoněk 45bfd2
2.14.3
Ondřej Lysoněk 45bfd2