Detta script är så enkelt, men genialiskt. En "nackdel" med mpd har varit att för att snabbt lyssna på en ny låt/platta så måste man uppdatera databasen ( mpc update [dir] ), vilket man kanske inte alltid vill/har tid med. Det skapar alltså temporära symlinks och kör sedan update enbart på den/dem.
Känns lite märkligt att man inte har tänkt på detta själv... har alltid använt mplayer i sådana situationer, men nu är det alltså slut med det.

Kod: Markera allt
#!/usr/bin/perl
# mpc-play
# version 0.2
# by Ilya "Voyager" Schurov (http://comm.noo.ru/iv-en/)
$MUSIC_PREFIX="/mnt/Music_1/";
$TEMP_DIR=".temp";
$SCRIPT_NAME="mpc-play";
# warning! all symlinks in $MUSIC_PREFIX/$TEMP_DIR will be lost on start!
$DEBUG=0;
$PWD=`pwd`;
chomp $PWD;
if(!@ARGV)
{
print "Usage:\n$SCRIPT_NAME <files-to-play>\n";
}
say_and_do("mpc --no-status stop",$DEBUG);
say_and_do("mpc --no-status clear",$DEBUG);
# removing symlinks from $TEMP_DIR
while(<$MUSIC_PREFIX/$TEMP_DIR/*>)
{
unlink if(-l);
}
foreach $file (@ARGV)
{
$link=$file;
# stripping slashes from arguments
$link=~s/\//_/g;
if($file!~/^\//)
{
$file="$PWD/$file";
}
symlink("$file","$MUSIC_PREFIX/$TEMP_DIR/$link")
|| die("Can't create symlink from $file to $MUSIC_PREFIX/$TEMP_DIR/$link: $!");
push @links, $link;
}
say_and_do("mpc update $TEMP_DIR",$DEBUG);
# now we need to wait while mpd updating DB
do
{
$stat=`mpc`;
sleep(0.1);
}while($stat=~/^Updating DB/m);
# generating playlist
foreach $link(@links)
{
$link=~s/\`/\\\`/g;
say_and_do("mpc --no-status add \"$TEMP_DIR/$link\"",$DEBUG);
}
#let's the music begins! :)
say_and_do("mpc play",$DEBUG);
sub say_and_do
{
my $str=shift;
my $debug=shift;
print "$str\n" if($debug);
system($str);
}