POE::Component::Player::Mpg123 - a wrapper for the mpg123 player


        use POE qw(Component::Player::Mpg123);

        $mp = POE::Component::Player::Mpg123->new();



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.


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:


Indicates the name of a session to which events will be posted. Default: main.


Specifies device to play to. Default: /dev/dsp.


Allows for passing extra arguments to the underlying application.


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 usual done. For a comprehensive listing of events fired, please refer to the EVENTS section below.


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.


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.


This method causes the mp3 player to shut down.


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.


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.


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.


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:


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.


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.


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.


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.


Erick Calder <>


This component is a complete rewrite of the older PoCo::MPG123 written by Matt Cashner a.k.a. "sungo" <> and Rocco Caputo a.k.a. "dngor" <>. 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.


This module may be found on the CPAN. Additionally, both the module and its RPM package are available from:


$Date: 2002/09/29 02:15:57 $


$Revision: 1.2 $


Can't think of anything yet but feel free to suggest something :)


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 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'