Audio-MikMod
view release on metacpan or search on metacpan
demo/player-gtk-ipc view on Meta::CPAN
# label for currently open file path
$filelabel = Gtk::Label->new('');
$vbox->pack_start($filelabel, FALSE, FALSE, 0);
$filelabel->show;
my $separator = Gtk::HSeparator->new;
$vbox->pack_start($separator, FALSE, TRUE, 1);
$separator->show;
###################################
# label for currently open song and error/status messages
$songlabel = Gtk::Label->new('');
$vbox->pack_start($songlabel, FALSE, FALSE, 0);
$songlabel->show;
# progress bar
###################################
# buttons will go in here
my $buttonbox = Gtk::HBox->new(FALSE, 1);
$vbox->add($buttonbox);
$buttonbox->show;
for my $type (qw(exit back play pause stop forward open)) {
make_button($window, $pixmaps->{$type}, $subs->{$type}, $buttonbox);
}
$window->show;
}
sub make_button ($$$$) {
my ($window,$xpm,$func,$box) = @_;
my $mask;
my $pixmap = Gtk::Gdk::Pixmap->create_from_xpm_d($window->window,$mask,@$xpm);
my $pixmapwid = Gtk::Pixmap->new($pixmap, $mask);
$pixmapwid->show;
my $button = Gtk::Button->new;
$button->add($pixmapwid);
$button->signal_connect('clicked' => $func);
$box->pack_start($button, 1, 1, 0);
$button->show;
}
sub _open_fw {
my $fw = Gtk::FileSelection->new('Song Selection');
$fw->signal_connect('destroy', \&destroy_window, \$fw);
$fw->ok_button->signal_connect('clicked', sub {
_open($fw->get_filename);
$fw->destroy;
}, $fw);
$fw->cancel_button->signal_connect('clicked', sub { $fw->destroy });
$fw->show;
}
sub update_info ($$) {
my ($fname,$mfile) = @_;
if ($song_loaded) {
$fname =~ s#^\S+/##;
$filelabel->set($fname);
} else {
$filelabel->set($url);
}
$songlabel->set($mfile);
}
sub progress_update { 1 }
sub progress_timeout {
my $progressbar = shift;
my $new_val = $progressbar->get_current_percentage;
$new_val += 0.02;
$new_val = 0.0 if $new_val >= 1.0;
$progressbar->update($new_val);
return 1;
}
sub destroy_window ($$$) {
my ($widget, $wref, $wref2) = @_;
$$wref = undef;
$wref2 = undef if defined $wref2;
return 0;
}
##################
# Sound functions
sub _init {
MikMod_RegisterAllLoaders();
MikMod_RegisterAllDrivers();
if (MikMod_Init()) {
printf STDERR "Could not initialize sound, reason: %s\n",
MikMod_strerror();
_done();
}
}
sub _play {
print "In _play()\n";
if ($song_loaded) {
if ($song_playing && $song_paused) {
_pause();
} elsif ($song_playing) {
Player_SetPosition(0);
} else {
$song_playing = 1;
Player_Start($songfile);
Player_SetPosition(0);
}
$child = forksub { _update() }
} else {
( run in 2.252 seconds using v1.01-cache-2.11-cpan-0d23b851a93 )