Il Blog di Fabrizio Mondo

Come creare una web radio con Linux, Icecast e Ices2 (Guida basilare)

febbraio 20, 2010 8:38 pm

IcecastSettantaseiesimo articolo dedicato alle web radio

Carissimi internauti vi ricordate di questo articolo?

In quell’articolo si parlava di Icecast, un server di streaming rilasciato con licenza GPL e che permette lo streaming audio/video dei file Ogg, sia Vorbis che Theora. Lo abbiamo introdotto in ambiente windows, adesso, vedremo di parlarne anche in ambiente linux.

Cominceremo dall’inizio, ovvero dall’installazione dei componenti fino all’effettiva messa in onda della radio. Successivamente, in una guida avanzata, procederemo a vagliare e valutare tutte le possibili opzioni. Per adesso, mettiamo in moto la nostra radiolina linuxiana.

Supponiamo di lavorare su una debian-based

apt-get install icecast ices2

Una volta installati i due programmi, effettuiamo una modifica al file /etc/default/icecast2 tramite un qualsiasi editor di testo modificando il parametro ENABLE, da false a true. Ciò permetterà di potere effettuare la prossima operazione.

Facciamo partire il nostro server icecast2 tramite il comando:

/etc/init.d/icecast2 start

Potremo quindi trovare l’interfaccia web, comprensiva di pannello di amministrazione, all’indirizzo http://localhost:8000
Studieremo successivamente le peculiarità web di questo server di streaming,

In questo momento abbiamo il nostro server di streaming funzionante (almeno in locale) e possiamo cominciare a lavorare su ICES2.

Ices2 è:

usato per fornire a server audio streaming Icecast2 flussi
audio Ogg Vorbis. Supporta sia input audio live dalla scheda audio, sia la
ricodifica di file Ogg Vorbis da una scaletta.

Creiamo tre cartelle da terminale:

mkdir /var/log/ices
mkdir /etc/ices2
mkdir /etc/ices2/music

La prima servirà a contenere i log, la seconda servirà invece a contenere i file di configurazione mentre la terza conterrà i file musicali.

All’interno della cartella /usr/share/doc/ices2/examples/ si trovano tre files:

-rw-r--r-- 1 root root 3426 2005-01-03 05:07 ices-alsa.xml
-rw-r--r-- 1 root root 3427 2005-01-03 21:39 ices-oss.xml
-rw-r--r-- 1 root root 4245 2004-07-19 23:53 ices-playlist.xml

I tre files corrispondono alle tre modalità di streaming, ovvero tramite ALSA (Advanced Linux Sound Architecture) oppure OSS (Open sound system) oppure tramite una playlist di file OGG, che è il caso che tratteremo in questa guida basilare.

Copiamo il file ices-playlist.xml all’interno della cartella /etc/ices2 ad esempio con il comando

cp /usr/share/doc/ices2/examples/ices-playlist.xml /etc/ices2

a questo punto dobbiamo verificare che vi sia matching perfetto tra la password impostata su ices2 e quella del server icecast, come del resto avviene per qualsiasi accoppiata, encoder/server.

La password del server di streaming icecast2 si trova nel file /etc/icecast2/icecast.xml alla sezione AUTHENTICATION.
La password da impostare in ices2, che deve chiaramente essere uguale a quella (per adesso di default) del server icecast2, è nella sezione INSTANCE del file ices-playlist.xml.

Penseremo a tutti i parametri opzionali (tra cui anche la modifica delle password) nella guida avanzata. Per adesso il nostro unico obiettivo è quello di mettere (almeno localmente) la radio in trasmissione.

Dopo avere controllato la corrispondenza tra le password passiamo al riempimento della cartella music, precedentemente impostata con i file ogg vorbis che ci interessa trasmettere.

Una volta riempita la cartella music, creiamo il file playlist.txt all’interno della cartella /etc/ices2 e scriviamo una riga per ciascun file OGG che dobbiamo trasmettere, con tanto di PATH completo.

Una volta creato il file, startiamo ices2 con il seguente comando:

ices2 /etc/ices2/ices-playlist.xml

In questo modo il server icecast avrà come mountpoint il flusso creato da ices2.

Esempio di risoluzione equazione differenziale lineare del secondo ordine a coefficenti costanti con il metodo di variazione delle costanti

gennaio 19, 2010 3:50 pm

Ecco l’esempio di cui parlavo

Supponiamo di avere:
y'' + y' = \frac{1}{\sin(x)}
L’equazione omogenea associata è y'' + y' = 0 . L’equazione caratteristica è \lambda^2 + 1 = 0 che ha \Delta < 0 = \sqrt{-4}

Rientriamo nel terzo caso descritto in questo articolo.

Quindi occorre trovare i numeri \alpha = 0 \quad \beta = 1 in modo da avere:

c_1\cos(x) + c_2\sin(x)

Le costanti c devono verificare il sistema:

\begin{cases}  c'_1(x)\cos(x) + c'_2(x)sin(x) = 0 \\  -c'_1(x)\sin(x) + c'_2(x)cos(x) = \frac{1}{\sin(x)}    \end{cases}

Abbiamo che:
W(x) =  \begin{bmatrix} \cos(x) & \sin(x) \\ -\sin(x) & cos(x) \end{bmatrix} = \cos^2(x) + \sin^2(x) = 1

utilizzando la regola di Cramer, possiamo ricavare c'_{1,2}

c'_1 = 1 \quad c'_2 = \frac{\cos(x)}{\sin(x)}

Integriamo entrambi i coefficienti:

\begin{cases} c_1 = \int c'_1(x)\, dx = -x \\  c_2 = \int c'_2(x)\, dx = \log \lvert\sin(x)\rvert    \end{cases}

Sostituiamo i coefficienti nell’equazione di partenza e otterremo la soluzione particolare dell’equazione non omogenea di partenza, ovvero:

y(x) = x\cos(x) + \sin(x)\log \lvert\sin(x)\rvert

Come risolvere equazioni differenziali lineari del secondo ordine a coefficienti costanti non omogenee tramite il metodo di variazione delle costanti

1:35 pm

Ci eravamo lasciati con un metodo risolutivo delle equazioni differenziali lineari del secondo ordine a coefficienti costanti non omogenee valido in alcuni casi, ovvero quando il polinomio f(x) rispondeva ad una determinata “forma”.

Vedremo adesso come risolvere un’equazione di questo tipo nel caso generico, tramite il metodo di variazione delle costanti altrimenti detto di Lagrange (sempre sia lodato).

Partiamo da:

ay'' + by' + cy = f(x) (1)
ay'' + by' + cy = 0 (2)

che sono l’equazione differenziale in forma normale di partenza e la sua omogenea associata.

Definiamo y_{1,2} due soluzioni della (2).

Tali soluzioni supponiamo abbiano il determinante wronskiano pari a 0.

Il determinante Wronskiano è dato dal determinante della matrice:
\begin{vmatrix} y_1 & y_2 \\ y'_1 & y'_2 \end{vmatrix}
Cerchiamo una soluzione della (1) del tipo: y = c_1(x)y_1 + c_2(x)y_2

A questo punto esprimiamo c_1 e c_2 tramite il seguente sistema:
\begin{cases} c_1 y_1 + c_2 y_2 = 0  \\ c'_1 y'_1 + c'_2 y'_2 = f \end{cases}
Risolviamo il sistema in c'_1 e c'_2 .

Otteniamo:

c'_1 = \frac{-y_2 f}{y'_2 y_1 - y'_1 y_2} \qquad \qquad c'_2 = \frac{y_1 f}{y'_2 y_1 - y'_1 y_2} \,

Integriamo le costanti, ottenendo i valori finali.

P.S Questo articolo è abbastanza complesso e incomprensibile per forti neofiti, si chiarirà tutto meglio grazie ad un esempio.