Sida 1 av 1

mpcplay - spela enstaka filer med mpd utan att uppdatera db

Postat: 24 okt 2009, 08:46
av dmz
... 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. :)

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);
}

Re: mpcplay - spela enstaka filer med mpd utan att uppdatera db

Postat: 24 okt 2009, 10:46
av Rasmus
Ser ju trevligt ut. Om man skulle lägga till funktionen i gimmix/gmpc så att man kan använda d'n'd för att lägga till filer i spellistan. Men då måste man ju förstås kunna hantera d'n'd på programeringsplanet...
Man skulle iof. kunna skapa en mapp i ~ där man kan lägga in/länka tillfällig musik.

Re: mpcplay - spela enstaka filer med mpd utan att uppdatera db

Postat: 24 okt 2009, 10:49
av dmz
vad är d'n'd?

Re: mpcplay - spela enstaka filer med mpd utan att uppdatera db

Postat: 24 okt 2009, 10:51
av Rasmus
dmz skrev:vad är d'n'd?
drag and drop

Re: mpcplay - spela enstaka filer med mpd utan att uppdatera db

Postat: 24 okt 2009, 10:56
av dmz
Fast det spelar ju ingen roll vilken klient du använder, som du säkert redan har listat ut... :p

Re: mpcplay - spela enstaka filer med mpd utan att uppdatera db

Postat: 24 okt 2009, 10:58
av Rasmus
dmz skrev:Fast det spelar ju ingen roll vilken klient du använder, som du säkert redan har listat ut... :p
Nej, det jag ville göra var att lägga in funktionen i klienten för att grafiskt kunna dra direkt in i spellistan. Men det behövs ju inte, bara en vidare utveckling ;)

Re: mpcplay - spela enstaka filer med mpd utan att uppdatera db

Postat: 24 okt 2009, 11:35
av dmz
Jaha, ursäkta...
Jo, liknande funktionalitet lär väl gå att mosa in i den antar jag. Jag tycker dock att detta är sjukt smidigt som det är.