The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
NAME
    Mplayer::NowPlaying - query a running mplayer process for now playing
    metadata

SYNOPSIS
        use Mplayer::NowPlaying;

        ...

        my $current = now_playing;

        if(exists($current->{artist})) {
          print "Current artist is $current->{artist}\n";
        }

DESCRIPTION
    Mplayer::NowPlaying was born because the author runs mplayer daemonized,
    controlling it via named pipes. I wanted a simple way to retrieve
    various 'now playing' metadata for the currently playing song.

    Mplayer::NowPlaying supports two modes:

  Normal
    Start mplayer in normal mode and redirect STDOUT to a file:

      mplayer *.mp3 > ./mplayer_log

    Get the current song title:

      # 'normal' argument optional; this is the default
      my $now_playing = now_playing("$ENV{HOME}/mplayer.log", 'normal');

      printf("Current song is %s\n", $now_playing->{title});

    Mplayer produces a lot of output in normal mode, effectively making our
    metadata retrieval slow very fast (10 songs played or so). Therefore
    it's really recommended to use identify mode.

  Identify
    Start mplayer with the -identify switch:

      mplayer -identify *.mp3 > mplayer_log

    or the preferred

      mplayer -quiet -msglevel all=0 -identify *.mp3 > mplayer_log

    Get the current song title:

      # note 'identify' argument
      my $now_playing = now_playing("$ENV{HOME}/mplayer.log", 'identify');

      printf("Current song is %s\n", $now_playing->{title});

    By using -msglevel all=0 -identify the amount of output from mplayer is
    reduced to a minimum, making the retrieval very fast. This is
    recommended.

EXPORTS
  now_playing()
    Parameters: ($logfile | $filehandle), ($mode)

    Returns: \%metadata

      my %metadata = %{ now_playing($logfile, 'identify'); };
      my $artist = $metadata{artist};

    now_playing() takes two arguments (the last one optional):

    * The logfile (or filehandle) output from mplayer is directed to

    * 'normal' or 'identify' mode. Normal is the default.

    The hash will be filled with the available metadata for the current
    media. A typical result might look like:

      album    => "Me and Simon",
      artist   => "Laleh",
      audio    => 44100,
      bitrate  => 128000,
      channels => 2,
      chapters => 0,
      codec    => "mp3",
      demuxer  => "audio",
      file     => "~/Laleh-Me_and_Simon/01-big_city_love.mp3",
      format   => 85,
      genre    => 1,
      id       => 0,
      length   => "1288.00",
      seekable => 1,
      start    => "0.00",
      title    => "Big city love",
      year     => 2009

    Possible keys include:

      title
      artist
      album
      year
      comment
      genre
      bitrate
      codec
      format
      id
      channels
      chapters
      audio
      demuxer
      length
      seekable,
      start
      file

AUTHOR
      Magnus Woldrich
      CPAN ID: WOLDRICH
      magnus@trapd00r.se
      http://japh.se

COPYRIGHT
    Copyright 2011 Magnus Woldrich <magnus@trapd00r.se>. This program is
    free software; you may redistribute it and/or modify it under the same
    terms as Perl itself.

SEE ALSO
    mplayer(1)