Portál AbcLinuxu, 3. června 2024 01:33

MPD, Konqueror a Jamendo

14.2.2008 20:27 | Přečteno: 2456× | Výběrový blog | poslední úprava: 14.2.2008 20:28

Nedávno jsem znovu objevil Jamendo a jako uživatel konqueroru a mpd jsem se je pokusil všechny tři donutit k spolupráci. :-) Idea byla vytvořit pro konqueror nové service menu, které by přidalo album na playlist music player daemona - ten by tak mohl streamovanou hudbu přehrávat. Pro jasnějsí představu následuje screenshot.

jamendo screenshot

Po nedávném redesignu Jamenda se mi ale v konqueroru nepodařilo najít přímý odkaz na žádný playlist. Naštěstí ale Jamendo nabízí hezké rozhraní MusiclistApi, díky kterému není získání playlistu problém. Následující bash skript očekává url jamendího alba, které přidá do playlistu mpd. Pokud jako první parametr uvedete -p, nejprve současný playlist smaže a po přidání nového hned začne přehrávat.

#!/bin/bash
NAME=mpc.jamendo.add

BASE_URL="http://www.jamendo.com/"
PLAY_URL="http://www.jamendo.com/get/track/id/album/audio/play/"

if [[ $# -eq 0 ]]; then
    echo -e "$NAME -- simple jamendo interface for mpd\
            \nusage: $NAME [-p] jamendo_url"
    exit
fi

if [[ "$1" == "-p" ]]; then
    PLAY=0
    shift
fi

if [[ "$1" =~ ^${BASE_URL}.*album/([0-9]*)/?$ ]]; then
    NUMBER=${BASH_REMATCH[1]}
else
    echo "wrong URL" >&2
    exit 1
fi

[[ $PLAY ]] &&  mpc clear;
wget -O - ${PLAY_URL}${NUMBER} | mpc add
[[ $PLAY ]] &&  mpc play;

Poznámky: Nebyl by asi problém mpc nahradit jiným přehrávačem, který rozumí formátu m3u, případně ještě XSPF (viz MusiclistApi). Streamuje se ve formátech mp3 a ogg, ale bohužel mpd trpí bugem, který omezuje volbu na mp3.


Teď už stačí vytvořit service menu pro konqueror, které bude spouštět výše uvedenž skript. Do adresáře ~/.kde/share/apps/konqueror/servicemenus přidáme soubor jamendo.desktop s následujícím obsahem:

[Desktop Entry]
ServiceTypes=text/html
Actions=jamendo_play;jamendo_add
X-KDE-Priority=TopLevel
X-KDE-Submenu=mpc &Jamendo

[Desktop Action jamendo_add]
Name=vložit na konec playlistu
Exec=~/bin/mpc.jamendo.add %u 2>&1 /dev/null

[Desktop Action jamendo_play]
Name=vložit playlist a přehrát
Exec=~/bin/mpc.jamendo.add -p %u 2>&1 /dev/null
Dobrý nápad je zkontrolovat si cestu (případně i název) k skriptu mpc.jamendo.add.

Btw na ArchLinuxím fóru jsem narazil na cli rozhraní k Jamendu napsané v bashi :-), třeba se bude někomu líbit.

       

Hodnocení: 100 %

        špatnédobré        

Obrázky

MPD, Konqueror a Jamendo, obrázek 1

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

14.2.2008 22:13 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: MPD, Konqueror a Jamendo
Odpovědět | Sbalit | Link | Blokovat | Admin
Mam vlastny skript namapovany na globalnu skratku Win+L (Load) a loadujem si hudbu do mpd nim. Teda vlastne uz neloadujem, mpd je zufalo sekavy a padavy, takze som sa zase vratil k Amaroku. Radsej nieco, co nie je pre mna uplne dokonale, ale pada to iba vynimocne a aj to zvacsa nie vlastnou vinou.
#!/bin/bash

DATA=/data/mp3

send() {
        echo "$*" > /dev/tcp/localhost/6600
}

file="`netcat localhost 6600 <<<'playlistinfo 0
close' | sed -n  '/^file/s/^file: //p' | iconv -f utf8 -t iso-8859-2`"

path="$DATA/${file%/*}"
[[ "x$path" = x ]] && path="$DATA"

dir=`kdialog --getexistingdirectory "$path"`
[[ $? != 0 ]] &&
        exit
dir="${dir#/data/mp3/}"

if [[ "x$dir" != x ]]; then
        if [[ "$1" == "-a" ]]; then
                send add "\"$dir\""
        else
                send clear
                send add "\"$dir\""
        fi
fi

send play
Pozrie sa, co je naloadovane v playliste a podla toho v tom adresi otvori kdialog --getexistingdirectory. Ak je playlist prazdny, tak otvori mp3 "rootdir". Ak je spusteny s parametrom -a (Win+Shift+L), tak to do playlistu iba prida, nepremaze existujuci. A spusti. Nakolko mpd protokol je uzasne jednoduchy, tak nie je nutne ani pouzivat nejakeho dalsieho klienta a da sa ovladat rovno bashom. Jedina vec je, ze mpd chce mp3-ky podla cesty v jeho databaze a nie podla cesty v fs. Takze treba niekedy pridat prefix mp3 "rootdir" a niekedy ubrat.
If you hold a Unix shell up to your ear, you can you hear the C.
15.2.2008 17:35 marbu | skóre: 31 | blog: hromada | Brno
Rozbalit Rozbalit vše Re: MPD, Konqueror a Jamendo
Hezké, já měním playlist přes ncmpc, kterýho spustím v yakuake (většinou tam na nějaké záložce běží pořád). S tou padavostí to u mě není tak strašný, pokud se vyřadí aRts, se kterým mi mpd rádo navzájem sem tam blokovalo.
There is no point in being so cool in a cold world.
Josef Kufner avatar 16.2.2008 10:45 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: MPD, Konqueror a Jamendo
Odpovědět | Sbalit | Link | Blokovat | Admin
Jak vypadá Sonata? Je to vůbec funkční? Jsem ji zkoušel a nedělalo to nic než jen zobrazovalo co se děje...
Hello world ! Segmentation fault (core dumped)
16.2.2008 13:32 marbu | skóre: 31 | blog: hromada | Brno
Rozbalit Rozbalit vše Re: MPD, Konqueror a Jamendo
Sonata mi funguje pěkně a přijde mi celkem použitelná. Ale na druhou stranu si většinu času vystačím s ncmpc a Sonatu pouštím když chci nějak složitěji vyhledávat, podívat se na text písničky nebo podle nálady :-) takže ji možná nepoužívám dost často, aby se nějaká chyba projevila. Btw chválně jsem teď zkoušel co udělá, když vyvalám ten bug co shodí mpd a vůbec se to Sonatě nelíbí - chová se to podobně jak popisuješ a pak se odpojí.
There is no point in being so cool in a cold world.
1.5.2008 06:13 Petr Dlouhý | skóre: 9
Rozbalit Rozbalit vše Re: MPD, Konqueror a Jamendo
Odpovědět | Sbalit | Link | Blokovat | Admin
Kdyby to někdo potřeboval do Opery, tak drobné nakopnutí je:
Item, "Vložit na konec playlistu"="Execute program, "/home/user/bin/mpc.jamendo.add ", "%l""
Item, "Vložit playlist a přehrát"="Execute program, "/home/user/bin/mpc.jamendo.add -p ", "%l""
http://wiki.operacesky.net/index.php?title=%C3%9Apravy_menu_-_z%C3%A1klady
3.5.2008 01:31 Petr Dlouhý | skóre: 9
Rozbalit Rozbalit vše Re: MPD, Konqueror a Jamendo
Odpovědět | Sbalit | Link | Blokovat | Admin

Začal jsem používat ten skript, ale začala mě štvát jedna věc:

Na Jamendu mají mp3 soubory uložený id3 tag až na konci (id3 tagy je samozřejmě možné mít na začátku, nebo dokonce i měnit během hraní) - takže mpd nedokáže tu informaci u streamu přečíst a nezobrazí se popisky k jednotlivým skladbám.

Tento problém lze vyřešit poměrně jednoduše - stačí používat ogg. Drobně jsem proto ten skript poupravil, aby bylo možné vybrat si formát hudebních souborů:

#!/bin/bash
NAME=mpc.jamendo.add

BASE_URL="http://www.jamendo.com/"
PLAY_URL="http://www.jamendo.com/get/track/id/album/audio/plain/"

if [[ $# -eq 0 ]]; then
    echo -e "$NAME -- simple jamendo interface for mpd\
            \nusage: $NAME [-p] jamendo_url"
    exit
fi

if [[ "$1" == "-p" ]]; then
    PLAY=0
    shift
fi

if [[ "$1" =~ ^${BASE_URL}.*album/([0-9]*)/?$ ]]; then
    NUMBER=${BASH_REMATCH[1]}
else
    echo "wrong URL" >&2
    exit 1
fi

#Choose your encoding:
ENC="ogg2" # lowfi OGG q4
#ENC="mp31" # lowfi MP3 (96kbits) (default for streaming / player)

#These are probably not working:
#ENC="ogg1" # lowfi OGG (q-1)
#ENC="ogg3" # hifi OGG q7
#ENC="mp32" # hifi MP3 (200kbits+) (default for archives)

[[ $PLAY ]] &&  mpc clear;
wget -O - "${PLAY_URL}${NUMBER}&aue=${ENC}" | mpc add
[[ $PLAY ]] &&  mpc play;                            

Problém je ale v tom, že v mpd je zřejmě nějaká chyba, taže ten ogg začně přehrávat až po několika minutách (vůbec stahovat se dá jen ogg2 a mp31), a není to problém Jamenda, protože mplayer to přehraje hned. Takže to zatím nic neřeší, ale třeba někdo mpd časem opraví.

3.5.2008 21:44 marbu | skóre: 31 | blog: hromada | Brno
Rozbalit Rozbalit vše Re: MPD, Konqueror a Jamendo

Se dívám, že status toho bugu byl nedávno změněn na fixed, takže je to možná v svn verzi spravené už teď - ale nezkoušel jsem to a nerozumím hlášce Fixed in mpd-mk.

Jo a díky za doplnění.

There is no point in being so cool in a cold world.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.