NAME
POE::Component::Player::Mpg123 - a wrapper for the mpg123
player
SYNOPSIS
use POE qw(Component::Player::Mpg123);
$mp = POE::Component::Player::Mpg123->new();
$mp->play("/tmp/test.mp3");
POE::Kernel->run();
DESCRIPTION
This component is used to manipulate the mpg123
player from within a POE application. The less common but open-source mpg321
has also been tested.
METHODS
An object oriented interface is provided as follows:
new [hash[-ref]]
Used to initialise the system and create a module instance. The optional hash (or hash reference) may contain any of the following keys:
- alias
-
Indicates the name of a session to which events will be posted. Default:
main
. - dev
-
Specifies device to play to. Default: /dev/dsp.
- xargs
-
Allows for passing extra arguments to the underlying application.
- <event-name>
-
Any event fired by this module can be mapped to a name of choice. This is useful for differentiating this component's events from some other component's e.g. done = "mpg123_done"> will cause the component to fire an
mpg123_done
event at the main session, instead of the usualdone
. For a comprehensive listing of events fired, please refer to theEVENTS
section below.
start
This method starts the player. While it should not be necessary to ever call this method directly since the new() method calls it automatically, this method allows for restarting the player in such instances as when it dies.
play <path>
This method requires a single parameter specifying the full path name of an mp3 file to play.
stop pause resume
None of these methods take any parameters and will do exactly as thier name implies. Please note that pause/resume are semaphored i.e. issuing a pause
whilst the system is already paused will do exactly diddley :)
vol <integer>
This method requires a valid integer between 0 and 100 to indicate the volume level. Please note that volume support is not available on all versions of the mpg123
player. Consult your version's documentation to verify whether this will work.
seek <to>
This method fast-forwards or rewinds or jumps the metaphoric playhead to a specified location. The to argument passed should adhere to the regex [+-]\d+[%]. If the number provided is preceeded by a +
or a -
then the number is treated as a relative offset where positive indicates forwards and negative backwards. If no sign is passed, the number is treated as an absolute offset. Additionally, if the number is followed by a percent sign, it is treated as a percentage and should be between 0 and 100, else it is treated as a frame number.
Please note that passing out-of-bounds values will not generate an error but will be silently adjusted as necessary.
stat
This method has been kept from sungo's original package... though I don't know what it's supposed to do. In my version of mpg123
it generates an error @E Unknown command 'STAT'
.
xcmd <string>
This method allows for the sending of arbitrary commands to the player e.g. equalize
such that as the underlying player offers new features, these can be utilised without having to modify the component.
quit
This method causes the mp3 player to shut down.
EVENTS
Events are fired at the session indicated in the new() method as alias
. The names of the event handlers may be specified by setting the required values, using the keys listed below, via the aforementioned method.
alive
This event is fired by the player's notification that it's ready for business. The only argument passed to the event (ARG0) contains the version string of the player. Please note that the this component's caller need not wait for this notification to issue commands and is free to ignore the event.
status
Fired during processing. Four paramters are passed to this event: 1) the number of frames that have been played, 2) the number that remain, 3) the number of seconds that have been played, and 4) the number of seconds left to play.
info
This event is fired to provide three types of information. The only argument passed (ARG0) contains a hash reference containing the key type
which may be one of the following:
- id3
-
If the track being played contains id v3 information, it is provided with this type. Other keys in the hashref then include the following: artist, album, track, year, comment, genre.
- filename
-
When there is no id3 information available this type is issued in which case the single other key in the hash is filename which contains the full path name of the file.
- stream
-
This event type contains stream information. The following keys are available in the hash: mpegtype, layer, samplerate, mode, mode_extension, framesz, channels, copyrighted, crc, emphasis, bitrate, extension.
done / died
Fired upon termination or abnormal ending of the player.
error
Fired upon encountering an error. This includes not only errors generated during execution of the player but also generated by the player itself in an interactive basis i.e. any @E lines generated on stderr by the process. For parameter reference please see PoCo::Child documentation, with the following caveat: for @E-type errors, err is set to -1 and error contains the player error string.
stopped paused resumed ended
These events are fired whenever any of the named actions occur. The ended
events signifies that a track has finished playing.
AUTHOR
Erick Calder <ecalder@cpan.org>
ACKNOWLEDGEMENTS
This component is a complete rewrite of the older PoCo::MPG123 written by Matt Cashner a.k.a. "sungo" <eek+poe@eekeek.org> and Rocco Caputo a.k.a. "dngor" <troc@netrus.net>. The inspiration was to reimplement that fuctionality in a more standardised manner by using the PoCo::Child. My gratitude to both for helping make this possible.
AVAILABILITY
This module may be found on the CPAN. Additionally, both the module and its RPM package are available from:
http://perl.arix.com
DATE
$Date: 2002/09/29 02:15:57 $
VERSION
$Revision: 1.2 $
TODO
Can't think of anything yet but feel free to suggest something :)
LICENSE AND COPYRIGHT
Copyright (c) 2002 Erick Calder. This product is distributed under the MIT License. A copy of this license was included in a file called LICENSE. If for some reason, this file was not included, please see http://www.opensource.org/licenses/mit-license.html to obtain a copy of this license.
4 POD Errors
The following errors were encountered while parsing the POD:
- Around line 254:
'=item' outside of any '=over'
- Around line 270:
You forgot a '=back' before '=head2'
- Around line 320:
'=item' outside of any '=over'
- Around line 332:
You forgot a '=back' before '=head2'