NAME
    Net::MPD - Communicate with an MPD server

SYNOPSIS
      use Net::MPD;

      my $mpd = Net::MPD->connect();

      $mpd->stop();
      $mpd->clear();
      $mpd->search_add(Artist => 'David Bowie');
      $mpd->shuffle();
      $mpd->play();
      $mpd->next();

      while (1) {
        my @changes = $mpd->idle();
        print 'Changed: ' . join(', ', @changes) . "\n";
      }

DESCRIPTION
    Net::MPD is designed as a lightweight replacment for Audio::MPD which
    depends on Moose and is no longer maintained.

METHODS
  connect [$address]
    Connect to the MPD running at the given address. Address takes the form
    of password@host:port. Both the password and port are optional. If no
    password is given, none will be used. If no port is given, the default
    (6600) will be used. If no host is given, "localhost" will be used.

    Return a Net::MPD object on success and croaks on failure.

  version
    Return the API version of the connected MPD server.

  update_status
    Issue a "status" command to MPD and stores the results in the local
    object. The results are also returned as a hashref.

MPD ATTRIBUTES
    Most of the "status" attributes have been written as combined
    getter/setter methods. Calling the "update_status" method will update
    these values. Only the items marked with an asterisk are writable.

    volume*
    repeat*
    random*
    single*
    consume*
    playlist
    playlist_length
    state
    song
    song_id
    next_song
    next_song_id
    time
    elapsed
    bitrate
    crossfade*
    mix_ramp_db*
    mix_ramp_delay*
    audio
    updating_db
    error
    replay_gain_mode*

MPD COMMANDS
    The commands are mostly the same as the MPD protocol
    <http://www.musicpd.org/doc/protocol/index.html> but some have been
    renamed slightly.

  clear_error
    Clear the current error message in status. This can also be done by
    issuing any command that starts playback.

  current_song
    Return the song info for the current song.

  idle [@subsystems]
    Block until a noteworth change in one or more of MPD's subsystems. As
    soon as there is one, a list of all changed subsystems will be returned.
    If any subsystems are given as arguments, only those subsystems will be
    monitored. The following subsystems are available:

    database
        The song database has been changed after an update.

    udpate
        A database update has started or finished.

    stored_playlist
        A stored playlist has been modified.

    playlist
        The current playlist has been modified.

    player
        Playback has been started stopped or seeked.

    mixer
        The volume has been adjusted.

    output
        An audio output has been enabled or disabled.

    sticker
        The sticket database has been modified.

    subscription
        A client has subscribed or unsubscribed from a channel.

    message
        A message was received on a channel this client is watching.

  stats
    Return a hashref with some stats about the database.

  next
    Play the next song in the playlist.

  pause $state
    Set the pause state. Use 0 for playing and 1 for paused.

  play [$position]
    Start playback (optionally at the given position).

  play_id [$id]
    Start playback (optionally with the given song).

  previous
    Play the previous song in the playlist.

  seek $position $time
    Seek to $time seconds in the given song position.

  seek_id $id $time
    Seek to $time seconds in the given song.

  seek_cur $time
    Seek to $time seconds in the current song.

  stop
    Stop playing.

  add $path
    Add the file (or directory, recursively) at $path to the current
    playlist.

  add_id $path [$position]
    Add the file at $path (optionally at $position) to the playlist and
    return the id.

  clear
    Clear the current playlist.

  delete $position
    Remove the song(s) in the given position from the current playlist.

  delete_id $id
    Remove the song with the given id from the current playlist.

  move $from $to
    Move the song from position $from to $to.

  move_id $id $to
    Move the song with the given id to position $to.

  playlist_find $tag $search
    Search the current playlist for songs with $tag exactly matching
    $search.

  playlist_id $id
    Return song information for the song with the given id.

  playlist_info [$position]
    Return song information for every song in the current playlist (or
    optionally the one at the given position).

  playlist_search $tag $search
    Search the current playlist for songs with $tag partially matching
    $search.

  playlist_changes $version
    Return song information for songs changed since the given version of the
    current playlist.

  playlist_changes_pos_id $version
    Return position and id information for songs changed since the given
    version of the current playlist.

  prio $priority $position
    Set the priority of the song at the given position.

  prio_id $priority $id
    Set the priority of the song with the given id.

  shuffle
    Shuffle the current playlist.

  swap $pos1 $pos2
    Swap the positions of the songs at the given positions.

  swapid $id1 $id2
    Swap the positions of the songs with the given ids.

  list_playlist $name
    Return a list of all the songs in the named playlist.

  list_playlist_info $name
    Return all the song information for the named playlist.

  list_playlists
    Return a list of the stored playlists.

  load $name
    Add the named playlist to the current playlist.

  playlist_add $name $path
    Add the given path to the named playlist.

  playlist_clear $name
    Clear the named playlist.

  playlist_delete $name $position
    Remove the song at the given position from the named playlist.

  playlist_move $name $id $pos
    Move the song with the given id to the given position in the named
    playlist.

  rename $name $new_name
    Rename the named playlist to $new_name.

  rm $name
    Delete the named playlist.

  save $name
    Save the current playlist with the given name.

  count $tag $search ...
    Return a count and playtime for all items with $tag exactly matching
    $search. Multiple pairs of $tag/$search parameters can be given.

  find $tag $search ...
    Return song information for all items with $tag exactly matching
    $search. The special tag 'any' can be used to search all tag. The
    special tag 'file' can be used to search by path.

  find_add $tag $search
    Search as with "find" and add any matches to the current playlist.

  list $tag [$artist]
    Return all the values for the given tag. If the tag is 'album', an
    artist can optionally be given to further limit the results.

  list_all [$path]
    Return a list of all the songs and directories (optionally under $path).

  list_all_info [$path]
    Return a list of all the songs as with "listall" but include metadata.

  search $tag $search ...
    As "find" but with partial, case-insensitive searching.

  search_add $tag $search ...
    As "search" but adds the results to the current playlist.

  search_add_pl $name $tag $search ...
    As "search" but adds the results the named playlist.

  update [$path]
    Update the database (optionally under $path) and return a job id.

  rescan [$path]
    As <update> but forces rescan of unmodified files.

  sticker_value $type $path $name [$value]
    Return the sticker value for the given item after optionally setting it
    to $value. Use an undefined value to delete the sticker.

  sticker_list $type $path
    Return a hashref of the stickers for the given item.

  sticker_find $type $name [$path]
    Return a list of all the items (optionally under $path) with a sticker
    of the given name.

  close
    Close the connection. This is pretty worthless as the library will just
    reconnect for the next command.

  kill
    Kill the MPD server.

  ping
    Do nothing. This can be used to keep an idle connection open. If you
    want to wait for noteworthy events, the "idle" command is better suited.

  disable_output $id
    Disable the given output.

  enable_output $id
    Enable the given output.

  outputs
    Return a list of the available outputs.

  commands
    Return a list of the available commands.

  not_commands
    Return a list of the unavailable commands.

  tag_types
    Return a list of all the avalable song metadata.

  url_handlers
    Return a list of available url handlers.

  decoders
    Return a list of available decoder plugins, along with the MIME types
    and file extensions associated with them.

  subscribe $channel
    Subscribe to the named channel.

  unsubscribe $channel
    Unsubscribe from the named channel.

  channels
    Return a list of the channels with active clients.

  read_messages
    Return a list of any available messages for this clients subscribed
    channels.

  send_message $channel $message
    Send a message to the given channel.

TODO
  Command Lists
    MPD supports sending batches of commands but that is not yet available
    with this API.

  Asynchronous IO
    Event-based handling of the idle command would make this module more
    robust.

BUGS
  Idle connections
    MPD will close the connection if left idle for too long. This module
    will reconnect if it senses that this has occurred, but the first call
    after a disconnect will fail and have to be retried. Calling the "ping"
    command periodically will keep the connection open if you do not have
    any real commands to issue. Calling the "idle" command will block until
    something interesting happens.

  Reporting
    Report any issues on GitHub
    <https://github.com/bentglasstube/Net-MPD/issues>

AUTHOR
    Alan Berndt <alan@eatabrick.org>

COPYRIGHT
    Copyright 2013 Alan Berndt

LICENSE
    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

SEE ALSO
    Audio::MPD, MPD Protocol
    <http://www.musicpd.org/doc/protocol/index.html>

