Win32::MediaPlayer - Module for playing sound MP3 / WMA / WAV / MIDI file on Win32 platforms


Win32-MediaPlayer documentation Contained in the Win32-MediaPlayer distribution.

Index


Code Index:

NAME

Top

Win32::MediaPlayer - Module for playing sound MP3 / WMA / WAV / MIDI file on Win32 platforms

SYNOPSIS

Top

    use Win32::MediaPlayer;

    $winmm = new Win32::MediaPlayer;  # new an object
    $winmm->load('d:/10.mp3');        # Load music file disk, or an URL
    $winmm->play;                     # Play the music
    $winmm->volume(100);              # Set volume after playing
    $winmm->seek('00:32');            # seek to

    #$winmm->pause;                   # Pause music playing
    #$winmm->resume;                  # Resume music playing

    print 'Total Length : '.$winmm->length(1),$/; # Show total time.
    while(1) {
          sleep 1;
          print 'Now Position: '.$winmm->pos(1)."\r";   # Show now time.
    };

DESCRIPTION

Top

This module allows playing of sound format like MP3 / WMA / WAV / MIDI on Win32 platforms using the MCI interface (which depends on winmm.dll).

REQUIREMENTS

Top

Only working on Win32, and you should installed the Win32::API

if not you can install by ppm, in the console mode

type command:

  ppm install http://www.bribes.org/perl/ppm/Win32-API.ppd




USAGE

Top

new

The new method is the constructor. It will build a connection to the mci interface.

$winmm = new Win32::MediaPlayer; # new an object

load()

$winmm->load('d:/10.mp3'); # Load music from the disk, or Internet URL.

play

$winmm->play; # Play the music file.

seek()

The value should be a format like XX:XX, or you can fill the micro second integer of the music.

$winmm->seek(100000); # Seek the music file, at the 100 sec pos.

$winmm->seek('01:40'); # Seek the music file, at the 01 min 40 sec pos.

close

$winmm->close; # Close the music file.

volume()

The value is from 0 to 100

$winmm->volume(100); # Set volume to 100 after playing

length()

Return the music total length

$length = $winmm->length(1); # Return the length in XX:XX format.

$length = $winmm->length; # Return the length in micro second integer.

pos()

Return the music now position

$length = $winmm->pos(1); # Return the Position in XX:XX format.

$length = $winmm->pos; # Return the Position in micro second integer.

pause

Pause the music play

$length = $winmm->pause; # Pause the music play.

resume

Resume the music play

$length = $winmm->resume; # Resume the music play.

AUTHOR

Top

Lilo Huang

COPYRIGHT

Top


Win32-MediaPlayer documentation Contained in the Win32-MediaPlayer distribution.

package Win32::MediaPlayer;

use strict;
use warnings;
use vars qw($VERSION $self $mciSendString $result);
use Win32::API;
$VERSION = '0.3';

BEGIN {
$mciSendString = new Win32::API(
    "winmm",
    "mciSendString",
    ['P', 'P', 'N', 'N'], 'N'
)|| die "Can't register mciSendString";
}


sub new {
my $self = {};
bless $self, $_[0];
$self->{alias} = rand;
$self->{pos} = 0;
$self->{play} = 0;
return $self;
}

sub load {
my $self = shift;
my $file = shift;
$result = doMM("open \"$file\" type mpegvideo alias ".$self->{alias});
return $result;
}

sub play {
my $self = shift;
my $pos = shift || $self->{pos};
$self->{play} = 1;
$result = doMM("play ".$self->{alias}." from $pos");
return $result;
}

sub volume {
my $self = shift;
warn 'No File Loaded' if($self->{play}==0);
my $vol = shift;
if($vol ne '') {
$vol*=10;
$result = doMM("setaudio ".$self->{alias}." volume to $vol");
return $result;
}else{
return 'Null';
}
}

sub length {
my $self = shift;
my $flag = shift;
warn 'No File Loaded' if($self->{play}==0);
$result = doMM("status ".$self->{alias}." length");
if($flag) {
my @time = localtime(int($result/1000));
$result = sprintf("%02d:%02d",$time[1],$time[0]);
}
return $result;
}

sub seek {
my $self = shift;
warn 'No File Loaded' if($self->{play}==0);
my $seektime = shift;
if($seektime=~/(\d{2}):(\d{2})/) {
$seektime = ($1*60+$2)*1000;
doMM("stop audiofile");
$result = doMM("play ".$self->{alias}." from $seektime");
}else{
doMM("stop audiofile");
$result = doMM("play ".$self->{alias}." from $seektime");
}
return $result;
}

sub pos {
my $self = shift;
my $flag = shift;
warn 'No File Loaded' if($self->{play}==0);
$result = doMM("status ".$self->{alias}." position");
if($flag) {
my @time = localtime(int($result/1000));
$result = sprintf("%02d:%02d",$time[1],$time[0]);
}
return $result;
}

sub pause {
my $self = shift;
warn 'No File Loaded' if($self->{play}==0);
$result = doMM("pause ".$self->{alias});
return $result;
}

sub resume {
my $self = shift;
warn 'No File Loaded' if($self->{play}==0);
$result = doMM("resume ".$self->{alias});
return $result;
}

sub close {
my $self = shift;
$self->{play} = 0;
$result = doMM("close ".$self->{alias});
return $result;
}



sub doMM {
my($cmd) = @_;
my $ret = "\0" x 1025;
my $rc = $mciSendString->Call($cmd, $ret, 1024, 0);
if($rc == 0) {
$ret =~ s/\0*$//;
return $ret;
}else{
return "error '$cmd': $rc";
}
}

__END__

1;