#!/usr/bin/perl -w use strict; my $host = shift || "localhost"; # change if you don't have localhost/other host default my $port = shift || 6600; use IO::Socket::INET; my $sock = IO::Socket::INET->new(PeerHost => $host, PeerPort => $port) or die "mpd is not running/failed to connect to $host:$port ($!)\n"; print $sock "currentsong\n"; my $buf; my $length; my $currlen; my $title; my $artist; my $album; my $id; while ($buf = <$sock>) { $length = (split(/\s/, $buf))[1] if ($buf =~ /Time: /); $artist = substr($buf, 8) if ($buf =~ /Artist: /); $title = substr($buf, 7) if ($buf =~ /Title: /); $currlen = (split(/\s/, $buf))[1] if ($buf =~ /Pos: /); $id = (split(/\s/, $buf))[1] if ($buf =~ /Id: /); if ($buf =~ /OK\n/) { print $sock "close\n"; last(); } } my $bold = chr(2); my $reset = chr(15); my $red = chr(3)."4"; chomp($artist); chomp($title); chomp($currlen); chomp($length); print "np: $bold$artist$reset - $bold$title$reset $red(".conv($currlen)."/".conv($length).")$reset\n"; # The following is from Violet4's Conversion module sub conv { my $time = shift; # Xs if ($time < 60) { return($time."s"); } # Xm Xs if ($time < 3600 && $time > 59) { my $minutes = int($time / 60); my $seconds = $time - ($minutes * 60); return($minutes."m ".$seconds."s"); } # Xh Xm Xs if ($time < 86400 && $time > 3599) { my $hours = int($time / (60 ** 2)); my $temp = $time - ($hours * (60 ** 2)); my $minutes = int($temp / 60); my $seconds = $temp - ($minutes * 60); return($hours."h ".$minutes."m ".$seconds."s"); } }