My script uses POE. I got a working exe using pp once, but cannot
repeat the feat. I now get the error as follows;
C:\rt>pp rt-1.pl
C:\rt>a
*
* POE can't use POE::Loop::Select:
* Can't locate POE/Loop/Select.pm in @INC (@INC contains: CODE(0xf2bdf4)
C:\DOCUME~1\
ADMINI~1\LOCALS~1\Temp\par-jpolache\cache-1e83eeb4971826dbf1b64a9f8237a3f22
8eec973\inc\lib
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\par-jpolache\cache-1e83eeb497
1826dbf1b64a9f8237a3f228eec973\inc CODE(0xe44034) CODE(0xe4416c)) at
(eval 35) line 3.
*
BEGIN failed--compilation aborted at (eval 34) line 1.
Can't locate POE/Session.pm in @INC (@INC contains: CODE(0xf2bdf4)
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\par-jpolache\
cache-1e83eeb4971826dbf1b64a9f8237a3f228eec973\inc\lib
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\par-jpolache\cache-1e83eeb4971826db
f1b64a9f8237a3f228eec973\inc CODE(0xe44034) CODE(0xe4416c)) at (eval 36)
line 1.
BEGIN failed--compilation aborted at (eval 36) line 1.
could not import qw(Kernel Session) at script/rt-1.pl line 9
BEGIN failed--compilation aborted at script/rt-1.pl line 9.
Any help would be much appreciated.
*** the code is as follows ***
$|++;
use Config::Simple;
use Time::HiRes qw( sleep );
use Win32::SoundRec;
use Win32::Sound;
use Speech::Synthesis;
use Tk;
use POE;
use POE::Resource::Aliases;
use POE::Resource::Events;
use POE::Resource::Extrefs;
use POE::Resource::FileHandles;
use POE::Resource::SIDs;
use POE::Resource::Sessions;
use POE::Resource::Signals;
use POE::Resource::Statistics;
my @lesson_arr;
#$Data::Dumper::Terse;
my $cfg = new Config::Simple('rt.ini') or die "$!";
my $title = $cfg->param('titles.main');
my $lesson_hash_ref = $cfg->get_block('lessons');
for my $line (sort keys %{$lesson_hash_ref}){
push @lesson_arr, $lesson_hash_ref->{$line};
}
my %ssi_params = ( engine => 'SAPI4',
language => 'en_US',
voice => "c77c5170-2867-11d0-847B-444553540000",
async => 0
);
my $ssi = Speech::Synthesis->new( %ssi_params );
my %sst_params = ( engine => 'SAPI4',
language => 'en_US',
voice => "4f5091d4-757c-11d1-8FFA-006097B010E2",
async => 0
);
my $sst = Speech::Synthesis->new( %sst_params );
1;
POE::Session->create
( inline_states => {
_start => \&ui_start,
pause => \&ui_pause, # pause function
intro => \&ui_intro, # green button start, red button demo
learn => \&ui_learn, # speak sentence to subject
demo => \&ui_demo, # demo program
ispeak => \&ui_ispeak, # instruction voice function
tspeak => \&ui_tspeak, # text voice function
record_speak => \&ui_recordspeak, # record subject
reciting function
record_read => \&ui_recordread, # record subject reading out
loud function
s_play => \&ui_splay, # spoken sentence play back function
r_play => \&ui_rplay, # red sentence play back function
dsp_text => \&ui_dsptext, # display text and read out loud
play_spk => \&ui_playspk,
play_read => \&ui_playread, # play
next_l => \&next_l # increment lesson counter and configure
buttons
}
);
sub ui_start {
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
$heap->{lesson_ctr} = 0;
#my $app_title = $poe_main_window->Label( -text => $title, -font =>
['arial', '36', 'bold'])->pack;
$heap->{app_label} = $poe_main_window->Label( -textvariable =>
\$heap->{lesson_lbl},
-font => ['arial', '24', 'bold'],
-borderwidth => 5,
-justify => 'center',
-relief => 'raised' )->pack(
#-after => $app_title,
-fill =>"x",
-expand => 1
);
$heap->{gb} = $poe_main_window->Button( -command =>
$session->postback("learn"),
-background => "green",
-activebackground => "green",
-borderwidth => 5 )->pack(
-after => $heap->{app_label},
-padx => 5,
-pady => 5,
-ipadx => 75,
-ipady => 75,
-side => 'left',
-fill =>"x",
-expand => 1
);
$heap->{rb} = $poe_main_window->Button( -command =>
$session->postback("demo"),
-background => "red",
-activebackground => "red",
-borderwidth => 5 )->pack(
-padx => 5,
-pady => 5,
-ipadx => 75,
-ipady => 75,
-side => 'left',
-fill =>"x",
-expand => 1);
$heap->{bb} = $poe_main_window->Button(
-background => "blue1",
-activebackground => "blue1",
-borderwidth => 5 )->pack(
-padx => 5,
-pady => 5,
-ipadx => 75,
-ipady => 75,
-side => 'left',
-fill =>"x",
-expand => 1);
$kernel->delay( "intro", .5);
1;
}
sub ui_pause { # pause function
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
sleep($_[ARG0]);
}
sub ui_demo { # demo
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
$heap->{wl} = 0;
print "demo\n";
}
sub ui_intro { # "welcome", "green button start, red button demo"
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
$kernel->yield("pause", 1);
$kernel->yield( "ispeak", ($cfg->param('prompts.welcome')));
$kernel->yield("pause", 1);
$kernel->yield("ispeak", ($cfg->param('prompts.inst1')));
$kernel->yield("pause", 3);
$kernel->yield("ispeak", ($cfg->param('prompts.inst2')));
}
sub ui_learn { # speak sentence to subject
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
$_[HEAP]->{gb}->configure( -command =>
$session->postback("record_speak"));
$_[HEAP]->{rb}->configure( -command => $session->postback("learn"));
$kernel->yield("ispeak", $cfg->param('prompts.inst3'));
$kernel->yield("pause", 3);
$kernel->yield("tspeak", $lesson_arr[$_[HEAP]->{lesson_ctr}]);
$kernel->yield("pause", 3);
$kernel->yield("ispeak", $cfg->param('prompts.inst4'));
$kernel->yield("pause", 3);
$kernel->yield("ispeak", $cfg->param('prompts.inst5'));
$kernel->yield("pause", .5);
$kernel->yield("ispeak", $cfg->param('prompts.inst6'));
$kernel->yield("pause", 1);
}
sub ui_ispeak { # instruction voice function
1;
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
$ssi->speak($_[ARG0]);
}
sub ui_tspeak { # text voice function
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
$sst->speak($_[ARG0]);
}
sub ui_recordspeak { # record subject reciting function
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
$_[HEAP]->{spk} = Win32::SoundRec->new();
# start recording...
$_[HEAP]->{gb}->configure( -command => $session->postback("play_spk"));
$_[HEAP]->{rb}->configure( -command =>
$session->postback("record_read"));
unlink('speak.wav');
$_[HEAP]->{spk}->record();
}
# play back spoken sentence
sub ui_playspk {
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
$kernel->yield("pause", 2);
$_[HEAP]->{spk}->stop();
$_[HEAP]->{spk}->save('speak.wav');
$_[HEAP]->{gb}->configure( -command => $session->postback("dsp_text"));
$_[HEAP]->{bb}->configure( -command => $session->postback("play_spk"));
$_[HEAP]->{rb}->configure( -command =>
$session->postback("record_speak"));
$kernel->yield("pause", 1);
$kernel->yield("ispeak", $cfg->param('prompts.inst8'));
$kernel->yield("pause", 4);
$kernel->yield("s_play");
$kernel->yield("pause", 2);
$kernel->yield("ispeak", $cfg->param('prompts.inst9'));
$kernel->yield("pause", 2);
$kernel->yield("ispeak", $cfg->param('prompts.inst10'));
$kernel->yield("pause", 1);
$kernel->yield("ispeak", $cfg->param('prompts.inst11'));
}
sub ui_splay { # spoken sentence play back function
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
Win32::Sound::Play('speak.wav');
}
sub ui_rplay { # spoken sentence play back function
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
Win32::Sound::Play('read.wav');
}
sub ui_dsptext { # display text and read out loud
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
$_[HEAP]->{gb}->configure( -command =>
$session->postback("record_read"));
$_[HEAP]->{rb}->configure( -command => $session->postback("dsp_text"));
$_[HEAP]->{lesson_lbl} = $lesson_arr[$_[HEAP]->{lesson_ctr}];
$kernel->yield("pause", 1);
$kernel->yield("ispeak", $cfg->param('prompts.inst12'));
$kernel->yield("pause", 6);
$kernel->yield("tspeak", $lesson_arr[$_[HEAP]->{lesson_ctr}]);
$kernel->yield("pause", 1.5);
$kernel->yield("ispeak", $cfg->param('prompts.inst13'));
$kernel->yield("pause", 2);
$kernel->yield("ispeak", $cfg->param('prompts.inst14'));
}
sub ui_recordread { # record subject reading out loud function
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
$_[HEAP]->{rd} = Win32::SoundRec->new();
# start recording...
$_[HEAP]->{gb}->configure( -command => $session->postback("play_read"));
$_[HEAP]->{rb}->configure( -command => $session->postback(""));
unlink('read.wav');
$_[HEAP]->{rd}->record();
}
sub ui_playread {
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
$kernel->yield("pause", 2);
$_[HEAP]->{rd}->stop();
$_[HEAP]->{rd}->save('read.wav');
$_[HEAP]->{gb}->configure( -command => $session->postback("next_l"));
$_[HEAP]->{bb}->configure( -command => $session->postback("play_read"));
$kernel->yield("pause", 1);
$kernel->yield("ispeak", $cfg->param('prompts.inst15'));
$kernel->yield("pause", 4);
$kernel->yield("ispeak", $cfg->param('prompts.inst16'));
$kernel->yield("pause", 4);
$kernel->yield("s_play");
$kernel->yield("pause", 4);
$kernel->yield("ispeak", $cfg->param('prompts.inst17'));
$kernel->yield("pause", 4);
$kernel->yield("r_play");
$kernel->yield("pause", 6);
$kernel->yield("ispeak", $cfg->param('prompts.inst18'));
$kernel->yield("pause", 2);
$kernel->yield("ispeak", $cfg->param('prompts.inst19'));
$kernel->yield("pause", 1);
$kernel->yield("ispeak", $cfg->param('prompts.inst20'));
$kernel->yield("pause", 1);
$kernel->yield("ispeak", $cfg->param('prompts.inst21'));
}
sub next_l {
my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
$heap->{lesson_ctr}++;
$_[HEAP]->{lesson_lbl} = "";
&ui_learn;
}
$poe_kernel->run();
exit 0;
I am using Activeperl;
c:\>perl -v
This is perl, v5.8.8 built for MSWin32-x86-multi-thread
(with 50 registered patches, see perl -V for more detail)
Binary build 820 [274739] provided by ActiveState Built Jan 23 2007 15:57:46