3 =head1 NAME $RCSfile: Speak.pm,v $
5 Convert text to speach using Google's engine and play it on speakers
13 Andrew DeFaria <Andrew@DeFaria.com>
21 Wed 24 Feb 2021 11:05:36 AM PST
30 This module offers subroutines to convert text into speach and speak them.
34 This module exports subroutines to process text to speach and speak them.
38 The following routines are exported:
52 use lib "$FindBin::Bin/../lib";
58 our @EXPORT = qw(speak);
65 =head2 speak($msg, $log)
67 Convert $msg to speach.
69 Note this currently uses an external script to do the conversion. I intend to
70 re-write that into Perl here eventually.
74 =for html <blockquote>
80 Message to speak. If $msg is defined and scalar then that is the message
81 to speak. If it is a file handle then the text will be read from that file.
82 Otherwise the text in the clipboard will be used.
86 If provided, errors and messages will be logged to the logfile, otherwise stdout
90 =for html </blockquote>
94 =for html <blockquote>
102 =for html </blockquote>
106 if (-f "$FindBin::Bin/shh") {
108 $log->msg("Not speaking because we were asked to be quiet - $msg");
110 verbose "Not speaking because we were asked to be quiet - $msg";
116 # Handle the case where $msg is not passed in. Then use the clipboard;
117 $msg = Clipboard->paste unless $msg;
119 # Handle the case where $msg is a filehandle
120 $msg = <$msg> if ref $msg eq 'GLOB';
122 # We can't have two speakers going at the same time so if we have an error
123 # backoff a little and try again.
128 my ($status, @output);
130 while ($attempts++ < $maxretries) {
131 ($status, @output) = Execute "/usr/local/bin/gt \"$msg\"";
134 my $errmsg = "Unable to speak (Status: $status) - " . join "\n", @output;
144 return; # We said our piece...
148 my $errmsg = 'Maximum retries exceeded - terminating';
151 $log->err($errmsg, $status);
153 error $errmsg, $status;
163 =head1 CONFIGURATION AND ENVIRONMENT
165 DEBUG: If set then $debug is set to this level.
167 VERBOSE: If set then $verbose is set to this level.
169 TRACE: If set then $trace is set to this level.
175 L<File::Spec|File::Spec>
177 L<Term::ANSIColor|Term::ANSIColor>
179 =head1 INCOMPATABILITIES
183 =head1 BUGS AND LIMITATIONS
185 There are no known bugs in this module.
187 Please report problems to Andrew DeFaria <Andrew@ClearSCM.com>.
189 =head1 LICENSE AND COPYRIGHT
191 This Perl Module is freely available; you can redistribute it and/or
192 modify it under the terms of the GNU General Public License as
193 published by the Free Software Foundation; either version 2 of the
194 License, or (at your option) any later version.
196 This Perl Module is distributed in the hope that it will be useful,
197 but WITHOUT ANY WARRANTY; without even the implied warranty of
198 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
199 General Public License (L<http://www.gnu.org/copyleft/gpl.html>) for more
202 You should have received a copy of the GNU General Public License
203 along with this Perl Module; if not, write to the Free Software Foundation,
204 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.