mpcplay - spela enstaka filer med mpd utan att uppdatera db
Postat: 24 okt 2009, 08:46
... utan att uppdatera hela databasen.
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.
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);
}