Tens un servidor avorrit? Posa-li música!


Si tens ADSL o cable i una IP fixa, és fàcil que tinguis un servidor dedicat a recollir el correu o per tenir petites webs. Per a fer servir tot això no fa falta un gran equip i el 90% del temps la màquina es dedica a “donar menjar als coloms”. Vols muntar una emissora de música per a casa? Doncs segueix llegint…

A les típiques reunions familiars és normal tenir algun CD posat a l’equip de música perquè faci ambient. Cada cert temps, cal canviar el CD i, sovint, l’equip de música queda a l’esquena d’algun convidat i hi ha dificultats per canviar el disc. Doncs no posis discs: posa la ràdio. Com? amb una emissora d’FM connectada al servidor i que aquest toqui música en MP3 o Ogg Vorbis.

(No fa falta una emissora d’FM. Si tens el servidor a prop de l’equip de música, el pots connectar directament amb un cable. Però jo sóc així…)
Ingredients:

  • Un servidor avorrit
  • Una emissora d’FM (o un cable). La que tinc jo és una Adokit, a la venda a magatzems d’electrònica.
  • Una bona col·lecció de fitxers de música
  • Ganes de divertir-se
  • Simplement es tracta de que el servidor “toqui música” sense parar. Com l’escoltem serà una altra cosa.

    Al principi, era molt senzill. Simplement, una ordre com “mpg123 *” sobre el directori dels fitxers musicals era suficient. Però jo volia més. Coses com que la ràdio executés una ràdio-fórmula segons l’hora del dia, poder escoltar els butlletins horaris i, sobretot, que no em deixés espais en blanc entre cançó i cançó.

    Per poder fer les mescles entre el final d’una cançó i el principi de la següent, necessitarem el “dbmix”

    apt-get install dbmix

    “dbmix” és un dimoni que recull la música que se li pot enviar per diferents canals, les mescla, i envia el resultat a /dev/dsp

    Una altra cosa que necessitem és conèixer la durada de les cançons per poder fer la mescla al final. Això ho obtindrem gràcies a algú que s’ho ha treballat de veritat, i amb una sola funció en PHP obtindrem tota la informació que necessitem: http://www.getid3.org.

    Ara barregem els ingredients. Com que això és un projecte “per jugar”, no desvetllaré els “scripts” necessaris. Simplement explicaré com fer-ho i que cadascú ho investigui… i jugui!

    Al cron, cada hora, executarem un script que llenci la fórmula adeqüada per aquella hora (jo tinc, per exemple, de dia música Pop, Rock, anys 70, 80… Al vespre, música Chillout i a partir de les 12 de la nit i fins les 6 del matí, New Age (per dormir relaxat). A més, cada dia, genero una “playlist” aleatòria de tota la música que ha de tocar durant tot el dia.

    L’script que executarem cada hora començarà engegant el “dbfsd” i llegirà la llista de cançons d’aquella hora concreta i farem un bucle per passar per totes elles. Llegirem les característiques d’aquella canço (recordem que “getid3” és un conjunt de scripts en PHP, per tant crec que és més fàcil fer-ho amb aquest llenguatge)

    $id3tag=GetAllFileInfo($mp3);
    $seconds=$id3tag[“playtime_seconds”];
    $sample_rate=$id3tag[“audio”][“sample_rate”];

    $mp3 és una variable que conté la ruta completa a la canço que volem que soni.
    La funció GetAllFileInfo retorna un array, que el recullo a $id3tag.
    $seconds és la durada en segons de la cançó.
    $sample_rate és la freqüència de la cançó.

    Ja tenim el que necessitem. Ara, toca fer que soni:
    Primer mirarem si és un MP3 o un Ogg Vorbis (fàcil, no?) i assignarem a la variable $player el programa que serà el responsable d’executar-la.
    Si és un MP3:
    $player=”mpg123 -q -s”;
    Si és un Ogg Vorbis:
    $player=”ogg123 -q -d raw -f -“;

    I ara, l’executem:
    $i=system (“$player \”$mp3\” | dbcat -c $canal -r $sample_rate 2>/dev/null >/dev/null &”);

    La variable $canal contindrà el canal pel qual llencem la música, que haurà d’anar canviant alternativament entre 1 i 2.

    La instrucció “dbcat” és l’encarregada d’enviar la sortida dels programes mpg123 i ogg123 a “dbfsd”, que és el dimoni encarregat de fer la mescla i enviar-ho a /dev/dsp

    Després, esperarem els temps que duri la cançó, menys 5 segons.

    sleep ($seconds-5);

    i tornem a començar el bucle. Per què 5 segons abans? Doncs perquè es faci la mescla de la segona cançó amb el final de la primera.

    Hi ha un problema: quan mpg123 o ogg123 acaben l’execució, dbcat no finalitza i per aquell canal sona un brugit molt lleig (bzzzzzz…). Per tant, haurem d’anar “matant” els processos que ja hagin acabat.

    $i=trim(exec(“ps ax|grep \”dbcat -c $canal\”|grep -v \”grep\””));
    $pid=substr($i,0,strpos($i,” “));
    if ($pid!=””) system (“kill -9 $pid”);

    Escoltar els butlletins horaris…
    … o aquell programa que fan cada dia a una hora i que ens agrada tant.
    Necessitarem una ràdio per connectar-la a l’entrada de la tarja de so del servidor, sintonitzat a la freqüència que vulguem. Per escoltar la ràdio, només haurem de baixar el canal PCM del mesclador i pujar el canal LINE. Fàcil, oi? Doncs sí, xupat:

    apt-get install rexima

    “rexima” és un mesclador basat en ncurses que ens permet actuar sobre el mesclador de la tarja de so. A més, funciona de meravella des de fitxers de script. Per exemple:

    rexima pcm 0 line 90

    baixarà a 0% el canal PCM i posarà al 90% el canal LINE. Ja està, ja sentim la ràdio.
    Per fer-ho bonic, es pot fer un bucle que baixi el canal PCM en intervals d’un 1% i a la vegada que pugi el canal LINE en un 1%. Anar repetint el bucle fins arribar al volum desitjat.

    Notes:

  • Si executeu l’script de música cada hora, heu de “matar” els processos anteriors i iniciar-los de nou. Feu un “kill -9” per mpg123, ogg123, dbcat i dbfsd
  • Emetre en la banda comercial d’FM no està permès. Aquest tipus d’emissores són experimentals i de baixa potència, per tant no haurien d’abastar un radi superior a 100 metres i, evidentment, procurant no interferir altres emissions.
  • Apa doncs, ja teniu entreteniment una bona estona.

    Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=1801 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.


    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.