Audio-MikMod
view release on metacpan or search on metacpan
demo/player-gtk-thread 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 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);
}
} else {
$song_playing = 0;
update_info($songpath, 'Open song first.');
$song_loaded = 0;
_open_fw($songpath);
}
}
sub _update {
while ($update) {
for (Player_Active() && $song_playing && !$song_paused) {
$player_busy = 1;
( run in 1.718 second using v1.01-cache-2.11-cpan-39bf76dae61 )