Audio-Daemon-MPG123
view release on metacpan or search on metacpan
MPG123/Server.pm view on Meta::CPAN
package Audio::Daemon::MPG123::Server;
use strict;
use IO::Socket;
use IO::Select;
use Audio::Daemon::MPG123;
use vars qw(@ISA $VERSION $HAVEPLAY $MIXER);
BEGIN {
eval "use Audio::Play::MPG123";
$HAVEPLAY = $@?0:1;
eval "use Audio::Mixer";
$MIXER = $@?0:1;
}
@ISA = qw(Audio::Daemon::MPG123);
$VERSION='0.9Beta';
sub new {
my $class = shift;
die "Cannot find Audio::Play::MPG123" if (! $HAVEPLAY);
my $self = $class->SUPER::new(@_);
bless $self, $class;
# initilize current playlist
$self->{playlist} = [];
# initialize random index.
$self->{random} = [];
$self->{revrandom} = [];
# initilize my current states of various things
$self->{state} = {random => 0, repeat => 0, state => 0};
if ($self->{Allow}) {
$self->parse_acl('Allow');
}
if ($self->{Deny}) {
$self->parse_acl('Deny');
}
return $self;
}
sub player {
my $self = shift;
$self->{player} = shift if (scalar @_);
return $self->{player};
}
sub randomize {
my $self = shift;
my $start = shift;
return unless (ref $start eq 'ARRAY');
my @stack;
my $count = 0;
while (scalar @$start) {
my $pick = int (rand() * (scalar @$start));
push @stack, $start->[$pick];
$self->debug("Picked out index $pick with val of ".$start->[$pick]);
splice(@{$start}, $pick, 1);
}
$self->{random} = \@stack;
my @revstack;
foreach my $t (0..$#stack) {
$revstack[$stack[$t]] = $t
}
$self->{revrandom} = \@revstack;
}
sub stop {
my $self = shift;
my $player = $self->player;
$self->{state}{state} = 0;
$player->stop;
}
sub play {
my $self = shift;
my $remote = shift;
my $player = $self->player;
if (defined $remote && ref $remote && scalar @{$remote->{args}}) {
if ($self->{state}{random}) {
$self->{state}{renid} = $self->{revrandom}[$remote->{args}[0]];
$self->{state}{regid} = $remote->{args}[0];
}
} elsif ($player->state == 1) {
( run in 1.542 second using v1.01-cache-2.11-cpan-ff9377addf4 )