VoiceOver

Articles: 

VoiceOver stems from my increasing use of CMU Flite (http://www.festvox.org/flite/) as a system and application tool. As I incorporated flite into various utilities, I found no easy way to ensure that the generated speech from one tool would not "speak over" the speech from another tool. Additionally, when I wanted more than one tool to speak with the same voice parameters, I would have to manually duplicate those parameters into the code or configuration files.

I wrote the VoiceOver daemon (voxd) to eliminate the need to incorporate the Flite libraries in my utility code and to give consistant voices to each tool by way of an abstraction layer. I modeled VoiceOver on the concept of a radio play, with actors (each one representing a single unique voice) playing roles. As a single actor can play many roles, a VoiceOver Actor will read the lines for one or more Roles.

VoiceOver uses a Unix (AF_UNIX) Datagram (SOCK_DGRAM) socket as it's public interface. Datagrams written to this socket will name the "role", and provide the "line" for the VoiceOver actor to read. I use a Unix socket rather than some other form of IPC in order to permit it's implementation on a wide variety of systems. I also chose this interface in order to ensure that the speech data source resided on the local system. Should you require a remote source of speech text, you can write a bridging utility like the supplied mqtt2vox tool.

This Package

This package contains source code for the VoiceOver daemon (voxd), a configuration file validation tool (voxcheckconfig), a commandline tool to feed text to the VoiceOver daemon (voxreadline), and a bridging daemon that feeds text to the VoiceOver daemon from mqtt topics (mqtt2vox).

The VoiceOver daemon (voxd) provides a single, consistant external interface to an english-voice audio output facility. This allows many disparate processes to issue text that VoiceOver will read asynchronously. This utility depends on

lex
Lexical Analyser Generator
yacc
Parser Generator
gcc
GNU Compiler Collection C Compiler
glibc
GNU C function library
libm
C math library
ly
yacc support library
flite-2.0.0-release
CMU "Festival Lite", consisting of:
libflite 2.0
CMU "Festival lite" library
libflite_cmu_us_rms
the "RMS" voice library
libflite_usenglish
the "US English transition rules library
libflite_cmulex
Advanced Linux Sound Architecture (ALSA) (Voiceover v1.0.1)
libasound
ALSA API, or
libalsatoss
ALSA API binding for OSS
PulseAudio (Voiceover v1.0.5)
libpulse-simple
Simple API to PulseAudio
libpulse
PulseAudio API

The configuration validation tool (voxcheckconfig) will validate, and optionally rewrite, any given voxd configuration file. This tool does not depend on any external libraries other than the standard C runtime, along with whatever libraries are required to support Yacc-generated code.

The voxreadline commandline tool accepts text input from stdin or commandline, along with the name of a VoiceOver "role" or "actor", and feeds that role and line input to voxd for externalization. This tool does not depend on any external libraries other than the standard C runtime.

Finally, the MQTT to vox bridge daemon (mqtt2vox) feeds text input received from user-selected MQTT topics to voxd for externalization. While I supply this program as an example of a "bridge" tool, you can use it to feed VoiceOver with text issued by aggregator programs that feed MQTT topics. This tool depends on libmosquitto (Mosquitto MQTT library, broker and utilities v1.4.14).

Building the package

This release supports only the crudest of build processes: make.

make all
will compile and link the four programs, and compress the corresponding manual files.
make test
will run a short test of voxcheckconfig, voxd, and voxreadline.

Installing the package

sudo make install
will install the package into the /usr/local hierarchy. Specifically, it will
  • install all programs into /usr/local/bin,
  • install all manuals into the relevant /usr/local/man subdirectories,
  • install the documentation in /usr/local/doc/VoiceOver, and
  • install an example configuration file (voiceover.conf.new) into /etc

Please rename /etc/voiceover.conf.new to /etc/voiceover.conf, and edit it for your required setup. The voiceover.conf(5) manpage describes the format and contents of this config file.

VoiceOver licence

The VoiceOver source code is Copyright © 2017, 2019, 2020 by Lew Pitcher

This program 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 of the License, or (at your option) any later version.

This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

System Management: 
AttachmentSize
Binary Data VoiceOver-1.0.1.tar.bz223.08 KB
Binary Data VoiceOver-1.0.5.tar.bz228.26 KB