From 599e1f6f578276d8eedeed8d6ed51217064d40fb Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Fri, 21 Jan 2022 13:37:08 -0500 Subject: [PATCH] accessibility/picospeaker: Added (CLI frontend to svox). Signed-off-by: Willy Sudiarto Raharjo --- .../picospeaker/36273f9d_and_d6a7a01.diff | 124 ++++++++++++++++++ accessibility/picospeaker/README | 6 + accessibility/picospeaker/picospeaker.1 | 95 ++++++++++++++ .../picospeaker/picospeaker.SlackBuild | 61 +++++++++ accessibility/picospeaker/picospeaker.info | 10 ++ accessibility/picospeaker/picospeaker.rst | 84 ++++++++++++ accessibility/picospeaker/slack-desc | 19 +++ 7 files changed, 399 insertions(+) create mode 100644 accessibility/picospeaker/36273f9d_and_d6a7a01.diff create mode 100644 accessibility/picospeaker/README create mode 100644 accessibility/picospeaker/picospeaker.1 create mode 100644 accessibility/picospeaker/picospeaker.SlackBuild create mode 100644 accessibility/picospeaker/picospeaker.info create mode 100644 accessibility/picospeaker/picospeaker.rst create mode 100644 accessibility/picospeaker/slack-desc diff --git a/accessibility/picospeaker/36273f9d_and_d6a7a01.diff b/accessibility/picospeaker/36273f9d_and_d6a7a01.diff new file mode 100644 index 0000000000..cd49730c05 --- /dev/null +++ b/accessibility/picospeaker/36273f9d_and_d6a7a01.diff @@ -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 diff --git a/accessibility/picospeaker/README b/accessibility/picospeaker/README new file mode 100644 index 0000000000..00e1f502a2 --- /dev/null +++ b/accessibility/picospeaker/README @@ -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. diff --git a/accessibility/picospeaker/picospeaker.1 b/accessibility/picospeaker/picospeaker.1 new file mode 100644 index 0000000000..84abafe279 --- /dev/null +++ b/accessibility/picospeaker/picospeaker.1 @@ -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. +. diff --git a/accessibility/picospeaker/picospeaker.SlackBuild b/accessibility/picospeaker/picospeaker.SlackBuild new file mode 100644 index 0000000000..574bb6eb3a --- /dev/null +++ b/accessibility/picospeaker/picospeaker.SlackBuild @@ -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 diff --git a/accessibility/picospeaker/picospeaker.info b/accessibility/picospeaker/picospeaker.info new file mode 100644 index 0000000000..76883411c9 --- /dev/null +++ b/accessibility/picospeaker/picospeaker.info @@ -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" diff --git a/accessibility/picospeaker/picospeaker.rst b/accessibility/picospeaker/picospeaker.rst new file mode 100644 index 0000000000..5029c0a439 --- /dev/null +++ b/accessibility/picospeaker/picospeaker.rst @@ -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) diff --git a/accessibility/picospeaker/slack-desc b/accessibility/picospeaker/slack-desc new file mode 100644 index 0000000000..49dc47a1b6 --- /dev/null +++ b/accessibility/picospeaker/slack-desc @@ -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: