accessibility/picospeaker: Added (CLI frontend to svox).

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
B. Watson 2022-01-21 13:37:08 -05:00 committed by Willy Sudiarto Raharjo
parent 00decef7a9
commit 599e1f6f57
No known key found for this signature in database
GPG Key ID: 3F617144D7238786
7 changed files with 399 additions and 0 deletions

View File

@ -0,0 +1,124 @@
diff --git a/README b/README
index c540542..87bb3d8 100644
--- a/README
+++ b/README
@@ -1,5 +1,5 @@
PicoSpeaker
-Written by Kyle
+Orginally Written by Kyle and forked by shilber01 to work with SNIPS (snips.ai)
DESCRIPTION
diff --git a/pico.patch b/pico.patch
new file mode 100644
index 0000000..0e2680a
--- /dev/null
+++ b/pico.patch
@@ -0,0 +1,19 @@
+--- picospeaker.bak 2018-08-27 22:03:05.000000000 +0200
++++ picospeaker 2018-08-27 23:49:35.289440981 +0200
+@@ -59,8 +59,16 @@
+ exit(0)
+ elif ( argv[opt] == '-l' ) or ( argv[opt] == '--language' ):
+ languages = ('en-US', 'en-GB', 'de-DE', 'es-ES', 'fr-FR', 'it-IT')
++ lang_map = {
++ 'en': 'en-US',
++ 'de': 'de-DE',
++ 'es': 'es-ES',
++ 'fr': 'fr-FR',
++ 'it': 'it-IT'}
+ if ( argv[opt+1] in languages ):
+ settings['language'] = argv[opt+1]
++ elif ( argv[opt+1] in lang_map.keys() ):
++ settings['language'] = lang_map[argv[opt+1]]
+ else:
+ stderr.write('Language ' + argv[opt+1] + ' is currently not available.\n')
+ stderr.write('Available languages are ' + ', '.join(languages[:-1]) + ' and ' + languages[-1] + '.\n')
\ No newline at end of file
diff --git a/picospeaker b/picospeaker
index 6b49d34..b9f91c3 100755
--- a/picospeaker
+++ b/picospeaker
@@ -14,8 +14,8 @@ from time import sleep
# help and version tuples
version = (
- 'PicoSpeaker 0.6.2',
- 'Written by Kyle',
+ 'PicoSpeaker 0.6.2-1',
+ 'Written by Kyle,forked by shilbert01',
'This program is free and unencumbered software released into the public domain.',
'See the included UNLICENSE file for details.')
help = (
@@ -59,8 +59,16 @@ def parse ():
exit(0)
elif ( argv[opt] == '-l' ) or ( argv[opt] == '--language' ):
languages = ('en-US', 'en-GB', 'de-DE', 'es-ES', 'fr-FR', 'it-IT')
+ lang_map = {
+ 'en': 'en-US',
+ 'de': 'de-DE',
+ 'es': 'es-ES',
+ 'fr': 'fr-FR',
+ 'it': 'it-IT'}
if ( argv[opt+1] in languages ):
settings['language'] = argv[opt+1]
+ elif ( argv[opt+1] in lang_map.keys() ):
+ settings['language'] = lang_map[argv[opt+1]]
else:
stderr.write('Language ' + argv[opt+1] + ' is currently not available.\n')
stderr.write('Available languages are ' + ', '.join(languages[:-1]) + ' and ' + languages[-1] + '.\n')
@@ -117,7 +125,7 @@ def parse ():
continue
else:
# First, die with an error if compression and/or type are set but no output file is specified
- if ( ( settings.has_key('compression') ) or ( settings.has_key('filetype') ) ) and not ( settings.has_key('output') ):
+ if ( ( 'compression' in settings ) or ( 'filetype' in settings ) ) and ( 'output' not in settings ):
stderr.write('You must specify the output file.\n')
exit(1)
# Now the text can be added to the settings object and the loop can be broken
@@ -128,7 +136,7 @@ def parse ():
def tts():
'convert text to speech data and store it in a temporary file using the pico2wave utility from SVox Pico'
command = ['pico2wave', '-w', temp]
- if ( settings.has_key('language') ): command += ['-l', settings['language']]
+ if ( 'language' in settings ): command += ['-l', settings['language']]
command += ['--', settings['text']]
try:
call(command)
@@ -139,16 +147,16 @@ def tts():
def speaker():
'speaks the text, or saves it if an output file was specified on the command line'
command = ['play', '-q']
- if ( settings.has_key('volume') ): command += ['-v', settings['volume']]
+ if ( 'volume' in settings ): command += ['-v', settings['volume']]
command.append(temp)
- if ( settings.has_key('output') ):
+ if ( 'output' in settings ):
command[0] = 'sox'
del command[1]
- if ( settings.has_key('filetype') ): command += ['-t', settings['filetype']]
- if ( settings.has_key('compression') ): command += ['-C', settings['compression']]
+ if ( 'filetype' in settings ): command += ['-t', settings['filetype']]
+ if ( 'compression' in settings ): command += ['-C', settings['compression']]
command.append(settings['output'])
- if ( settings.has_key('pitch') ): command += ['gain', '-0.15', 'pitch', str(float(settings['pitch'])*100)]
- if ( settings.has_key('rate') ): command += ['gain', '-0.1', 'tempo', '-s', str(1+float(settings['rate'])/100)]
+ if ( 'pitch' in settings ): command += ['gain', '-0.15', 'pitch', str(float(settings['pitch'])*100)]
+ if ( 'rate' in settings ): command += ['gain', '-0.1', 'tempo', '-s', str(1+float(settings['rate'])/100)]
speak = Popen(command)
sleep(0.1) # the temp file should be open by now
# The temp file can be removed as soon as it is opened in case PicoSpeaker is killed while speaking
@@ -157,11 +165,11 @@ def speaker():
try:
settings = parse()
- if ( not settings.has_key('text') ):
+ if ( 'text' not in settings ):
settings['text'] = stdin.read()
tts()
speaker()
except KeyboardInterrupt:
stderr.write('Keyboard interrupt received. Cleaning up.\n')
- try: remove(temp)
+ try: remove(temp) # The temp file may not have been removed yet
except OSError: pass # The file doesn't exist and therefore doesn't need to be removed

View File

@ -0,0 +1,6 @@
picospeaker (CLI frontend to svox)
PicoSpeaker is a program written in Python that speaks text on its
command line or standard input using SVox Pico and Sox. Speech rate,
pitch, volume and language can be specified, and output can be saved
to any file format supported by Sox.

View File

@ -0,0 +1,95 @@
.\" Man page generated from reStructuredText.
.
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "PICOSPEAKER" 1 "2022-01-21" "0.6.2" "SlackBuilds.org"
.SH NAME
picospeaker \- command-line interface to svox
.\" RST source for picospeaker(1) man page. Convert with:
.
.\" rst2man.py picospeaker.rst > picospeaker.1
.
.\" rst2man.py comes from the SBo development/docutils package.
.
.SH SYNOPSIS
.sp
picospeaker [\fI\-options\fP] <\fItext\fP>
.SH DESCRIPTION
.sp
PicoSpeaker is a program written in Python that speaks text on its
command line or standard input using SVox Pico (\fBpico2wave\fP(1)) and
\fBsox\fP(1). Speech rate, pitch, volume and language can be specified,
and output can be saved to any file format supported by \fBsox\fP, or
sent directly to the audio device.
.SH OPTIONS
.INDENT 0.0
.TP
.B \fB\-l\fP, \fB\-\-language\fP \fIlanguage\fP
Language to speak (default is \fIen\-US\fP). Available languages are
\fIen\-US\fP, \fIen\-GB\fP, \fIde\-DE\fP, \fIes\-ES\fP, \fIfr\-FR\fP and \fIit\-IT\fP\&. These may
be abbreviated to the two\-letter code (e.g. \fIen\fP).
.TP
.B \fB\-v\fP, \fB\-\-volume\fP \fInumber\fP
Output volume (default is 1.0).
.TP
.B \fB\-r\fP, \fB\-\-rate\fP \fInumber\fP
Rate of speech from \-90 to 9900 (default is 0). This is a percentage, offset by 100 (so \-90 is 10% original speed, 100 is 2x).
.TP
.B \fB\-p\fP, \fB\-\-pitch\fP \fInumber\fP
Voice pitch (semitones) from \-79 to 39 (default is 0).
.TP
.B \fB\-o\fP, \fB\-\-output\fP \fIfile\fP
Output to the specified file (default is sound card output).
.TP
.B \fB\-c\fP, \fB\-\-compress\fP, \fB\-q\fP, \fB\-\-quality\fP \fInumber\fP
Compression/quality level of output file, depends on file type. This option causes an error if no output file is specified.
.TP
.B \fB\-t\fP, \fB\-\-type\fP \fItype\fP
Save output file as \fItype\fP\&. Only needed if saving with a nonstandard extension. This option causes an error if no output file is specified.
.TP
.B \fB\-V\fP, \fB\-\-version\fP
Print version information.
.TP
.B \fB\-h\fP, \fB\-\-help\fP, \fB\-u\fP, \fB\-\-usage\fP
Print built\-in help message.
.UNINDENT
.SH COPYRIGHT
.sp
\fBpicospeaker\fP is free and unencumbered software released into the public domain.
See the file /usr/doc/picospeaker\-0.6.2/UNLICENSE for details.
.SH AUTHORS
.sp
\fBpicospeaker\fP was written by written by Kyle and forked by shilbert01.
.sp
This man page written for the SlackBuilds.org project
by B. Watson, and is licensed under the WTFPL.
.SH SEE ALSO
.sp
\fBpico2wave\fP(1), \fBsox\fP(1)
.\" Generated by docutils manpage writer.
.

View File

@ -0,0 +1,61 @@
#!/bin/bash
# Slackware build script for picospeaker
# Written by B. Watson (yalhcru@gmail.com)
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=picospeaker
VERSION=${VERSION:-0.6.2}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
ARCH=noarch
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
exit 0
fi
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
chown -R root:root .
chmod 644 *
chmod 755 . $PRGNAM
# python3 support and short language names (de => de_DE).
patch -p1 < $CWD/36273f9d_and_d6a7a01.diff
# actually use python3. doesn't really matter, but someday python2 might
# really go away...
sed -i '1s,python,python3,' $PRGNAM
PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
mkdir -p $PKG/usr/{bin,man/man1} $PKGDOC
cp -a $PRGNAM $PKG/usr/bin
gzip -9c < $CWD/$PRGNAM.1 > $PKG/usr/man/man1/$PRGNAM.1.gz
mkdir -p $PKGDOC
fmt -s README > $PKGDOC/README # line breaks, please.
cp -a UNLICENSE $PKGDOC
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE

View File

@ -0,0 +1,10 @@
PRGNAM="picospeaker"
VERSION="0.6.2"
HOMEPAGE="https://github.com/shilbert01/picospeaker/"
DOWNLOAD="https://github.com/shilbert01/picospeaker/archive/v0.6.2/picospeaker-0.6.2.tar.gz"
MD5SUM="888f1df39733a5d22733473fb783d34a"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="svox"
MAINTAINER="B. Watson"
EMAIL="yalhcru@gmail.com"

View File

@ -0,0 +1,84 @@
.. RST source for picospeaker(1) man page. Convert with:
.. rst2man.py picospeaker.rst > picospeaker.1
.. rst2man.py comes from the SBo development/docutils package.
.. |version| replace:: 0.6.2
.. |date| date::
===========
picospeaker
===========
-----------------------------------
command-line interface to Svox Pico
-----------------------------------
:Manual section: 1
:Manual group: SlackBuilds.org
:Date: |date|
:Version: |version|
SYNOPSIS
========
picospeaker [*-options*] <*text*>
DESCRIPTION
===========
PicoSpeaker is a program written in Python that speaks text on its
command line or standard input using SVox Pico (**pico2wave**\(1)) and
**sox**\(1). Speech rate, pitch, volume and language can be specified,
and output can be saved to any file format supported by **sox**, or
sent directly to the audio device.
OPTIONS
=======
**-l**, **--language** *language*
Language to speak (default is *en-US*). Available languages are
*en-US*, *en-GB*, *de-DE*, *es-ES*, *fr-FR* and *it-IT*. These may
be abbreviated to the two-letter code (e.g. *en*).
**-v**, **--volume** *number*
Output volume (default is 1.0).
**-r**, **--rate** *number*
Rate of speech from -90 to 9900 (default is 0). This is a percentage, offset by 100 (so -90 is 10% original speed, 100 is 2x).
**-p**, **--pitch** *number*
Voice pitch (semitones) from -79 to 39 (default is 0).
**-o**, **--output** *file*
Output to the specified file (default is sound card output).
**-c**, **--compress**, **-q**, **--quality** *number*
Compression/quality level of output file, depends on file type. This option causes an error if no output file is specified.
**-t**, **--type** *type*
Save output file as *type*. Only needed if saving with a nonstandard extension. This option causes an error if no output file is specified.
**-V**, **--version**
Print version information.
**-h**, **--help**, **-u**, **--usage**
Print built-in help message.
COPYRIGHT
=========
**picospeaker** is free and unencumbered software released into the public domain.
See the file /usr/doc/picospeaker-|version|/UNLICENSE for details.
AUTHORS
=======
**picospeaker** was written by written by Kyle and forked by shilbert01.
This man page written for the SlackBuilds.org project
by B. Watson, and is licensed under the WTFPL.
SEE ALSO
========
**pico2wave**\(1), **sox**\(1)

View File

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.
# Line up the first '|' above the ':' following the base package name, and
# the '|' on the right side marks the last column you can put a character in.
# You must make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
picospeaker: picospeaker (CLI frontend to svox)
picospeaker:
picospeaker: PicoSpeaker is a program written in Python that speaks text on its
picospeaker: command line or standard input using SVox Pico and Sox. Speech rate,
picospeaker: pitch, volume and language can be specified, and output can be saved
picospeaker: to any file format supported by Sox.
picospeaker:
picospeaker:
picospeaker:
picospeaker:
picospeaker: