![]()
![]()
Listen to your email as an MP3 audio stream—just because you can.
Just when you thought pictures of your email [Hack #61] was over the top, someone had to go and take it even further. Instead of rendering your email to a PNG image, let's render it to audio.
A combination of the script from [Hack #61] and the Microsoft Speech Object Library (http://www.microsoft.com/speech/) reads the first few lines of each email message, rendering them as a temporary WAV audio file. That WAV file can then be converted using bladeenc (http://bladeenc.mp3.no/) or the like to an MP3 file that TiVo can understand and play. If all goes well, we can move the MP3 into an area that can be "seen" by the TiVo Media Desktop.
|
Save the following code to a file named mail2mp3.pl somewhere on your PC hard drive, and follow the configuration instructions from [Hack #61]:
#!c:\perl\bin\perl.exe
use strict;
use Cwd;
use File::Copy;
use File::Path;
use File::Spec;
use Mail::POP3Client;
use Mail::Internet;
use LWP::Simple;
use Win32;
use Win32::OLE;
use Win32::OLE::Const qq{Microsoft Speech Object Library};
use constant DESTINATION => q{D:\MP3\TiVo};
use constant PREVIEW_LINES => 30;
my @accounts = (
{
DESC => q{thoellri@foobar.com},
USER => "thoellri",
AUTH_MODE => "PASS",
PASSWORD => "password",
HOST => "pop3.foobar.com"
},
{
DESC => q{tobias@somewhere.com},
USER => "tobias",
AUTH_MODE => "PASS",
PASSWORD => "password",
HOST => "mail.somewhere.com"
},
);
for my $account (@accounts) {
# erase existing messages
rmtree([ File::Spec->catfile(DESTINATION, qq{Email}, $account->{DESC}) ],[RETURN]
0, 0);
my $pop = new Mail::POP3Client (%$account);
unless ($pop) { warn "Couldn't connect\n"; next; }
my $count = $pop->Count;
if ($count <0) { warn "Authorization failed"; next; }
next if($count == 0); # no new messages
# create new directory for messages
mkpath([ File::Spec->catfile(DESTINATION, qq{Email}, $account->{DESC}) ],[RETURN]
0, 0711);
for my $num (1..$count) {
my @preview=$pop->HeadAndBody($num,100);
my $mail=Mail::Internet->new(\@preview);
my $mp3file=mail2mp3($mail);
next unless defined($mp3file);
my $out=File::Spec->catfile(DESTINATION, qq{Email}, $account->{DESC},
qq{message-}.sprintf("%02d",$num).qq{.mp3});
copy($mp3file,$out);
unlink($mp3file);
}
$pop->Close;
}
sub mail2mp3 {
my($m)=@_;
my $header=$m->head( );
my $type=Win32::OLE->new('SAPI.SpAudioFormat');
$type->{Type}=SAFT32kHz16BitMono;
my $stream=Win32::OLE->new('SAPI.SpFileStream');
$stream->{Format}=$type;
$stream->Open("output$$.wav",SSFMCreateForWrite,undef);
my $speech=Win32::OLE->new('SAPI.SpVoice');
$speech->{AudioOutputStream}=$stream;
$speech->Speak(qq{From: }.$header->get('From'),SVSFDefault);
$speech->Speak(qq{Subject: }.$header->get('Subject'),SVSFDefault);
my($lines);
foreach my $line (@{$m->body( )}) {
chomp($line);
$speech->Speak($line." ",SVSFDefault);
last if($lines++>= PREVIEW_LINES);
}
$speech->WaitUntilDone(-1);
$stream->Close( );
return undef unless (-f "output$$.wav");
# here we call out to the command line mp3 encode
system(qq{bladeenc -quiet -nocfg -quit output$$.wav output$$.mp3});
unlink(qq{output$$.wav});
return undef unless (-f "output$$.mp3");
return File::Spec->catfile(getcwd,qq{output$$.mp3});
}
Run
the script from the DOS prompt (Start Run...
command) on your Windows PC or from the
Terminal (Applications
Utilities
Terminal)
under Mac OS X, like so:
perl mail2mp3.pl
With this magic running, your email will be downloaded but not deleted. Your computer will start silently talking to itself and recording itself (see Figure 4-28). It'll then compress all the sounds down to a basket-full-o'-MP3s that your TiVo would be content to sit and play all day and night.

Lame, pronounced: "Lame Ain't an MP3 Encoder" (http://lame.sourceforge.net/)
—Tobias Hoellrich
|
|
| Top |