Soma Suite 1.14

Andrea Marchesini <bakunin@autistici.org>

9 giugno 2005

Abstract

La suite Soma  una collezione di tre applicativi per 
la gestione del palinsesto di una radio. Un demone 
chiamato SomaD gestisce le trasmissioni utilizzando 
come input file audio in locale o in streaming passati 
poi un un player esterno (vedi somaplayer) e 
amministrando stacchi pubblicitari, pause, random e 
molto altro.

Abstract

Attraverso SomaClient, si pu amministrare somad 
runtime via rete modificandogli il palinsesto, 
cambiandolo, stoppandolo e quindi gestendolo in ogni 
suo aspetto.

Abstract

SomaCheck controlla la sintassi dei file di 
configurazione necessari per somad.

Abstract

Esiste poi una libreria (LibSoma) che permette ad un 
qualsiasi programma che ne faccia uso di amministrare 
somad. SomaClient e SomaX sono due programmi che 
compiono le loro funzioni grazie a questa libreria. 
LibSoma  utilizzabile anche in php (PhpSoma) e in 
python (PySoma).

Abstract

Table of Contents

1 Introduzione
    1.1 Requisiti
    1.2 Installazione
        1.2.1 Simple Mutex
2 Configurazione
    2.1 soma.cfg
        2.1.1 User
        2.1.2 Background
        2.1.3 UnixSocket
        2.1.4 UnixPath
        2.1.5 ServerName
        2.1.6 Port
        2.1.7 Listen
        2.1.8 Password
        2.1.9 Debug
        2.1.10 LogFile
        2.1.11 PidFile
        2.1.12 PathSong
        2.1.13 PathSpot
        2.1.14 ProgramSong
        2.1.15 OptionsSong
        2.1.16 ProgramStream
        2.1.17 OptionsStream
        2.1.18 PathModules
        2.1.19 Palinsesto
        2.1.20 Spot
        2.1.21 XmlSyntax
        2.1.22 SymLinks
        2.1.23 DistribuitedPath
        2.1.24 HostAllow e HostDeny
    2.2 palinsesto.cfg
    2.3 Palinsesto.cfg - old style
        2.3.1 Palinsesto
        2.3.2 Description
        2.3.3 Priority
        2.3.4 Start e Stop
        2.3.5 TimeContinued
        2.3.6 SpotController
        2.3.7 Type
        2.3.8 Random
        2.3.9 SoftStop
        2.3.10 RatioSong e RadioSpot
        2.3.11 PathSong e PathSpot
        2.3.12 Stream
        2.3.13 Module
        2.3.14 ModuleData
        2.3.15 Jingle
        2.3.16 Include
    2.4 Palinsesto.cfg - XML Style
    2.5 Spot.cfg
        2.5.1 Description, Start, Stop, TimeContinued, Random
        2.5.2 Repeat
        2.5.3 Path
3 Avvio
    3.1 Somacheck
    3.2 Somad
    3.3 Somaclient
        3.3.1 --server e --port
        3.3.2 --unix
        3.3.3 -ssl
        3.3.4 --password
        3.3.5 --readdirectory e --readpalinsesto
        3.3.6 --filepalinsesto
        3.3.7 --oldpalinsesto
        3.3.8 --getpalinsesto
        3.3.9 --getoldpalinsesto
        3.3.10 --setdefaultpalinsesto
        3.3.11 --filespot, --oldspot, --getspot, ---getoldspot, --setdefaultspot
        3.3.12 --status
        3.3.13 --nextsong
        3.3.14 --nextsonglist
        3.3.15 --nextsongremove
        3.3.16 --nextsongsetspot
        3.3.17 --nextsonggetspot
        3.3.18 --running
        3.3.19 --quit
        3.3.20 --skip
        3.3.21 --stop e --start
        3.3.22 --code
        3.3.23 -pPASSWORD
        3.3.24 Shell mode
    3.4 Altri software
4 Struttura di una radio
    4.1 Primo esempio
    4.2 Secondo esempio
    4.3 Terzo esempio
5 Moduli
    5.1 Programmazione di moduli
6 Conclusione



1 Introduzione

Quello che segue  il manuale di installazione e 
utilizzo della suite soma. Se qualcuno trova qualche 
passaggio errato o poco approfondito  pregato di 
scrivermi o modificare direttamente il wiki dedicato 
alla documentazione.

1.1 Requisiti

Soma  installabile su quasi la totalit delle 
architetture e su quasi su qualsiasi sistema operativo 
(windows compreso: cygwin docet). I requisiti sono:

* libavformat - riconoscimento file

  http://ffmpeg.sourceforge.net/index.php

* libreadline - utilizzo 'intelligente' del terminale 
  
  http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html 

* libncurses - grafica di terminale 
  http://www.gnu.org/software/ncurses/ncurses.html 

* libssl - lo standard per i socket criptati 

1.2 Installazione

La suite soma  scaricabile dal sito internet 
http://www.somasuite.org, nel momento della 
scrittura di questo documento, l'ultima versione 
rilasciata  la 2.1:

http://www.somasuite.org/src/soma-2.1.tar.gz 

La procedura di compilazione  quella standard:

./configure 

consiglio sempre di vedere le optioni del configure:

./configure --help 

Poi si compila con:

make 

e si installa con:

make install 

Quest'ultimo comando  da farsi come root.

Se voltete installare anche PhpSoma (ovvero il supporto 
per php della libreria libsoma), dovete fare:

cd phpsoma

phpize

./configure

make

make install

Lo stesso vale per PySoma:

cd pysoma

python setup.py build

python setup.py install

1.2.1 Simple Mutex

Pu capitare che su certe architetture somad non 
compili. Questo capita perch i mutex che utilizza 
somad per gestire i suoi thread e l'accesso di questi 
alla zona di memoria condivisa del software non sono 
quelli standard posix (pthread), ma sono altri, scritti 
da me.

E' un progetto sviluppato da me anni fa chiamato SM 
(simple mutex). Una implementazione degli algoritmi 
mutex, variabili condizionali e altro con una 
attenzione maggiore agli errori e al carico di CPU. Li 
ho scritti per le principali architetture di cui 
conosco l'assembler, ma la compilazione a volte 
fallisce per la mancanza di riconoscimento dell'architettura.

Per risolvere questo problema bisogna sapere che 
architettura si possiede (i386, ppc, alpha, m68k, mips, 
sparc) e dopo di che effettuare il configure settando 
la variabile CFLAGS in maniera opportuna aggiungendo 
-d<architettura>. Esempi:

-dppc o -dalpha o -dsparc 

Quindi il comando da far per configurare correttamente 
la suite soma in fase di compilazione :

CFLAGS="-Dppc" ./configure 

e poi si continua con make e make install.

2 Configurazione

La suite soma, come detto nell'abstract  composta da 3 
applicativi separati:

* somad - il demone di scheduling del palinsesto 

* somaclient - il gestore del demone 

* somacheck - controllore dei file di configurazione 

Esiste poi anche una libreria inserita sempre in questi 
sorgenti chiamata libsoma che permette ad un qualsiasi 
programma che ne faccia uso, l'amministrazione dello scheduler.

Questa libreria  anche usuffruibile col Python e col PHP.

Per poter quindi lanciare ed utilizzare somad  
necessario prima di tutto scrivere in maniera corretta 
3 file di configurazione:

* /etc/somad/soma.cfg - configurazione del demone 

* /etc/somad/palinsesto.cfg - palinsesto iniziale del 
  demone 

* /etc/somad/spot.cfg - schema degli spot iniziale del 
  demone 

Se avete fatto una installazione corretta, dentro la 
directory /etc/somad dovreste gi trovare dei file di esempio.

2.1 soma.cfg

Il file soma.cfg  quello che contiene tutti i 
parametri di avvio del demone. Sono quei flag che il 
software va a leggere all'avvio e che non si possono 
pi modificare a meno di chiudere e riaprirlo. Ecco 
cosa pu contenere il file soma.cfg:

* User = utente con cui il demone deve girare 

* Background = se il demone deve girare in background o 
  no 

* UnixSocket = true o false. Se true somad sara' 
  amministrabile attraverso uno unixsocket, altrimenti 
  via tcp e quindi sulla rete. 

* UnixPath = se avete impostato UnixSocket = true, 
  allora dovete specificare il socket unix da 
  utilizzare. Di default /tmp/somad.sock 

* ServerName = se deve bindarsi su una specifica 
  interfaccia di rete. Questo flag ha valore solotato 
  se UnixSocket e' a false. 

* Port = ascoltare su una porta diversa da quella 
  standard (12521). 

* Listen = numero di client che possono amminsitrarlo 
  in contemporanea 

* Ssl = true o false. Se mettete ssl a true dovete 
  inserire anche i file di certificato e di privatekey. 

* Certificate = il certificato SSL. 

* PrivateKey = la chiave del certificato. Questi due 
  file si possono ottenere con i comandi: 'openssl 
  genrsa -out private.pem 1024' 'openssl req -new -x509 
  -key private.pem -out certificate.pem' 

* Password = password di accesso alla configurazione 

* Debug = livello di debug. Esistono diversi livelli di 
  debug: 0 (disattivato), 1 (Solo errori), 2 (Errori e 
  warning), 3 (info, errori e warning), 4 (tutto - solo 
  per sviluppatori) 

* LogFile = in quale file deve scrivere il log 

* PidFile = in quale file deve scrivere il pid 

* PathSong e PathSpot = files e streams da mandare 
  sempre (spiegato meglio in seguito) 

* ProgramSong = il programma da eseguire per ogni file 
  input audio selezionato dal palinsesto 

* OptionsSong = i parametri da dare al programma per i 
  file audio 

* ProgramStream = quale programma gestisce gli 
  streaming 

* OptionsStream = i parametri di quest'ultimo programma 

* PathModules = la directory dei moduli aggiuntivi 

* Palinsesto = il file di palinsesto 

* Spot = il file di spot 

* DistribuitedPath = le directory da condividere 
  attraverso il sdfs (soma distribuited file system) 

* XmlSyntax = true o false. True se i file di 
  palinsesto e spotsono scritti con una sintassi XML. 

* SymLinks = true o false. Somad deve seguire i link 
  simbolici che trova nella ricerca dei brani musiciali?

* HostAllow = elenco degli Ip che possono collegarsi a somad

* HostDeny = elenco degli IP che non possono collegarsi 
  a somad.

E' possibile effettuare commenti attraverso il 
carattere '#', ma anche con i metodi standard del C:

// commento tutto a fine riga

/* commento tutto fino al carattere */

2.1.1 User

Somad, come ogni demone serio :), gira con un utente 
impostato e non per forza come chi l'ha lanciato se ha 
la possibilit di cambiarselo (e solo il root ha questo 
privilegio). Io consiglio di creare un utente apposito 
per far girare somad, solamente per avere maggior 
sicurezza. La sintassi :

User = bakunin 

Se non si imposta l'utente somad gira con i privilegi 
di chi l'ha lanciato.

2.1.2 Background

Se si abilita il background, somad si demonizza in 
background. Attivare questa opzione o no  utile per il 
debug. Se non si mette in background infatti, somad 
scrive tutto il debug a schermo e lo si pu analizzare 
al volo. Viceversa utilizza il file di log impostato 
attraverso LogFile. Sintassi:

Background = false

Background = true 

Se non lo si imposta di default Background  messo a false.

2.1.3 UnixSocket

Se si imposta si a questo flag, somad aprir uno 
unixsocket e l'amministrazione dipender da questo 
sistema di comunicazione. Se si imposta false, somad 
ascoltar usando il TCP/IP e quindi sar possibile 
amministrare lo scheduler da remoto.

Se mettete UnixSocket true, somad user il valore di 
UnixPath, viceversa saranno analizzati i flag 
ServerName, Port, HostDeny e Hostallow.

Di default UnixSocket  false.

2.1.4 UnixPath

Questo flag serve per impostare quale unixsocket somad 
deve utilizzare per essere amministrato in unix mode. 
Di default  /tmp/somad.sock e viene attivato solo se 
UnixSocket  a true.

2.1.5 ServerName

Con servername si pu impostare l'interfaccia di rete 
sul quale somad si binda. Se lo si binda su una 
determinata interfaccia, l'amministrazione pu passare 
soltanto da questa. Se non lo si imposta, somad 
permette l'amministrazione da qualsiasi interfaccia:

ServerName = 127.0.0.1 

Di default ServerName  0.0.0.0 ovvero qualsiasi interfaccia.

2.1.6 Port

L'amministrazione da parte di somaclient avviene 
attraverso tcp/ip. Oltre ad un IP serve quindi una 
porta su cui collegarsi. Somad usa come default 12521, 
ma si pu modificare con questa opzione e questa sitassi:

Port = 12345 

2.1.7 Listen

Quante connessioni di amministrazione possono avvenire 
in contemporanea? Il default  5:

Listen = 1

2.1.8 Password

L'accesso al server somad avviene tramite 
autenticazione. La password la si imposta qui. Se non 
lo si fa... lo si pu amministrare senza password (da 
leggersi come male).

Password = "ciao" 

2.1.9 Debug

Esistono tre livelli di debug:

* 0 - disattivato 

* 1 - soltanto gli errori 

* 2 - errori e warning 

* 3 - informazioni, errori e warning

* 4 - tutto. Soltanto per debug o per sviluppatori

Consiglio per i primi test di provare con un debug alto (3).

Debug = 3 

2.1.10 LogFile

Qual  il file su cui loggare? Lo si imposta con questa voce:

LogFile = "/var/log/soma.log" 

2.1.11 PidFile

In quale file somad segna il suo PID? Quando somad 
parte, controlla se questo file esiste e, grazie al 
PID, se altri somad stanno girando.

2.1.12 PathSong

Abbiamo detto che nel file soma.cfg esiste l'elenco di 
tutto quello che non si pu pi cambiare se non con un 
riavvio dell'applicativo. I file audio o gli streams 
sono impostati quindi non in questo file ma nel file di 
palinsesto, perch  importante poterli modificare ogni 
volta che si vuole.

Il fatto che dentro il file soma.cfg stia quindi una 
voce per contenere streams e files ha un significato 
diverso: qui bisogna mettere tutto quello che si sa gi 
si mander a priori del palinsesto. Parlo dei jingle 
della radio, delle canzoni di particolare significato, 
di spot pubblicitari di carattere non commerciale, ...

Se si imposta un qualcosa in questo flag, ad ogni 
palinsesto si aggiunge il contenuto di questa variabile 
senza dovere specificare niente.

PathSong = {

  "/Directory/e/sottodirectory/",

  "/Singolifile.mp3",

  "http://streams.remoti/" 

}

2.1.13 PathSpot

Somad  capace di schedulare spot pubblicitari e file 
audio. Se con PathSong si impostano i file/stream "normali"
, con PathSpot si impostano gli spot. Anche questi 
possono essere remoti, directory, singoli files. Ogni 
quanto vengono mandati gli spot dipende dal palinsesto. 
Ricordo che PathSpot, come PathSong  un di pi 
rispetto al reale corso del palinsesto.

PathSong = {

  "/Directory/e/sottodirectory/",

  "/Singolifile.mp3",

  "http://streams.remoti/ "

}

2.1.14 ProgramSong

Quale programma esterno devo usare per eseguire i 
file/stream selezionati? Attraverso ProgramSong imposto 
questo elemento esterno. Non bisogna specificare 
nessuna opzione, poich le opzioni si impostano con il 
flag spiegato subito dopo questo.

Qui si pu fare un lungo excursus in favore di certi 
player piuttosto che altri. Fondamentalmente il player 
deve essere un programma testuale poich quelli grafici 
hanno la mania di rimanere aperti anche quando finisce 
il playing del brano. Io ho provato moltissimi player e 
mi sono trovato benissimo con quelli pi piccoli: 
mpg123, mpg321 in primix mi hanno dato molta affidabilit.

Mplayer purtroppo ci impiega troppo ad avviarsi e 
questo fa si che l'ascoltatore finale della radio 
sentir tra un brano e l'altro quel secondo di 
silenzio, a volte fastidioso.

Somaplayer  un player scritto da me. Non mi sembra il 
caso di mostrarvi qui cosa fa, ma vi rimando al sito 
http://www.somasuite.org per vedere la 
documentazione proposta. Io utilizzo somaplayer perch 
veloce e in pi, come vedremo in seguito, ha delle 
funzionalit che gli altri player normali non hanno. 
Rimando quindi al capito sui progetti radio.

ProgramSong = "/usr/bin/somaplayer" 

2.1.15 OptionsSong

Tutti i parametri da passare al programma da voi 
selezionato con ProgramSong:

OptionsSong = "-ao audio -b 1024k" 

Se non si specificano optioni al ProgramSong, vuol dire 
che questo non le avr.

2.1.16 ProgramStream

Esattamente come ProgramSong ma per i programmi che 
somad riconosce come streaming:

ProgramSong = "/usr/bin/somaplayer" 

Se non si mette ProgramStream i stream vengono gestiti 
automaticaente con il programma specificato da ProgramSong.

2.1.17 OptionsStream

Tutti i parametri da passare al programma da voi 
selezionato con ProgramStream:

OptionsSong = "-ao audio -b 2048k" 

Se non si specificano le optioni al programma per gli 
streams vuol dire che questo non le avr.

2.1.18 PathModules

Somad gestisce moduli caricati runtime. Questa path 
specifica la directory di default per i moduli. 
Parleremo dei moduli in una sezione apposita.

PathModules="/opt/somad/modules" 

2.1.19 Palinsesto

Il file di palinsesto di default.

Palinsesto="/etc/somad/palinsesto.cfg" 

La prossima parte parler di come si scrive un file di 
palinsesto.

2.1.20 Spot

Il file di spot di default.

Spot="/etc/somad/spot.cfg"

Analizzeremo pi avanti la sintassi di questo file.

2.1.21 XmlSyntax

Questo flag serve per comunicare a somad la sintassi 
con cui leggere il file di palinsesto e quello di spot. 
Di default somad legge in formato XML, ma si pu 
impostare false per supportare la vecchia sintassi.

XmlSyntax = true

2.1.22 SymLinks

Con SymLinks a true si comunica a somad di seguire i 
links simbolici che trova durante la ricerca dei file 
da schedulare (PathSong e PathSpot ma anche in ogni 
altro flag dei file di palinsesto e spot).

Di default  false:

SymLinks = true

2.1.23 DistribuitedPath

Somad ha un meccanismo di FileSystem remotato 
integrato. Questo serve per poter amministare somad da 
remoto e poter selezionare i file da mandare in onda 
direttamente dall'HD su cui sta girando lo scheduler.

Con la sintassi sotto mostrata, potrete inserire tutte 
le directory da condividere. Queste verrano 
virtualizzate con /storage, /Singolifile.mp3 e /ftp 
impedendo all'utente di poter navigare per il resto del 
filesystem.

Questo filesystem distribuito non permette l'aggiunta 
di file, la modifica o la rimozione, ma solo la 
visualizzazione. Va aggiunto che questo sistema  
indipendete dal sistema operativo su cui somad sta girando.

DistribuitedPath = {

  "/mnt/storage/",

  "/Singolifile.mp3",

  "/home/ftp"

}

2.1.24 HostAllow e HostDeny

Questi due gruppi di IP si devono scrivere in questo modo:

HostAllow = {

  "192.168.10.1",

  "192.168.!2.3",

  "192.168.>10.<=123",

  "x.!10.<=123.>2"

}

e uguale per HostDeny

Somad usa questi elenchi per decidere chi pu accedere 
all'interfaccia di amministrazione via TCP/IP (e quindi 
solo se UnixSocket = false). Somad controlla ogni IP 
che si collegano alla sua porta di amministrazione e 
controlla prima se esiste una qualche regola che li 
identifica dentro a HostAllow. Se la trova, accetta la 
connessione. Se non la trova, controlla in HostDeny. Se 
trova una regola che descrive questi ip dentro a 
HostDeny, scarta la connessione. Se qualche IP ancora 
rimane viene accettato.

Esistono dei flag particolari per ogni sezione dell'IP. 
Queste sono:

* numbero: 192.168.10.1

* diverso da: 192.168.10.!2

* maggiore, minore, maggiore uguale, minore uguale: 
  192.168.10.>=4

* tutti: 192.168.10.x

La sintassi x.!0.<=123.>2  quindi qualcosa di valido.

2.2 palinsesto.cfg

Il file di palinsesto  IL file di somad. Mentre 
soma.cfg  un file di configurazione ordinario, 
palinsesto.cfg contiene tutta la struttura delle 
trasmissioni della radio con orari, modalit, 
configurazioni. Questa sezione della documentazione per 
la Suite Soma, va ad analizzare la sintassi di questo 
file. Sar poi nei capitoli successivi che si passer 
al reale utilizzo degli applicativi e quindi si 
spieger come  possibile cambiare da remoto il 
palinsesto, piuttosto che visualizzare informazioni 
sullo stato delle trasmissioni.

Somad gestisce molto bene le sovrapposizioni di 
palinsesti. Quando due palinsesti sono sovrapposti, 
somad da precedenza a quello con priorit high. Se il 
player ritorna errore, automaticamente somad switchia 
agli altri. Al termine di ogni player, somad riprova al 
modulo con priorit high. Questo permette di gestire 
stream o altre forme di palinsesto che possono avere 
problemi in maniera sicura aggiungendo nelle stesse 
fasce orarie un palinsesto tampone.

Esistono due sintassi dei file di palinsesto: vecchio 
stile, XML. Ora spiegheremo quella vecchio stile per 
poi passare a quella compatibile con SomaX in XML.

2.3 Palinsesto.cfg - old style

Palinsesto.cfg contiene una serie di blocchi Palinsesto 
di questo tipo:

Palinsesto {

  Description = "Trasmissione tipo"

  Start = "xxxx-xx-xx xxx 10:00"

  Stop = "xxxx-xx-xx xxx 12:30"

  Type = files

  Random = true

  SoftStop = true

  PathSong = {

    "/home/ftp/mp3/jazz",

    "/home/ftp/ogg/jazz/pastorius_jaco_continuum.ogg" 

  }

  PathSpot= {

    "/home/spot/",

    "http://www.stream.org/esempio.mp3" 

  }

  RatioSong=7

  RadioSpot=2 

}

Ognuno di questo riveste una trasmissione. Ogni blocco 
palinsesto pu contenere o no certe voci. Ecco quelle 
supportate da somad:

* Description - la descrizione della trasmissione 

* Priority - priorit a questa trasmissione rispetto ad 
  altre nella stessa fascia oraria

* Start - ora di inizio 

* Stop - ora di fine 

* Timecontinued - modalit di lettura

* SpotController - utilizzare lo spot controller

* Type - indica la tipologia di trasmissione 

* Random - se i brani devono essere presi random oppure 
  no 

* SoftStop - se somad aspetta il termine della canzone 
  prima di effettuare modifiche al palinsesto, 
  spegnimento o altro 

* RatioSong - quanti pezzi bisogna mettere prima di 
  mettere degli spot 

* RatioSpot - quanti pezzi bisogna mettere di spot 
  prima di tornare alle song 

* PathSong - elenco di brani musicali in locale, 
  remoto, o come directory di cui somad prende tutte le 
  sottodirectory. 

* PathSpot - elenco di brani di interpretarsi come 
  spot. Esattamente come PathSong possono essere 
  directory, stream e altro. 

* Stream - lo streaming da gestire 

* Module - che tipo di modulo associare alla 
  trasmissione attuale 

* ModuleData - argomenti aggiuntivi passati al modulo 
  specificato con Module

* Jingle - il jingle di avvio della trasmissione 

* Include - un altro file di configurazione 

E' possibile anche in questo file effettuare i commenti 
attraverso i caratteri '#' o con sintassi simili al C:

// commento fino alla fine della riga

/* oppure fino al carattere */

2.3.1 Palinsesto

Ogni sezione di questo file inizia con Palinsesto. 
Possono essere inifiniti e anche scritti in maniera 
disordinata: sar poi somad che li metter in ordine di 
orario per semplificarsi la ricerca e l'accesso ai dati.

La sintassi  quella dell'esempio sopra:

Palinsesto {

  ...altri parametri... 

}

2.3.2 Description

La descrizione della trasmissione non  fondamentale, 
ma  altamente consigliata.

La sintassi :

Description = "nome della trasmissione" 

2.3.3 Priority

Somad gestisce trasmissioni sovrapposte. Per 
regolamentare l'esecuzione delle trasmissioni 
sovrapposte esiste il flag Priority che si pu settare 
a true o a false. Nel caso la priorit  alta (true), 
somad schedula questo palinsesto prima di considerare 
gli altri. Se il player usato per mandare in onda un 
brano ritorna errore, automaticamente somad controller 
se esistono trasmissioni con priorit pi bassa ed 
eseguir quelle.

Ad ogni interruzione di player, somad prover a 
schedulare nuovamente la trasmissione con priorit alta.

2.3.4 Start e Stop

Queste due voci indicano l'orario di inzio e di fine 
della trasmissione. Hanno una sintassi di questo tipo:

YYYY-MM-DD DAY HH:MM. Questo vuol dire che una sintassi 
valida :

Start=2005-12-05 mon 11:00

Stop=2005-12-08 thu 20.00

Ogni valore  per opzionale e sostituibile con delle x:

Start=xxxx-12-xx thu 20.00

Stop=xxxx-12-xx x 04.00

Questo significa: Ogni marted di dicembre dalle 20.00 
alle 04.00 di qualsiasi giorno sempre di dicembre fai 
qualcosa. L'ora  un valore compatto quindi non si pu 
scrivere: 20:xx.

Il giorno della settimana si pu scrivere anche in 
numbero ove: 1  luned e 7 la domenica. 0  anch'esso domenica.

Si pu anche omettere blocchi interi basta che sia 
rispettato un ordine di lettura. Questo vuol dire che:

Start = "xxxx-xx-xx xxx 10:00"

Start = "xxx 10:00"

Start = "10:00"

Sono tutti formati validi. In pi ogni blocco di X pu 
essere lungo quanto si vuole:

Start = "x-x-x x 10:00"

Stop = "xx-xxxxxxxxxxx-x 10:00"

Queste voci sono fondamentali.

2.3.5 TimeContinued

Questo flag serve per specificare la modalit di 
lettura del range orario impostato con Start e Stop. Un 
esempio chiarificatore  questo:

Start="xxxx-xx-xx 1 10:00"

Stop="xxxx-xx-xx 4 11.00"

Se TimeContinued  falso, somad ogni giorno dal Luned 
al Gioved manda in onda una trasmissione dalle ore 10 
alle ore 11. Se TimeContinued  vero, somad inizia una 
trasmissione Luned alle 10 e la fa continuare fino a 
Gioved alle 11.00.

2.3.6 SpotController

Questo flag serve per comunicare a Somad l'intenzione 
di voler appocciarsi al motore di spot per gestire gli 
stacchi pubblicati. Quando questo flag  attivato 
(true), somad gestisce il contenuto del file soma.cfg 
come spiegato nella sezione dedicata al file spot.cfg.

2.3.7 Type

Il type indica che tipologia di trasmissione stiamo 
descrivendo. Esistono 4 tipologie:

* Files - somad gestisce una playlist di 
  file/stream/directory. 

* Stream - somad gestisce uno streaming 

* Silence - disattiva questo palinsesto. E' esattamente 
  come non scrivere niente e lasciare un vuoto 
  temporale. 

* Module - somad utilizza un modulo esterno. Spiegher 
  meglio cosa si intende per moduli e come si 
  utilizzano. 

Di default ogni palinsesto  di tipologia Files.

Files vuol dire che somad considerer le voci PathSong 
e PathSpot, Stream indicher di utilizzare la voce 
stream e Module utilizzer la voce Module.

Type = Files 

2.3.8 Random

Se si utilizza come type Files, somad utilizzer questo 
flags per rendere random oppure no la selezione degli 
elementi della playlist. Di default random  
disattivato ma si pu attivare facendo cosi':

Random = true 

Questo vuol dire che, tra tutta la playlist legata alla 
singola trasmissione, somad sceglier un brano e lo 
player. Aggiungo che somad  in grado di non 
effettuare ripetizioni ma di gestire il random in 
maniera intelligente. Selezioner un brano gi mandato 
soltanto quando avr mando in onda ogni altro elemento 
della playlist.

2.3.9 SoftStop

Questa voce  di default messa a false, ma si attiva cos:

SoftStop = true 

L'attivazione di questa voce rende sensibile somad alla 
durata del pezzo. Mi spiego meglio: essendo somad un 
applicativo,  preciso al secondo sulla gestione delle 
trasmissioni e, se un brano X capita a met tra un 
palinsesto e l'altro, quando  l'ora, somad lo stopper 
per dare spazio alla nuova trasmissione. Se si attiva 
la voce SoftStop, somad prester attenzione a questo 
fatto e aspetter la fine dell'operazione di playing 
per effettuare qualsiasi operazione "drastica" come 
spegnimento, cambio di palinsesto, pausa e altro.

2.3.10 RatioSong e RadioSpot

Di default somad non manda Spot. Ma se si vuole 
mandarli, basta attivare queste due voci. Ogni quanti 
pezzi si manda un brano pubblitario?

RadioSong=5 

E di quanti brani  fatto un stacco pubblicatario?

RadioSpot=2 

2.3.11 PathSong e PathSpot

Esattamente come spiegato per il file soma.cfg, con 
queste voci si possono specificare gli elementi di una 
trasmissione di tipologia Files. Si tratta di fare un 
elenco di file locali o remoti e directory:

PathSong = {

  "/home/ftp/directory",

  "/home/ftp/singolo_file.wav",

  "http://qualcosa.remoto.org/file.mp3" 

}

Le directory verranno include in ogni sottodirectory.

2.3.12 Stream

Se la tipologia della trasmissione  uno stream, somad 
andr a leggere questa voce e player lo streaming qui impostato:

Stream = "http://radio.streaming.org/radio.mp3" 

2.3.13 Module

Se la tipologia di trasmissione  un modulo, qui 
bisogna impostare qual  il modulo da utilizzarsi. 
Somad lo ricercher nella directory dei moduli 
specificata nel file soma.cfg. In un capitolo apposito 
spiegher cosa si intende per moduli, come utilizzarli 
e come scriverli.

Module = "soma_mysql.so" 

2.3.14 ModuleData

Ogni modulo pu necessitare di argomenti di 
configurazione. Questo spazio  dedicato a questo. 
Consultare la documentazione di ogni modulo per sapere 
come configurarlo usando questo spazio.

2.3.15 Jingle

Ogni trasmissione avr eventualmente un jingle proprio. 
Con questa voce si impone a somad di eseguire quel 
brano (anche remoto) appena si entrer in queste trasmissione:

Jingle=file_trasmissione.ogg 

2.3.16 Include

Palinsesto.cfg pu diventare un file molto lungo. 
Attraverso questa voce si dice il palinsesto pu 
continuare anche in un'altro file e quindi si pu 
generare un singolo file per ogni tramissione e 
gestirlo in maniera pi articolata.

Include = "trasmissione1.cfg" 

2.4 Palinsesto.cfg - XML Style

Un file XML di palinsesto  notevolmente pi complesso 
da scrivere. I flag sono gli stessi ma si consiglia 
l'utilizzo di programmi appositi per la crezione di 
questi documenti. SomaX-Editor  un programma studiato 
apposta per convertire, creare e modificare file 
palinsesto.cfg e spot.cfg sia in sintassi vecchia che 
in XML permettendo di esportare questi file agimente da 
un formato all'altro.

2.5 Spot.cfg

Il file spot.cfg ha anche lui una doppia sintassi: old 
e XML. La old ha una formattazione simile alla old dei 
palinsesti, ma le voci sono queste:

* Description - una descrizione dello spot in analisi

* Start - formula temporale di inzio

* Stop - formula temporale di fine

* TimeContinued - come da palinsesto.cfg

* Random - attiva la selezione random dei brani

* Repeat - numero di ripetizioni da eseguirsi in quella 
  fascia oraria

* Path - elenco dei brani a cui applicare le regole 
  descritte sopra

I blocchi di spot si chiamano Spot e questo ne  un esempio:

Spot {

  Description = "Examples!"

  Start = "10:00"

  Stop = "21:00"

  Random = true

  TimeContinued = true

  Path = {

    "/directory",

    "/file.mp3",

    "http://stream"

  }

} 

Il funzionamento del file di spot e quindi dello 
SpotController consiste nel poter regolare quando e 
come devono andare in onda dei brani audio di spot nel 
tempo senza legarli a specifici palinsesti. Questo vuol 
dire che i palinsesti con la voce SpotController 
attivata saranno interroti ogni RatioSong pezzi con 
RatioSpot brani selezionati automomamente dallo SpotController.

Il file spot.cfg serve per specificare quali brani 
devono essere eseguiti e in quali fasce orarie.

2.5.1 Description, Start, Stop, TimeContinued, Random

La sintassi e il significato di questi flag  identico 
a quello del file palinsesto.cfg

2.5.2 Repeat

Quando si imposta una condizione di repeat vuol dire 
che in una fascia oraria specificata con i tag Start e 
Stop, gli spot elencati nella specifica sezione seranno 
mandati in onda soltanto quel numbero di volte o 
comunque il pi vicino possibile a quel dato.

2.5.3 Path

Elenco dei brani a cui applicare le regole esposte 
nella sezione Spot.

3 Avvio

Nel capitolo precedente abbiamo capito come si scrivono 
i file di configurazione. Ora andiamo a lanciare e ad 
analizzare i programmi della suite uno ad uno.

3.1 Somacheck

somacheck  un applicativo nato per controllare i file 
di configurazione. E' molto semplice da utilizzare ma  
essenziale perche' i file che fanno funzionare somad 
non sono semplici ed  facile dimentarsi un carattere e 
rendere illeggibile tutto. Aggiungo adesso che, somad 
ha bisogno di due file sintatticamente corretti per 
partire. Se questo non avviene, si lamenta notevolmente 
:) Ma nel momento che si decide di caricare un 
palinsesto runtime, somad  capace d i controllare bene 
prima di caricarsi in memoria qualcosa di 
sintatticamente errato e quindi non si blocca se si 
cerca di aggiornare il palinsesto con qualcosa di non 
corretto. Ma anche in questo caso, urla.

Somacheck ha un avvio molto semplice:

* -c o --config per specificare un file di 
  configurazione. 

* -p o --palinsesto per un file di palinsesto. 

* -c o --spot per un file di spot.

Somacheck controller sintatticamente se tutto  esatto 
e vi dar un responso. Se c'e' qualcosa di errato 
somacheck si dice linea e tipologia di errore riscontrato.

3.2 Somad

A seconda delle scelte che avete fatto nei file di 
configurazione, somad partir in background o no, 
scrivendo dei log a schermo o no, suonando o no.

L'avvio  semplice, non ha infatti bisogno di argomenti 
particolari se i file di configurazione si trovano nel 
posto giusto. Esistono tuttavia degli argomenti 
impostabili a riga di comando:

* -f o --file imposta un file di configurazione diverso 
  da quello standard. Bisogna specificarlo. 

* -b o --background manda in background somad anche se 
  nei file di configurazione c' scritto diversamente 

* -d o --debug attiva un certo livello di debug 

* -l o --logfile per cambiare il file di log

* -p o --pidfile per cambiare il file di pid

* -u o --user fa si che somad si metta i privilegi 
  dell'utente passato come argomento 

Dopo di ch, si lancia:

somad 

e si inizia a consultare il file di log.

Una volta lanciato, l'unico modo per chiudere somad 
(ovviamente senza considerare killall -9 o cose di 
questo tipo :),  utilizzare somaclient o un qualsiasi 
programma che fa uso di libsoma.

3.3 Somaclient

Lato utente, somaclient  il programma pi complesso. 
Mentre somad  un demone e una volta configurato non ha 
bisogno di particolari ritocchi, somaclient  quello 
che vi permetter di cambiare il funzionamento di somad 
ogni volta ne abbiate bisogno.

E' un programma testuale con molte opzioni e due 
modalit di utilizzo. Si pu utilizzare la linea di 
comando per specificare che cosa si vuole sapere o dire 
a somad, oppure entrare in una modalit shell con la 
quale si pu instaurare una connessione apperentemente 
constante a somad.

Gli argomenti di somaclient sono questi:

* -S o --server imposta qual  il server a cui fare la 
  connessione su TcpSocket

* -P o --port la porta del server se non  quella di 
  default (12521) 

* -U o --unix imposta quele unixpath utilizzare per 
  effettuare la connessione su UnixSocket

* -ssl attiva una connessione criptata

* -pw -o --password effettua il controllo della 
  password ed esce 

* -rd o --readdirectory fa si che somad si rimappi 
  l'albero delle directory impostato nel file di 
  palinsesto 

* -rp o --readpalinsesto fa si che somad si rilegga il 
  file di palinsesto 

* -rs o --readspot fa si che somad si rilegga il file 
  di spot

* -fp o --filepalinsesto sostituisce il palinsesto di 
  somad con nuovo specificato 

* -op o --oldpalinsesto dice a somad di ritornare al 
  palinsesto originario 

* -gp -o --getpalinsesto scrive a schermo il palinsesto 
  che somad sta analizzando 

* -gop o --getoldpalinsesto scrive su standard output 
  il palinsesto che somad ha impostato come default

* -dp o --setdefaultpalinsesto setta come default il 
  palinsesto attualmente usato da somad sovrascrivendo 
  quello impostato dal file di configurazione soma.cfg

* -fs o --filespot sostituisce il file di spot di somad 
  con nuovo specificato 

* -os o --oldspot dice a somad di ritornare al file di 
  spot originario 

* -gs -o --getspot scrive a schermo il file di spot che 
  somad sta analizzando 

* -gos o --getoldspot scrive su standard output il file 
  di spot che somad ha impostato come default

* -ds o --setdefaultspot setta come default il file di 
  spot attualmente usato da somad sovrascrivendo quello 
  impostato dal file di configurazione soma.cfg

* -st o --status informa su che cosa sta facendo adesso 
  somad 

* -ns o --nextsong imposta la prossima canzone da 
  eseguire senza tener conto del palinsesto 

* -nsl o --nextsonglist mostra le prossime canzoni da eseguire

* -nsr o --nextsongremove elimina una canzone dato un 
  numero ID

* -nsss o --nextsongsetspot imposta l'interazione degli 
  spot in base a quanto imposto nel palinsesto.cfg 
  nella trasmissione in corso

* -nsgs o --nextsonggetspot scrive su standard output 
  se c'e' l'interazione con gli spot o no

* -r o --running informa sullo stato di somad (attivo o 
  no) 

* -q o --quit fa chiudere somad 

* -sk o --skip salta la canzone in esecuzione ora

* -1 o --stop stopppa somad. Se si passa un numero come 
  argomento dopo quel numero di secondi somad riparte 
  autonomamente 

* -0 o --start fa ripartire somad 

* -c o --code fornisce le risposte inviate da somad non 
  informato umano ma sotto forma di codici 

* -pPASSWORD fa si che somacliente prenda la password a 
  riga di comando e non chiedendola. 

3.3.1 --server e --port

SomaClient si collegata di default in TCP a localhost 
porta 12521. Se si vuole cambiare questa configurazione 
bisogna usare o -S e -P o -U per connessioni UNIX.

Nel caso somad ascolti su una porta diversa da quella 
standard,  necessario specifica a somaclient qual . 
L'opzione per farlo  -P o --port:

somaclient -S localhost -P 12345 <argomenti>

3.3.2 --unix

Imposta una connessione UNIX. Non si pu usare -S e -U assieme:

somaclient -U /tmp/somad.sock

3.3.3 -ssl

Somad gestisce connessioni criptate. Se si vuole 
connettersi ad un server che supporta la criptazione, 
bisogna mettere il flag -ssl:

somaclient -ssl -S localhost

3.3.4 --password

-pw o --password controlla se la password inserita  
corretta oppure no.

somaclient -pw 

Somaclient chieder la password e risponder in maniera 
affermativa o no.

3.3.5 --readdirectory e --readpalinsesto

Con le opzioni -rd o --readdirectory somaclient 
comunica a somad di rileggersi le directory che sono 
state specificate nel palinsesto. Con -rp o 
--readpalinsesto, somad si rilegger il palinsesto. 
Queste sono utili nel caso si sia modificato il 
palinsesto o si siano aggiunti o rimossi file dentro le 
directory che somad utilizza come playlist.:

somaclient -rd 

3.3.6 --filepalinsesto

Se si vuole cambiare palinsesto a somad, si utilizza 
questa optione. Il file che deve essere presente sul 
computer su cui si lancia somaclient verr inviato a 
somad, vagliato e se corretto, sostituito al palinsesto 
utilizzato.

somaclient -S localhost -fp nuovo_palinsesto.cfg 

3.3.7 --oldpalinsesto

Imposta come palinsesto di somad quello specificato nel 
file soma.cfg. Serve per ripristinare la situazione iniziale:

somaclient -op 

3.3.8 --getpalinsesto

Scrive a schermo, in una versione schematizzata, il 
palinsesto utilizzato da somad.

somaclient -gp 

3.3.9 --getoldpalinsesto

Scrive su standard output il palinsesto impostato 
dentro al file soma.cfg

somaclient -gop

3.3.10 --setdefaultpalinsesto

Setta il file di palinsesto usato attualmente da somad 
come il file di defualt. Questo vuol dire che somad 
prova a sovrascrivere il file /etc/somad/palinsesto.cfg 
se cos  impostato in soma.cfg.

3.3.11 --filespot, --oldspot, --getspot, ---getoldspot, 
  --setdefaultspot

Seguono la stessa sintassi delle voci del palinsesto.

3.3.12 --status

Mostra che cosa sta facendo in questo preciso istante 
somad. Pu quindi mostrare il brano che somad sta 
gestendo, oppure fino a quando somad sar in pausa, o 
semplicemente se  andato a buon fine il comando che si 
 dato.

somaclient -st 

3.3.13 --nextsong

Con -ns o --nextsong somaclient impone a somad di 
eseguire un pezzo specifico senza tener conto del palinsesto:

somaclient -ns Battisti.ogg

Se il file inizia con ":" somad analizza questo file alla 
luce delle path distribuited con filesystem remoto interno.

3.3.14 --nextsonglist

Mostra su standardoutput l'elenco delle canzoni 
attualmente nell'elenco interno di somad.

3.3.15 --nextsongremove

Rimuove una canzone in base al numero dell'elenco.

3.3.16 --nextsongsetspot

Imposta l'interazione con gli spot in base a quello che 
c'e' scritto nel file palinsesto.cfg della trasmissione 
in corso. Se si mette 0 lo si disattiva, con 1 lo si attiva.

somaclient -nsss 1

3.3.17 --nextsonggetspot

Ritorna 0 o 1 a seconda del valore interno a somad di 
interazione con gli spot.

3.3.18 --running

Ritorna se somad  stoppato o se sta girando.

somaclient -r 

3.3.19 --quit

Chiude somad definitivamente. Bisogna poi rilanciarlo a 
mano. E' una operazione che non ha alcun senso se si 
vuole stoppare momentaneamente somad. Esiste una 
optione apposita.

somaclient -q 

3.3.20 --skip

Comunica a somad di saltare la canzone attualmente suonata:

somaclient -sk

3.3.21 --stop e --start

--stop stoppa somad fino a che non lo si restarta 
(--start). Si pu anche passare un argomento a --stop 
per indicare fra quanti secondi somad deve ripartire.

La sintassi :

somaclient -S localhost --stop 

Se si vuole specificare un tempo dopo il quale soma 
deve ripartire, si pu usare una sintassi molto varia: 
si pu impostare minuti, secondi, ora cosi': 1H20m4s 
attraverso le lettere h o H (ore), m o M (minuti), e s 
o S (secondi). Se non si mette niente viene 
interpretato il numero come secondi.

somaclient -S localhost --stop 45M23 

3.3.22 --code

Se bisogna utilizzare somaclient da un'altro programma 
e' comodo un output numerico. Con -c somaclient ritorna 
qualsiasi output dei comandi spiegati sopra in formato 
numerico. Ecco i codici:

* 0 - Errore generico. 

* 1 - Errore nei parametri 

* 2 - Specificare il server 

* 3 - Errore creazione socket. 

* 4 - Errore nel risolvere l'host. 

* 5 - Errore nella connessione. 

* 6 - Errore di protocollo. 

* 7 - Password errata! 

* 8 - Errore apertura file di palinsesto. 

* 9 - Done. 

* 10 - Errore interno. 

* 11 - Errore di locking della struttura dati. 

* 12 - Si'. Somad sta girando. 

* 13 - No. Somad e' stoppato. 

* 14 - S, somad sta usando gli spot per le nextsong

* 15 - No, somad non sta usando gli spot per le nextsong

3.3.23 -pPASSWORD

Quando somaclient si collega ad un server, chiede la 
password. Se si vuole saltare questo passaggio, e' 
possibile scrivere la password a riga di comando 
attraverso -p<password>.

Esempio:

somaclient -S localhost -pPROVA_PASS 

3.3.24 Shell mode

La seconda modalit di avvio di somaclient  quella di 
shell. Mentre se si specificano le opzioni, somaclient 
si collega a somad, effettua l'operazione richiesta e 
si chiude, se non si mettono argomenti oltre a 
--server, --port ed eventualmente --p<PASSWORD>, 
somaclient compare come shell a tutti gli effetti.

I comandi che conosce sono:

exit - uscita dalla shell

quit - uscita dalla shell

help - menu di aiuto

? - come help

cd - cambia directory

pwd - scrive in che directory ci si trova

ls - comando ls :)

list - come ls

nextsong (e come argomento set, remove, list, set_spot, 
get_spot) - gestione delle nextsong

readdirectory - come -rd

readpalinsesto - come -rp

readpost - come -rs

filepalinsesto - come -fp

oldpalinsesto - come -op

getpalinsesto - come -gp

getoldpalinsesto - come -gop

filespot - come -fs

oldspot - come -os

getspot - come -gs

getoldspot - come -gop

status - come -st

time- scrive a schermo l'ora di somad

quit - esce da somaclient

skip - come -sk

stop - come --stop

start - come --start

running - come -r

shutdown - come -q

3.4 Altri software

Esistono altri software che si possono associare alla 
suite Soma. Oltre ai moduli di cui si parler pi 
avanti, esistono due interfaccie grafice a somaclient. 
Una via web chiamata SomAdmin e una grafica in gtk2 
chiamata SomaX.

Non spiegher nel dettaglio nessuna delle due, ma via 
accenno che grazie a SomAdmin  possibile amministrare 
la propria radio via web attraverso un calendario 
online accessibile con 3 modalit di accesso:

* autorizzazione per l'inserimento e la modifica 

* accesso anonimo per l'inserimento e autorizzato per 
  la modifica (radio openpublishing) 

* accesso anonimo in ogni aspetto. 

SomaX  un applicativo grafico per effettuare ogni 
genere di operazione su file di palinsesto, spot, 
configurazione di somad. Permette l'aministrazione di 
somad, l'esecuzione interna e molte altre cose che 
neceessitano di molto pi spazio di questo semplice paragrafo.

Tutti questi applicativi sono scaricabili dal solito 
sito: http://www.somasuite.org.

4 Struttura di una radio

Adesso che  stato chiarito l'utilizzo dei software 
della suite Soma, passo a spiegare come poi in una 
situazione reale, questo marchingegno oscuro pu essere 
utilizzato in una radio.

Una radio tendenzialmente divide la giornata in 
trasmissioni ove, oltre al parlato del dj c' musica da 
parte o spot. Non serve quindi solo soma per fare una 
radio a meno che non si scelga di fare una radio che 
produce solo musica. La parte di gestione delle 
trasmissioni la si fa con la siute soma, il dj parla, 
magari si sommano altre sorgenti sonore come dirette, 
interviste, pi dj e poi il tutto va inviato 
all'antenna o al server di streaming. Ho fatto questo 
schema appositamente per spiegare come il tutto sia possibile:



Questo schema  orientato ad una radio via web, ma  
facilmente esportabile ad una radio in etere. Qui parlo 
anche di un altro elemento non presente nella suite 
soma chiamato somaplayer. Potete trovare lui e la 
documentazione legata sul sito http://www.somasuite.org.

Sono 3 esempi di possibili radio:

4.1 Primo esempio

Una radio che produce solo musica, ha bisogno di un 
buon repository di file audio (locale o remoto) e poi 
un sistema di diffusione. Per fare questo serve solo la 
suite Soma configurata in maniera abbastanza standard.

Si pensa al palinsesto, lo si configura a dovere, poi 
lo si lancia e non c' bisogno di manutenzione 
particolare se non quandi si vuole cambiare la scaletta 
o le playlist.

4.2 Secondo esempio

Il secondo esempio presente nel grafico mostra una 
radio che miscela due impulsi: uno preso da un 
repository dove somad schedula musica, il secondo 
derivante da uno o pi microfoni. Per fare questo serve 
un miscelatore di impulsi sonori. Il miscelatore pu 
essere la scheda sonora se  full-duplex abbianata poi 
ad un mixer o a un software che gestisce la sorgente in 
uscita in qualche modo (streammandola ad esempio). Ne 
esistono tantissimi, ma non mi sembra di portare acqua 
al mio mulino se suggerisco SdS (guardare somaplayer). 
Lo suggerisco perch a differenza di un demone del 
suono normale  capace di processare le sorgenti sonore 
e di sommarle in una e di questa gestirla in sfariate 
forme di output senza l'utilizzo di altri programmi aggiuntivi.

4.3 Terzo esempio

Il terzo esempio  il pi complesso. Ipotizzo una rete 
(anche internet) atta a produrre una sorgente sonora 
unificata. Qui  il trionfo di SdS. Somad riveste il 
ruolo di scheduler dei palinsesti, il software che da i 
tempi alla radio.



L'idea complessiva di questa rete impotetica  
riassunta in questo schema. Notate che l'output di 
generato da somad  uno dei tanti gestito a sinistra da 
SdS e da destra da darkice. La differenza tra darkice e 
SdS  che darkice non somma sorgenti sonore che 
arrivano dalla rete, al contrario di SdS nato 
appositamente per questo.

L'idea di questa immagine  quella di mostrare come 
l'output poi viene messo in condivisione comunque 
attraverso un server di streaming come icecast.

5 Moduli

Somad supporta moduli. Possono essere caricati runtime 
senza bisogno di ricompilazioni, stop, riavvi e cose di 
questo tipo. In questo capito spiegher in una prima 
parte come somad vede e comunica con i moduli e in una 
seconda sezione come scrivere moduli.

I moduli sono delle librerie scritte separatamente 
dalla suite soma e che ognuno pu produrre in base alle 
sue esigenze aggiungendo funzionalit aggiuntive. 

5.1 Programmazione di moduli

Per la programmazione di moduli rimando al file 
README.module contenuto dentro ai sorgenti di soma.

6 Conclusione

Non  stato semplice spiegare tutto... e penso pure di 
essermi dimenticato qualcosa. Sviluppare un software 
free vuol dire prima di tutto instaurare una buona 
relazione tra programmatori e utenti. Scrivetemi quindi 
per consigli, problemi o idee.

bakunin
