Machrovinka: Automatické "řeknutí" toho, co zrovna hraje v Amaroku :-)

Pokud často posloucháte hudbu z Amaroku a rádi byste před každou písní chtěli slyšet, jak se daná píseň jmenuje (takový automatický moderátor), napsal jsem pro to skript.

Co vlastně dělá: běží v terminálu na pozadí (ideálně), sleduje, zda-li Amarok hraje. Pokud ano, zjistí název z ID3 tagu, lehce ztlumí hudbu, řekne název písničky (syntetizovaným hlasem, pochopitelně), obnoví hlasitost a čeká na další písničku.

Na systetizování používá espeak, po odkomentování je možno i kttsd, který má o něco málo čistší zvuk (dříve jsem kttsd měl, teď z repozitářů nějak zmizel či co. Kdybyste věděli, jak ho jednoduše přidat, prosím napište mi).

Zátěž CPU není prakticky žádná, protože drtivou většinu času skript čeká ve sleep. Syntetizovaný hlas je primárně dostupný v angličtině, takže nejlepší výsledky jsou pro výsledky s anglickými názvy :wink: Co s češtinou nevím, zatím se mi to nechtělo řešit, zejména jak poznat, že název je český.

Takže vlastní skript :slight_smile:


#! /bin/sh
# Automaticky moderator Amaroku - na zacatku kazde pisnicky syntetizovany hlas rekne, co prave hraje za pisnicku
# Autor Ales Janda, www.kyblsoft.cz (2006,2007)
# Pouzivejte, upravujte, sirte dle libosti


vrat_nazev_pisnicky() {
  skladatel="`dcop amarok player artist`"
  album="`dcop amarok player album`"
  nazev="`dcop amarok player title`"

  pisnicka="";
  if [ "$skladatel" != "" ]; then pisnicka="$skladatel"; fi
  if [ "$album" != "" ]; then pisnicka="$pisnicka, $album"; fi
  if [ "$nazev" != "" ]; then pisnicka="$pisnicka, $nazev"; fi
  pisnicka=`echo "$pisnicka" | tr "_-" "  "`
}


predchozi_pisnicka=""
while [ true = true ]; do

  if [ true = `dcop amarok player isPlaying` ]; then
    vrat_nazev_pisnicky

    if [ "$pisnicka" != "$predchozi_pisnicka" ] && [ "$pisnicka" != "" ]; then
      pisnicka_nyni=$pisnicka
      sleep 5             #chvilku pocka
      vrat_nazev_pisnicky

      if [ "$pisnicka" = "$pisnicka_nyni" ]; then            #jestli se to od te doby nezmenilo (napr. prochazenim pisni)
        hlasitost=`dcop amarok player getVolume`
        dcop amarok player setVolume $(($hlasitost*5/6)); sleep 0.3     # postupne ztlumeni hlasitosti
        dcop amarok player setVolume $(($hlasitost*4/6)); sleep 0.3
        dcop amarok player setVolume $(($hlasitost*3/6)); sleep 0.3
        echo $pisnicka

# nasledujici radek zakomentujte, pokud nepouzivate jako syntetizator espeak
        espeak -s 150 "$pisnicka"

# nasledujici radky odkomentujte, pokud pouzivate jako syntetizator kttsd
#        dcop kttsd KSpeech sayText "$pisnicka" en > /dev/null
#        sleep 4
#        while [ true = `dcop kttsd KSpeech isSpeakingText` ]; do sleep 0.1; done

        dcop amarok player setVolume $(($hlasitost*4/6)); sleep 0.3     # a zase zvyseni hlasitosti
        dcop amarok player setVolume $(($hlasitost*5/6)); sleep 0.3
        dcop amarok player setVolume $(($hlasitost*6/6)); sleep 0.3
      fi
    fi

    predchozi_pisnicka=$pisnicka
  fi

  sleep 2
done

Co s tím:

  1. Nasvítit, zkopírovat, uložit do souboru .sh
  2. Přesvědčete se, že máte nainstalován espeak. Pokud ne, doinstalujte ho (yum install espeak). Pokud chcete použít kttsd (KSpeech), upravte skript podle komentářů. Pokud máte něco úplně jiného, upravte skript podle sebe :wink:
  3. Spusťte skript
  4. Poslouchejte hudbu :wink:

Je možné, že vás to po čase začne štvát (však to nemusíte pouštět pořád), ale jako machrovinka je to skvělé :slight_smile: To prostě nikdo nemá :wink:

Užívejte dle libosti :wink:

Sice amarok nepouzivam ale je to opravdu pekny napad! :slight_smile:

Šlo by to upravit i na jiné přehrávače - musí akorát podporovat to ‘dcop’, aby šla vytáhnout aktuálně přehrávaná skladba :wink:

Z těch, co znám, tak kromě Amaroku určitě ještě Kaffeine, KPlayer a Noatun.