•  
  • Archivi per marzo 2007 (11)

Streamripper, scendiamo nel dettaglio

Commenti: 2 commenti
Pubblicato il: 26 marzo 2007

Engines
Trentatreesimo articolo dedicato alle web radio.

Abbiamo parlato a lungo di Streamripper, sia introducendolo, che parlandone per Ambiente Windows e per ambiente Linux. Abbiamo anche minimamente discusso, di come sia utile per ottenere mp3 rapidamente.

Vediamo di scendere un pò nei dettagli tecnici.

Cominciamo esaminando il manuale di Streamripper per linux, in alcune sue parti, tramite il semplice comando: man streamripper.

DESCRIPTION
Streamripper records shoutcast and icecast compatible streams. It uses
meta data within a shoutcast stream to determine the beginning and end
of each song, and stores the songs on your hard disk as individual mp3
files. In addition, streamripper includes a relay server for listening
to the station while you are recording

Streamripper registra Flussi in streaming di Shoutcast ed Icecast. Usa metadata trasmessi insieme al flusso per determinare inizio e fine di ciascuna canzone, e salva le canzoni sul tuo hard disk come mp3 separati. In aggiunta, Streamripper permette di creare un relay per l’ascolto della stazione che stai registrando.

SPLITPOINT DETECTION
Streamripper automatically splits tracks based on detection of a silent
near the meta interval where the track changes. However, this method is
imperfect, and sometimes the track splitting occurs is too early or too
late. These options will fine tune the track splitting capabilities
for streams that use cross-fading, which causes streamripper’s auto‐
matic silence detection routine to fail.

Various –xs flags can be used to add an offset for streams that have a
meta interval that comes too early or too late, to add extra padding to
the beginning and end of each song, and to decide where the length of
the search window and silence window.

Streamripper effettua il taglio tra un file ed un altro, quando incontra un attimo “silente”, ovvero un momento in cui non c’è effettivamente alcun suono. Se non lo trova fa quello che può, ovviamente DOPO l’invio dei metadati per il cambio di canzone.
Questo “periodo” in cui si cerca il punto di silenzio è chiamato “search window“. Questa finestra, specialmente se
ci si trova in casi di crossfading tra i brani, può essere allungata a piacimento.

DEFAULT SPLITTING
The default spitting algorithm is used when no silent point can be
found. Suppose you have a meta-int with track change information at
the time “mi” (see figure below).

If the xs_offset is positive, the track separation point “ts” is later
the “mi” point. If xs_offset is negative, “ts” is earlier than “mi”.
Once “ts” is determined, a user-defined “prepad” and “postpad” are used
to determine where the next track begins “ntb”, and where the previous
track ends “pte”. The interval between “ntb” and “pte” will be copied
to both songs.

Splitting mode

Cosa succede quindi se non si trova il “silent point”?

Si supponga di avere delle meta informazioni di cambio, al tempo MI (guardate la figura di sopra).
Se l’offset XS è positivo (XS_offset setta il tempo della search window, e può essere positivo per tagli in avanti, e negativo per tagli all’indietro) il separatore TS della canzone è DOPO il tempo MI. Se xs_offset è negativo, il viceversa.
Una volta determinato questo istante TS (che ricordo, è dato da: Metadata + Offset) un “Prepad” e “Postpad” sono impostati, e tutto quello che sta compreso traPrepad e Postpad sarà copiato in ENTRAMBE le canzoni.

SILENCE SEPARATION
Splitting based on silence separation is similar to default splitting,
only slightly more complex. Again, suppose you have a meta-int with
track change information at the time “mi” (see figure below).

A search window “search_win” is determined by the xs_offset, pre_sw,
and post_sw field. The beginning of the search window is at: mi +
xs_offset – pre_sw and the end of the search window is at: mi + xs_off‐
set + post_sw.

La separazione basata sui silenzi è simile alla separazione standard, solo un pò più complessa. Ancora, supponiamo che al tempo mi ci sia il cambio di canzone con metadati connessi.

Una finestra di ricerca denominata “search_win” viene determinata dai campi xs_offset, pre_sw e post_sw. Questa finestra comincia all’istante mi + xs_offset – pre_sw e termina all’istante mi + xs_offset + post_sw

If there is a silent interval of length “silence_win” within the
“search_win”, the center of “silence_win” is selected as the track sep‐
aration point “ts”.

Once “ts” is determined, a user-defined “prepad” and “postpad” are used
to determine where the next track begins “ntb”, and where the previous
track ends “pte”. The interval between “ntb” and “pte” will be copied
to both songs.

Se c’è un momento di silenzio di grandezza “silence_win” insieme alla finestra di ricerca il punto centrale del momento di silenzio è selezionato come separatore di traccia.

Una volta determinato il punto TS (track separator) i campi prepad e postpad, sono utilizzati per selezionare quali parti verranno copiate in entrambe le canzoni.

Silence

Come utilizzare StreamRipper su Linux

Commenti: 1 commento
Pubblicato il: 25 marzo 2007


Trentaduesimo articolo dedicato alle web radio.

Abbiamo parlato di come utilizzare Streamripper su Windows, senza scendere troppo nel particolare e soprattutto senza discutere il funzionamento a basso livello, che verrà studiato nel dettaglio in un altra guida.

Per utilizzare Streamripper potete scaricare il codice sorgente, oppure, se usate una debian-based, scaricare il pacchetto streamripper direttamente dai repository di apt.

Il programma ha un suo manuale che potete evocare da terminale, semplicemente scrivendo man streamripper.
Non ha interfaccia grafica, ma è strettamente legato a streamtuner, che la GUI invece ce l’ha. Da Streamtuner, è possibile cliccare sul tasto RECORD che invoca il seguente comando:

x-terminal-emulator -e streamripper %q -d /directory/dove/salverete/gli/stream -r -q

Che come potete notare altro non è che l’evocazione di Streamripper su un terminale.
Inutile commentare tutte le decine di switch che possiede Streamripper, se avete problemi con un singolo switch, commentate pure.

La forma normale per l’utilizzo di streamripper è ovviamente:

streamripper URL:porta

Come utilizzare StreamRipper su Windows

Commenti: 30 commenti
Pubblicato il: 23 marzo 2007

good guy
Trentunesimo articolo dedicato alle web radio.

Come abbiamo filosoficamente introdotto tramite nel post precedente, è possibile ottenere velocemente dei file mp3, sfruttando le centinaia di migliaia di web radio esistenti. Abbiamo pure sommariamente spiegato come è possibile creare dei canali MOLTO veloci di condivisione files tra una persona ed un altra. Molto più veloci di qualsiasi Programma P2P o di qualsiasi programma di file sharing.

Ma adesso vediamo di scendere nei dettagli tecnici. Studieremo StreamRipper su Windows.

Il mio consiglio, è di utilizzare StreamRipper come Plug-in per Winamp, esattamente come si faceva per il programma DSP.

Innanzitutto scarichiamo il programma da qui:

A questo punto installiamolo. Il plug-in si carica cliccando su Options -> Preferences, quindi scegliendo la categoria GENERAL PURPOSE -> Streamripper.

Nella Taskbar troveremo un simbolo: SR. Clicchiamo due volte e si aprirà questa immagine:

Streamripper

Il messaggio che vedete all’interno, sicuramente non ci sarà, ma comparirà qualora ascoltaste un qualsiasi stream.
Clicchiamo quindi su START, e comincerà il ripping del flusso audio. Otterremo questa schermata:

Streamripper

Vediamo prima come configurarlo.

Streamripper

Questa schermata permette di impostare queste funzioni:

  • Autoriconnessione in caso di caduta del segnale
  • Creazione di un relay
  • Quantità massima di byte da scaricare
  • Impostazione di un proxy
  • Impostazione Nome macchina locale
Streamripper

In questa schermata si possono effettuare altre configurazioni:

  • Definizione della Directory in cui salvare gli mp3
  • Possibilità di separare il flusso in più file
  • Possibilità di impostare i tag ID3 nei vari mp3
Streamripper

In questa schermata invece impostiamo:

  • Settaggio dei nomi dei file
Streamripper

Ultima schermata che considereremo, permette di impostare le skin.
Le altre schermate non hanno dettagli che ci interessano, almeno per il momento.

Questo articolo verrà completato nei prossimi giorni, sostanzialmente per ora va bene. Se ci sono richieste su configurazioni particolari, commentate liberamente.

Come scaricare pseudolegalmente Mp3 tramite le web radio

Commenti: 3 commenti
Pubblicato il: 14 marzo 2007

Mp3 Logo
Trentesimo articolo dedicato alle web radio.

Forse il più scandaloso e provocatorio articolo tra i 30 che ho creato.
Già il titolo può creare non poco stupore, ma so quello che dico, e non sono il primo a parlarne.

Facciamo una premessa alquanto datata. Facciamo un salto negli anni 80, ma anche nei primi anni 90. Chi di voi, amici più o meno datati, non ha mai registrato su nastro, su audiocassetta, un brano trasmesso da una radio in fm? Chi di voi non ha mai registrato su vhs un video del proprio cantante preferito trasmesso magari da mtv?

Tale operazione era considerata Illegale? Era illegale imprimere su nastro una trasmissione, che sia radiofonica o televisiva? Che io ricordi, no. Ed anche se lo era, era comunque un operazione di pubblico dominio.

Ritorniamo ad oggi, oramai nessuno o quasi nessuno registra trasmissioni radiofoniche direttamente dalla radio con audiocassette, perchè la qualità, che sostanzialmente dipende dall’irraggiamento presente e dalle condizioni atmosferiche, non è sempre delle migliori.

Allora cosa si fa per ottenere sempre le proprie canzoni preferite? Semplice, si usano i programmi P2P come Emule. Ma per ottenere musica questa è davvero la mossa migliore? Ovviamente no.

Come ho spiegato in altri casi, il P2P, specialmente quello multiplo, ovvero il P2P in cui tu scarichi molti files da molte fonti, e ovviamente invii molti files a molti host, è estremamente lento. Vuoi per la politica ADSL che vuole che sia misera la banda in upload, vuoi la lentezza degli host, o per mille altri motivi.

Allora perchè non riprendere la politica di “sfruttamento” del flusso audio delle radio? Solo che adesso, al posto di usare le radio in AM/FM, sfruttiamo le radio su internet!

Vediamo di capire meglio. Vi ricordate quando vi parlavo di Streamtuner? Be, adesso consideriamo una parte di esso, ovvero Streamripper.

Streamripper è un programma che permette di fare quello che vi proponevo. Permette di trasformare in mp3, segmentare, intitolare e manipolare il flusso audio di (quasi) ogni stream audio video.

Se la cosa vi sembra una perdita di tempo, voglio farvi notare un piccolo esperimento che ho condotto con un amico. Ho conosciuto un tizio scaricando da lui una canzone da Emule (a 2,7 Kb). Gli ho mandato un messaggio perchè mi andava. Mi ha risposto e abbiamo cominciato a parlare. Il discorso scivolò sulla lentezza del trasferimento. Alchè gli proposi di creare una radio, e trasmettere i suoi mp3. Scaricò tutti i programmi, e lo aiutai a configurare tutto affinchè potesse trasmettere senza visibilità e solo a me. Gli feci installare anche Streamripper.

Ovviamente anche io impostai la mia radio e la misi in trasmissione.

A questo punto, lui mi invio la lista dei suoi files, e io gli inviai la mia. GLi selezionai alcune canzoni, e lui fece lo stesso. Facemmo partire gli stream reciprocamente, con le canzoni che desideravamo. Alchè ci scambiammo gli indirizzi ip e le porte di comunicazione, e cosi facendo lui sentiva la mia radio ed io la sua.

Dopo aver verificato la correttezza di tutto, impostammo un bitrate altissimo, e cominciammo a rippare gli stream vicendevolmente. Lui diede in pasto a streamripper il mio stream, ed io il suo. I programmi cominciarono a scaricare sull’hard disk gli mp3 alla Velocità perfetta di trasmissione che era 128 kbitps ovvero 16 Kbyte per secondo.

Quasi 8 volte la velocità che avevamo con Emule!

Alchè lo salutai, andai a farmi i fatti miei, e al mio ritorno avevo sul mio hard disk tutte le sue canzoni, e lui le mie.

Vi chiederete perchè una procedura del genere, quando avremmo potuto che ne so, sfruttare un server a connessione più veloce… Abbiamo fatto questo perchè cosi facendo non abbiamo necessità di dover uploadare niente da nessuna parte, non abbiamo bisogno di installare praticamente niente che non sia il necessario per una semplice web radio, e possiamo farlo quando ci pare e quanto ci pare. Senza contare il fatto che streamripper (almeno la versione command line per linux) è multi istance, ovvero si può aprirlo più volte, permettendoci di rippare anche molte radio in contemporanea.

Abbiamo anche la sicurezza di avere i file praticamente perfetti, anche in caso di buffering. (W il protocollo TCP)

Che altro dire? La storiella è finita, passiamo ai dettagli tecnici e a come fare sul serio.

Splittiamo la guida in due parti:

Come effettuare programmi in diretta ed usare regie su linux

Commenti: 28 commenti
Pubblicato il: 14 marzo 2007
Scheda audio
Ventinovesimo articolo dedicato alle web radio.

Una delle domande più frequenti poste da chi tenta di effettuare streaming shoutcast su sistemi *nix, ma soprattutto da parte di chi ci riesce, è “con shoutcast su linux, allo stato attuale delle cose, posso solo trasmettere una lista di mp3, non posso migliorare la resa, sfruttando l’ingresso della mia scheda audio o lo stereo mix?”

Ovviamente si.

Per permettere lo streaming diretto dalla propria scheda audio, è sufficiente inserire all’interno del file example.lst il riferimento assoluto alla scheda stessa. Come dice lo stesso file example.lst, essa si trova con molta probabilità in /dev/audio o in /dev/soundcard, ma comunque non dovrebbe essere difficile trovarla.

Inserendo questa riga nel file, avrete la possibilità di trasmettere qualsiasi cosa impostiate come input. Potreste per esempio collegare un mixer, al quale sono collegati un microfono e una fonte musicale qualsiasi, realizzando quindi una radio più che completa, sotto linux.

Non consiglio di inserire sia riferimenti a file che il riferimento alla scheda audio, in quanto lo “switch” da brano a scheda è facile, ma non è possibile fare in tempi brevissimi lo switch da scheda a brano, se non inviando un segnale diretto al server.

Ragion per cui vi consiglio caldamente, almeno nei periodi in cui volete fare diretta vocale, di inserire solo il riferimento alla scheda audio, DUE VOLTE.

Molti inoltre mi hanno chiesto se ci sono programmi da utilizzare come fonte per un plug-in su linux, ovvero se ci sono programmi simili a sam broadcaster, virtual dj, o quant altro su linux. Devo rispondere che oggi io non ne conosco, e che se avrò qualche “soffiata” lo farò sapere prontamente.

Come creare una web radio con Linux e Shoutcast (guida avanzata) Seconda parte

Commenti: 95 commenti
Pubblicato il: 13 marzo 2007

Tux Wolfgang
Ventottesimo articolo dedicato alle web radio.

Questo articolo è la naturale continuazione della prima guida avanzata. Stavolta ci occuperemo di parlare dei file di configurazione dell’encoder.

I file che tratteremo qui si chiamano example.lst e sc_trans.conf.

Partiamo dal secondo.

Premessa doverosa: Anche in questo file i punti e virgola ad inizio riga indicano commenti.

; Sample sc_trans/0.35-j config file
; j.frankel 12/05/00
; t.pepper 10/31/00
; (relays not supported, yo)
;
; sc_trans operates in one of two modes, either reading mp3s off disk, decoding,
; re-encoding, and then broadcasting them, or relaying from a shoutcast server,
; transcoding to a lower bitrate, and broadcasting to a new server.

Dovute presentazioni dei personaggi e dell’obiettivo del programma sc_trans. Si spiega che questo programma altro non fa che convertire (Codificare) mp3 ai fini di ottenere un flusso audio ad una frequenza e ad un bitrate settabile, in modo che possa essere indirizzato ad un server (shoutcast). Non si permettono relay (I motivi per cui il server lo permetta e l’encoder no, mi sono oscuri… anche se possiamo dire che il server linux sarebbe utilizzabile anche con encoder che permettono il relaying).

; sc_trans accepts the following signals:
; HUP – flush logfiles (close and reopen) — will make console logging stop
; WINCH – jump to next song
; USR1 – reload playlist off disk (will not interrupt current playing stream)
; USR2 – toggle shuffle on/off
; TERM – normal sc_trans shutdown (clean)

Questo encoder accetta (e ritrasmette) i seguenti segnali:

  • HUP: ripristina i file di log
  • WINCH: Cambia canzone
  • USR1: Ricarica la playlist senza interrompere
  • USR2: Abilita o disabilità la modalità random dei brani
  • TERM: Segnale di chiusura ordinata del server

; PlaylistFile (required EVEN IF RELAYING) – playlist file (to create, use
; find /path/to/mp3/directory -type f -name “*.mp3″ > playlist_filename.lst
PlaylistFile=example.lst

In questa opzione si setta il file che fungerà da playlist. In questo caso, example.lst. Tra poco spiegheremo anche come creare una playlist valida.

; ServerIP/ServerPort are the target server to send to
ServerIP=myserver.com
ServerPort=8000

Queste opzioni sono l’indirizzo del server da utilizzare. Settate ServerIP con l’ip del server (se trasmettete dal vostro pc, mettete localhost) e in ServerPort il numero della porta.

; Password is the password on the sc_serv you’re sending to.
Password=changeme

Inserisci una password uguale a quella del server. Possibilmente complicata, se ci tieni alla tua radio… Non ci sono (o meglio NON CI DOVREBBERO) essere problemi sul tipo di caratteri utilizzati. Consiglio una sequenza di lettere numeri e UN SOLO carattere speciale.

; StreamTitle/URL/Genre define the data that appears on the directory and in the
; stream info.
StreamTitle=My Gay Son
StreamURL=http://mygayson.com
Genre=genres go here

Modificate queste impostazioni (non voglio commenti sulle opzioni di default -.-) per avere la personalizzazione della vostra radio. Tutto quello che scriverete nelle 3 opzioni, sarà visibile nel vostro pannello di amministrazione web,

; Logfile optionally denotes a text file to log sc_trans to. a kill -HUP
; will force a close and re-open of this file (but will also cease logging to
; the console)
LogFile=sc_trans.log

Indica il nome del file di log, e di come si fa a riflusharlo tramite un segnale.. (ne dovrei parlare meglio dei segnali? si, ma richiede un intero altro articolo!)

; Shuffle the playlist
Shuffle=1

Modalità random? Si = 1 No = 0

; Bitrate/SampleRate/Channels recommended values:
; 8kbps 8000/11025/1
; 16kbps 16000/11025/1
; 24kbps 24000/22050/1
; 32kbps 32000/22050/1
; 64kbps mono 64000/44100/1
; 64kbps stereo 64000/22050/2
; 96kbps stereo 96000/44100/2
; 128kbps stere0 128000/44100/2
Bitrate=80000
SampleRate=44100
Channels=1
; Quality is from 1-10. 1 is best, 10 is fastest.
Quality=1

Queste opzioni settano il bitrate, il sampleRate, il numero di canali (…) e la qualità. Giocateci a vostro piacimento. Su come settare i bitrate in base alla banda, ne abbiamo parlato anche troppo nei 27 articoli precedenti e nei commenti ad essi contigui.

; Mode=0 for none, 1 for 100/100->100/0, 2 for 0/100->100/0
CrossfadeMode=1
; Length is ms.
CrossfadeLength=8000

Modalità di fading da una canzone ad un altra. Se crossfademode è impostato a 0, non c’è fading. Se è impostato ad 1si ha un fading in uscita, se è impostato a 2 sia in entrata che in uscita. Crossfadelenght indica la durata in millisecondi del fading.

UseID3=0

Scegliete se usare (1) o non usare(0) i tag ID3 dei brani mp3 in playlist. Default no.

; Public determines whether or not this station will show up in the directory
Public=1

Opzione specchio della “make this server public” su windows. Volete essere visibili sulle pagine gialle di shoutcast? Settate 1. Altrimenti, 0. Default acceso.

; Put stuff here for user interaction (AOL IM, ICQ, IRC)
AIM=AIMHandle
ICQ=
IRC=shoutcast

Settate al posto delle opzioni predefinite i vostri Account AIM, ICQ e il vostro canale IRC di riferimento. Se non li avete potete lasciare vuoto.

Adesso passiamo al file Example.lst

# the playlist contains one line per song file you wish to stream. the paths
# should be absolute.

Ogni file mp3, deve essere espresso da una sola riga all’interno della lista, e il suo riferimento deve essere assoluto.

# if shuffle is off, the songs will play in order.

Se disabilitate l’opzione di shuffle, le canzoni saranno trasmesse nell’esatto ordine in cui le scrivete qui.

# the playlist is read once at startup, and cached to memory. you may update
# the playlist in a running process by sending a kill -USR1. The next track
# to play after the one currently playing will be from the new playlist.

Mi limito a tradurre: La playlist viene caricata una volta all’avvio, e mantenuta in memoria. SI può aggiornare la playlist MANTENENDO ACCESI ENCODER E SERVER inviando il segnale kill -USR1. La canzone successiva all’update sarà la prima della nuova playlist.

# on linux, you may specify a playlist item of DSP:/dev/soundcard, where soundcard
# is the name of your audio device. It’s usually /dev/audio. doing so will allow
# you to broadcast from a line input feed instead of mp3s on disk.

Su linux, si può specificare come elemento della playlist, anche direttamente la scheda audio. Questo vi permette di utilizzare il server linux con qualsiasi programma audio vogliate, o di utilizzare strumenti esterni collegati alla line in!

# the playlist ignores the first valid line. Don’t ask why.
# Your playlist must have at least 2 entries. if you only want to stream one file
# over and over again, then list it twice, including DSP sources.

Mistero dei misteri: il file lista ignora la prima riga utile. Questo si annulla se mettete modalità shuffle, ma in caso contrario rappresenta un problema. Per ovviare, scrivete due volte nella lista la prima canzone.

# the following 2 lines are sample playlist lines. you should replace them with
# actual mp3 files, being sure to adhere to all the content guidelines set forth in
# the .conf file!

le due linee dopo queste direttive, indicano i file di prova (NON VALIDI) che si trovano a mò di esempio.

Come creare una web radio con Linux e Shoutcast (guida avanzata)

Commenti: 2 commenti
Pubblicato il: 11 marzo 2007

Tux Dj
Ventisettesimo articolo dedicato alle web radio.
C’eravamo lasciati facendo partire (nel migliore dei casi) la nostra web radiolina in ambiente linux. Senza però scendere nei particolari dovuti ad errori, a come fare dirette radiofoniche, a come trasmettere playlist, a come insomma avere tutti gli strumenti che avevamo con windows.

Devo essere obiettivo, in ambiente linux ci sono delle limitazioni, che sono aggirabili, ma che possono inibire l’utente medio.

Cominciamo dal Server, studieremo il file sc_serv.conf:

Il file sc_serv.conf è un file di configurazione, vediamo cosa contiene al suo interno.

; SHOUTcast Distributed Network Audio Server configuration file
; Copyright (C) 1998-2004 Nullsoft, Inc.
; All Rights Reserved.
; Last modified Mar 17 2004

; If you want to manage multiple configurations, just copy
; this file to another name, and run sc_serv with that name
; such as:
; sc_serv.exe sc_leet.conf

Premessa: In questo file ogni riga che comincia con un punto e virgola è un commento. Detto ciò, questa prima parte, è una presentazione e un avviso della possibilità di manipolare più file di configurazione. E questa è cosa buona e giusta ;)

; MaxUser. The maximum number of simultaneous listeners allowed.
; Compute a reasonable value for your available upstream bandwidth (i.e. if
; you have 256kbps upload DSL, and want to broadcast at 24kbps, you would
; choose 256kbps/24kbps=10 maximum listeners.) Setting this value higher
; only wastes RAM and screws up your broadcast when more people connect
; than you can support.
MaxUser=32

Questa sezione permette di modificare l’upper bound di utenze contemporanee. Ovvero quanti utenti potrete avere al massimo. Scegliete con oculatezza, inutile settare un limite alto se non lo raggiungerete mai.

; Password. While SHOUTcast never asks a listener for a password, a
; password is required to broadcast through the server, and to perform
; administration via the web interface to this server. This server should
; consist of only letters and numbers, and is the same server your broadcaster
; will need to enter in the SHOUTcast Source Plug-in for Winamp. THIS VALUE
; CANNOT BE BLANK.
Password=changeme

Questa sezione permette di modificare la password del server, sceglietene una complicata, in quanto è molto semplice sniffarla. Se poi non la cambiate, ricordate che la password di default la conoscono tutti, e conoscendola, non ci vuole nulla a fare seri danni. Io stesso una volta sono entrato nel pannello di amministrazione avanzato di una radio beccata a caso, e devo dire che mi sono divertito a vedere i loro file log e quello che facevano.. Ho un etica, non ho creato danni, ma avrei potuto farlo.

; PortBase. This is the IP port number your server will run on. The
; value, and the value + 1 must be available. If you get a fatal error when
; the DNAS is setting up a socket on startup, make sure nothing else on the
; machine is running on the same port (telnet localhost portnumber — if you
; get connection refused then you’re clear to use that port). Ports < 1024
; may require root privledges on *nix machines. The default port is 8000.

PortBase=8000

La porta che utilizzerete per trasmettere.. Scegliete a piacere, con un valore sopra 1024

; LogFile: file to use for logging. Can be ‘/dev/null’ or ‘none’
; or empty to turn off logging. The default is ./sc_serv.log
; on *nix systems or sc_serv_dir\sc_serv.log on win32.
; Note: on win32 systems if no path is specified the location is
; in the same dir as the executable, on *nix systems it is in the
; current directory.
LogFile=sc_serv.log

In questa sezione si setta il nome del file di log. Siamo in ambiente unix, quindi posso dirvi che non mettendo nessun nome, non si avrà file di log, mentre non settando una directory, si avrà il posizionamento nella directory corrente.

; RealTime displays a status line that is updated every second
; with the latest information on the current stream (*nix and win32
; console systems only)
RealTime=1

Settando ad uno questa impostazione, avrete una “status line” con le informazioni sullo stream in corso, aggiornata ogni secondo. Comoda, sempre utilizzata, ma consuma. Se siete minimalisti, potreste anche staccarla settandola a 0.

; ScreenLog controls whether logging is printed to the screen or not
; on *nix and win32 console systems. It is useful to disable this when
; running servers in background without their own terminals. Default is 1
ScreenLog=1

Impostazioni di sicurezza in caso di server esterni, disabilita il controllo dei log dallo schermo, nel pannello di amministrazione avanzato.

; ShowLastSongs specifies how many songs to list in the /played.html
; page. The default is 10. Acceptable entries are 1 to 20.
ShowLastSongs=10

Setta il numero di canzoni che si vedranno nella dietrologia della radio. Ovvero nel file http://vostroip:numeroporta/played.html. Si possono settare da 1 a 20 canzoni massimo.

; TchLog decides whether or not the DNAS logfile should track yp
; directory touches. Adds and removes still appear regardless of
; this setting.
; Default is yes
; TchLog=yes

Come potete vedere questa opzione è commentata. Questa opzione permette di eliminare nei file di log i TOUCH che si hanno periodicamente dal server delle pagine gialle di shoutcast. Io consiglio di mantenerla a yes, ma obiettivamente per file log molto lunghi in caso di trasmissioni continuate, può essere un mezzo comodo per togliere informazioni inutili.

; WebLog decides whether or not hits to http:// on this DNAS will
; be logged. Most people leave this off because the DSP plug-in
; uses http:// calls to update titles and get the listener count,
; which takes up a lot of log space eventually. If you want to
; see people making hits on your admin.cgi or index pages, turn
; this back on. Note that this setting does NOT affect XML stats
; counters for hits to http:// pages.
; Default is no.
; WebLog=no


Anche questa opzione è commentata.
. Questa opzione permette di visualizzare nei log anche chi accede al vostro pannello di amministrazione. E’ un opzione impostata a no di default. Se volete un controllo maggiore, abilitatela, ma i vostri log aumenteranno notevolmente di volume.

; W3CEnable turns on W3C Logging. W3C logs contain httpd-like accounts
; of every track played for every listener, including byte counts those listeners
; took. This data can be parsed with tools like Analog and WebTrends, or given
; to third parties like Arbitron and Measurecast for their reporting systems.
; Default is Yes (enabled).
W3CEnable=Yes

Questa opzione abilita il Logging W3C, ovvero si abilita un log che tiene conto delle canzoni ascoltate da ciascun ascoltatore, dei byte trasmessi e di altre info, tutte ovviamente in un formato http-like. E’ settato a yes di default.

; W3CLog describes the name of the logfile for W3C logging. Default logfile is
; sc_w3c.log, in the same directory wherever the DNAS gets started from.
W3CLog=sc_w3c.log

Indica la posizione del file di log W3C.

; SrcIP, the interface to listen for source connections on (or to make relay
; connections on if relaying). Can and usually will be ANY or 127.0.0.1
; (Making it 127.0.0.1 will keep other machines from being able to
; broadcast using your shoutcast server )
SrcIP=ANY

Questa opzione seleziona l’ip che può trasmettere dal vostro server. Di default è ANY, ovvero tutti possono utilizzare il vostro server per streammare. Se settate 127.0.0.1 verrà mantenuta la possibilità per tutti di effettuare streaming dal vostro server. Settate un ip particolare, per avere una sola fonte possibile di streaming.

; DestIP, IP to listen for clients on (and to contact yp.shoutcast.com)
; can and usually will be be ANY. If your machine has multiple IP addresses,
; set this to the one you want it to be accessed by.
DestIP=ANY

Al contrario di quello che si crede, questa opzione non permette di selezionare quali client possono ascoltarvi, ma seleziona quale ip sarà raggiungibile connettendosi a quel server. DI solito si setta ad ANY proprio perchè cosi avete la possibilità di connettervi a qualsiasi macchina utilizzi il server. Settatene uno per avere maggiore sicurezza.

; Yport, port to connect to yp.shoutcast.com on. For people behind caching
; webproxies, change this to the alternate port (666 is what it might be,
; check www.shoutcast.com if you have problems). Otherwise, leave this at 80.
; We’re actively working on re-opening port 666, but as of release the only
; working port is port 80.
Yport=80

Attraverso quale porta deve connettersi il server per avere contatti con il sito delle pagine gialle? Ovvio! con la porta 80, ma è sempre cosi? be, no.. per ora è disponibile solo la porta 80, quindi non cambiate questa opzione.

; NameLookups. Specify 1 to perform reverse DNS on connections.
; This option may increase the time it takes to connect to your
; server if your DNS server is slow. Default is 0 (off).
NameLookups=0

Questa opzione abilita o disabilita il reverse DNS. Disabilitata per default.

; RelayPort and RelayServer specify that you want to be a relay server.
; Relay servers act as clients to another server, and rebroadcast.
; Set RelayPort to 0, RelayServer to empty, or just leave these commented
; out to disable relay mode.
; RelayPort=8000
; RelayServer=192.168.1.58

Queste impostazioni sono da decommentare, nel caso in cui tu voglia fare da relay per un altra radio, altrimenti lasciale commentate.

; AdminPassword. This password (if specified) changes the
; behavior of Password to be a broadcast-only password, and
; limits HTTP administration tasks to the password specified
; here. The broadcaster, with the password above, can still
; log in and view connected users, but only the AdminPassword
; will grant the right to kick, ban, and specify reserve hosts.
; The default is undefined (Password allows control for both
; source and admin)
; AdminPassword=adminpass

Questa impostazione permette di creare una password di amministrazione che da una maggiore sicurezza a chi deve svolgere attività di ban e di reserve ip, nel pannello di amministrazione avanzato. E’ commentata (e quindi disabilitata) di default.

; AutoDumpUsers controls whether listeners are disconnected if the source
; stream disconnects. The default is 0.
AutoDumpUsers=0

Un controllo non molto utile…

; AutoDumpSourceTime specifies how long, in seconds, the source stream is
; allowed to be idle before the server disconnects it. 0 will let the source
; stream idle indefinately before disconnecting. The default is 30.
AutoDumpSourceTime=30

Tempo di sopravvivenza della connessione con il server quando la sorgente crasha.

; ContentDir specifies the directory location on disk of where to stream
; on-demand content from. Subdirectories are supported as of DNAS 1.8.2.
; Default is ./content, meaning a directory named content in the same directory
; as where sc_serv was invoked from.
; ContentDir=./content

Identifica una directory di contenuti nel caso di Radio On-demand, non è il nostro caso.

; IntroFile can specify a mp3 file that will be streamed to listeners right
; when they connect before they hear the live stream.
; Note that the intro file MUST be the same samplerate/channels as the
; live stream in order for this to work properly. Although bitrate CAN
; vary, you can use ‘%d’ to specify the bitrate in the filename
; (i.e. C:\intro%d.mp3 would be C:\intro64.mp3 if you are casting at 64kbps).
; The default is no IntroFile
; IntroFile=c:\intro%d.mp3

Esiste la possibilità di trasmettere un brano di presentazione ogni qual volta qualcuno si connette alla radio, in modo che prima di sentire il flusso vero e proprio, si senta questo file. Per default questa opzione è commentata. Avete anche la possibilità di settare una variabile %d nel nome del file, in modo da potere separare file a vari bitrate in caso di streaming multipli a vari bitrate.

; BackupFile can specify a mp3 file that will be streamed to listeners over
; and over again when the source stream disconnects. AutoDumpUsers must be
; 0 to use this feature. When the source stream reconnects, the listeners
; are rejoined into the live broadcast.
; Note that the backup file MUST be the same samplerate/channels as the
; live stream in order for this to work properly. Although bitrate CAN
; vary, you can use ‘%d’ to specify the bitrate in the filename
; (i.e. C:\backup%d.mp3 would be C:\backup32.mp3 if you are casting at 32kbps).
; The default is no BackupFile
; BackupFile=C:\intro%d.mp3

Ecco una delle opzioni parafondoschiena per tutte le radio che intendono avere un unico server e molte sorgenti interscambiabili. Questa opzione permette di settare un file di backup, con le stesse modalità del file di intro di cui sopra, ma al contrario di quello, questo file verrà trasmesso solo quando la sorgente si disconnette dal server, e viene ripetuto più volte fintantochè non si ha di nuovo una sorgente. Utilissima opzione se il file mp3 ha un testo del tipo: “Attendere prego.. ci stiamo riconnettendo a radio taldetali…”

; TitleFormat specifies a format string for what title is sent to the listener.
; For example, a string of ‘Justin Radio’ forces the title ‘Justin Radio’ even
; when the source changes the title. You can use up to one ‘%s’ in the string
; which lets you contain the title from the source. For example, if your
; TitleFormat is ‘Justin Radio: %s’, and the source plug-in’s title is
; ‘Billy plays the blues’, then the net title is
; ‘Justin Radio: Billy plays the blues’. Note: only works on non-relay servers.
; The default is no format string.
; TitleFormat=Justin Radio: %s

Questa opzione permette di modellare il formato titoli visualizzato nei player a proprio piacimento.

; URLFormat specifies a format string for what url is sent to the listener.
; Behaves like TitleFormat (see above).
; The default is no format string.
; URLFormat=http://www.server.com/redirect.cgi?url=%s

Lo stesso comportamento di TitleFormat, ma in questo caso si considera un url.

; PublicServer can be always, never, or default (the default, heh)
; Any setting other than default will override the public status
; of the source plug-in or of a SHOUTcast server that is being relayed.
PublicServer=default

Il server deve essere pubblico? Potete scegliere, ma lasciate default che è meglio.

; AllowRelay determines whether or not other SHOUTcast servers will be
; permitted to relay this server. The default is Yes.
AllowRelay=Yes

Opzione che permette di avere o non avere relay per la propria radio.

; AllowPublicRelay, when set to No, will tell any relaying servers not
; to list the server in the SHOUTcast directory (non-public), provided
; the relaying server’s Public flag is set to default. The default is
; Yes.
AllowPublicRelay=Yes

I relay devono essere pubblici? Decidete.

; MetaInterval specifies how often, in bytes, metadata sent.
; You should really leave this at the default of 8192, but the option is
; provided anyway.
MetaInterval=32768

Quantità di metadata inviati insieme ai dati. Il default è 8 Kb.

Tralasciamo la parte relativa all’access control perchè è stata trattata quando abbiamo parlato del pannello di amministrazione avanzato. Nella seconda parte della guida avanzata, si commenteranno gli altri file, orientati al plug-in.

Come creare una web radio con Linux e Shoutcast (guida basilare)

Commenti: 45 commenti
Pubblicato il: 10 marzo 2007

Tux guitar
Ventiseiesimo articolo dedicato alle web radio.

Si, ci siamo finalmente arrivati. Dopo diversi mesi passati a usare Windows, consideriamo anche il fantastico mondo del pinguino e proviamo a fare streaming anche con Linux.

Per cominciare scarichiamo questi due archivi:

Scompattiamo i due archivi da qualche parte e salviamo tutti i file in due cartelle distinte.

La cartella contenente il server shoutcast sarà composta da 3 files:

  • README.TXT
  • sc_serv
  • sc_serv.conf


Con questi altri due file, che si creeranno una volta utilizzato per la prima volta il server.

  • sc_serv.log
  • sc_w3c.log

Il file README.TXT oltre a descrivere l’excursus del programma nelle varie versioni, spiega sommariamente come si installa Shoutcast su linux, quali sono i requisiti minimi di sistema, le peculiarità della versione per Windows e quelle della versione per Linux. Ne parleremo meglio successivamente.

Il file sc_serv è l’applicazione che richiameremo per il funzionamento del server shoutcast.

Il file sc_serv.conf è il file di configurazione, sul quale lavoreremo con maggiore puntualità.

La cartella contenente l’encoder shoutcast sarà composta da 5 files:

  • example.lst
  • sc_trans.conf
  • sc_trans_linux


Gli altri due file, sono encoder per altri sistemi operativi.

  • sc_trans_freebsd
  • sc_trans_macosx

Il file example.lst è un file LISTA di esempio. Un file LISTA per shoutcast è un file che contiene dei riferimenti assoluti a dei file mp3, ed è l’unico strumento che può decidere cosa trasmettere.

Il file sc_trans_linux è l’applicazione che richiameremo per il funzionamento dell’encoder shoutcast.

Il file sc_trans.conf è il file di configurazione dell’encoder.

A questo punto fiato alle trombe! Cominceremo innanzitutto a fare partire la radio, per poi studiare le configurazioni alla ricerca della qualità migliore.

Per prima cosa, apriamo il server, per farlo, aprite un terminale e posizionatevi nella cartella in cui si trova il server shoutcast e digitate semplicemente:

./sc_serv

Ottenendo questo:

[SHOUTcast] DNAS/Linux v1.9.7 (Jun 23 2006) starting up…
[main] pid: 20433
[main] loaded config from sc_serv.conf
[main] initializing (usermax:32 portbase:8000)…
[main] No ban file found (sc_serv.ban)
[main] No rip file found (sc_serv.rip)
[main] opening source socket
[main] source thread starting
[main] opening client socket
[main] Client Stream thread [0] starting
[main] client main thread starting
listening for connection on port 8001
connected from 127.0.0.1
icy-name:Radio LOL ; icy-genre:genres go here
icy-pub:1 ; icy-br:80 ; icy-url:http://mygayson.com
icy-irc:shoutcast ; icy-icq: ; icy-aim:AIMHandle
[main] SIGWINCH; Reloaded Config File
[dest: 207.200.98.4] starting stream (UID: 0)[L: 1]{A: SHOUTcast Directory Tester}(P: 0)
[dest: 207.200.98.4] connection closed (0 seconds) (UID: 0)[L: 0]{Bytes: 126078}(P: 0)
[yp_add] yp.shoutcast.com gave error ()

Che ricorda moltissimo la schermata del server shoutcast per windows, già discussa nella guida basilare per Windows Non preoccupatevi se vedete righe strane o errori. La configurazione letta sopra è la più normale possibile in questo momento.

In più rispetto alle schermate di default nel server windows vediamo il PID (Process Identifier) e la gestione dei SIG, ovvero dei Segnali che possono essere inviati al server. (questo non è argomento da trattare ora)

Per il resto, come potrete notare, il server tenta numerose volte di collegarsi al Directory tester, non riuscendoci! Perchè? Ovvio, il server è aperto, ma non c’è nessuna sorgente che trasmette qualcosa!

A questo punto apriamo un altro terminale, e apriamo l’encoder.

Per farlo andiamo nella cartella contenente l’encoder, e digitiamo:

./sc_trans_linux

Ottenendo il risultato non molto incoraggiante, ovvero un loop di quello che sembra essere un errore:

[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped
[MAIN] Error opening /home/sctrans/content/test_2.mp3, skipped

In realtà non è un errore. Ma occorre fare una premessa. L’encoder shoutcast per linux, non si appoggia a nessun player, ma lavora direttamente sugli mp3. Per cui occorre un file che contenga gli indirizzi assoluti dei file che vogliamo trasmettere. La playlist predefinita contiene dei file inesistenti, e questo giustifica il fatto che ovviamente non li trovi! Dato che è autoimpostata una funzione di repeat alla fine della playlist, l’errore si ripete all’infinito.

Ragion per cui, apriamo con un editor di testo il file example.lst, cancelliamo le due righe alla fine del file contenenti gli indirizzi dei due mp3 inesistenti, e sostituiamole con l’indirizzo di un solo mp3 realmente esistente.

Dopo aver fatto questo: Occorre fare un altra cosa. Sincronizzare le password. Stranamente non lo sono di default. Per cui dovete cercare nei file di configurazione le occorrenze della parola password, e impostarla uguale. (si tratta di solito di fare una sola modifica) Tratteremo i file di configurazione nel dettaglio nella guida avanzata.

Come ultima cosa, impostate nel file sc_trans_conf come SERVERIP ovviamente localhost.

A questo punto avete l’url di un mp3 valido, le password sincronizzate e il server locale. A questo punto, possiamo ripetere le operazioni di apertura di server e plugin, come sopra descritto.

Qualora vi accorgeste che la porta utilizzata da shoutcast è occupata, probabilmente dal fatto che avete chiuso male il programma e la socket è rimasta occupata, potete benissimo usare il comando:

fuser -n TCP numeroporta

per identificare il pid del processo che occupa la stessa, per poi killarlo con un semplice

kill numeropid.

Se non funziona, provate un kill -s 9 numeropid.

Rilanciati gli eseguibili, il terminale in cui agisce il vostro encoder darà il seguente output, che ovviamente varia anche in base all’mp3 utilizzato:

*******************************************************************************
** TRANScast Distributed Network Audio Content Provider
** Copyright (C) 2000 Nullsoft, Inc. All Rights Reserved.
** Use “sc_trans filename.conf” to specify a config file.
*******************************************************************************
[TRANSCast] DNAS/posix v0.400-LAME (Mar 4 2003) starting up…
[MAIN] PID: 5398
[MAIN] Loaded config from sc_trans.conf
[MAIN] Loading playlist (example.lst)
[MAIN] Found (2) entries in playlist
[MAIN] Playlist decoder thread starting
[MAIN] Streaming thread starting
[DECODE] Opened prova.mp3
[STREAM] Creating stream socket
[STREAM] Resolving stream host
[STREAM] Connected to host server
[CONFIG] WARNING: No InputSamplerate defined, assuming 44100!
[CONFIG] WARNING: No InputChannels defined, assuming 2!
Warning: input file samplerate is -1208428222 Hz, must be 44100!
Warning: input file samplerate is -1208428222 Hz, must be 44100!
Warning: input file samplerate is -1208428222 Hz, must be 44100!
Warning: input file samplerate is -1208428222 Hz, must be 44100!
Warning: input file samplerate is -1208428222 Hz, must be 44100!
Warning: input file samplerate is -1208428222 Hz, must be 44100!
Warning: input file samplerate is -1208428222 Hz, must be 44100!
Warning: input file samplerate is -1208428222 Hz, must be 44100!
[DECODE] Opened prova.mp3
[STREAM] Host server gave success (OK2)
[STREAM] Stream to localhost established
[STREAM] Sending stream information
[MAIN] Title Updated

Questa è la configurazione ottimale, il vostro mp3, in questo caso prova.mp3 è in trasmissione su internet. Avete a disposizione il vostro pannello d’amministrazione e potete avere ascolti. L’obiettivo della guida basilare è terminato, ma c’è ancora molto da settare e da imparare, soprattutto a causa del fatto che gli errori possibili sono molteplici.

Hacking e personalizzazione della sezione WEB di Sam Broadcaster

Commenti: 32 commenti
Pubblicato il: 9 marzo 2007

Hacker
Venticinquesimo articolo dedicato alle web radio.

In questo articolo ci occuperemo di come modificare, personalizzare ed “Hackare” i meccanismi che permettono a Sam Broadcaster di visualizzare i titoli delle canzoni trasmesse, in coda e già trasmesse. In modo da personalizzare il personalizzabile ma soprattutto ISOLARE le variabili che utilizza SAM, in modo da avere un “template bianco” da potere modificare a piacimento. Esattamente come ha fatto radio kissitaly, la quale incorpora nelle sue pagine web, le peculiarità delle variabili di Sam Broadcaster, creando un effetto preview estremamente simpatico.

Cominciamo da una considerazione: Sam Modifica dei template esistenti, indicati nella tabella che abbiamo studiato in quest altro post nella colonna input.

Andiamo allora a vedere l’html di questi template:

  • _playing.html

:

<!--include("_header.html")-->

Questo è un comando che include un file all’interno di un file html. In questo caso includiamo un altra pagina web, con funzione di header, che vedremo dopo.

Esaminiamo bene questo script. E’ composto da una funzione chiamata DoRefresh ed una variabile chiamata refreshID. La funzione non fa altro che creare un numero casuale e porlo come indirizzo della pagina, o meglio, settare un attributo della pagina html con quel numero. La variabile refreshID invece non fa altro che richiamare la funzione con un settimeout, dove il timeout è dato proprio da Sam Broadcaster, e lo si riconosce dal fatto che è tra $.

There are currently $Viewers$ listeners tuned into this station!

L’unica cosa interessante qui è la variabile $Viewers$ che stampa il numero di ascoltatori presenti al momento.

Saltiamo parti di puro html, e andiamo a:

$darkrow$ rappresenta il colore impostato per le righe scure. Dovrebbe essere possibile modificarlo.

  • _header.html

:

Questa direttiva include il file _config.html che studieremo in seguito.

Questa variabile invece inserisce nella barra del titolo il nome della vostra stazione radiofonica.

Vengono inseriti tre script, uno remoto e due locali.

QUESTO ARTICOLO E’ IN COSTRUZIONE

Configurare ed utilizzare il database di SAM Broadcaster

Commenti: 24 commenti
Pubblicato il: 7 marzo 2007

My SQL
Ventiquattresimo articolo dedicato alle web radio.

In questo articolo descriveremo brevemente come sfruttare Sam Broadcaster per l’interazione con gli utenti e per la visualizzazione in diretta della programmazione sul web.

Spieghiamo prima in soldoni cosa succede. Sam memorizza in un database (quale esso sia non ha importanza) la coda delle canzoni. Senza scendere nei particolari delle basi di dati, Sam ha anche la possibilità di interrogare il database per chiedere quale sarà la canzone successiva, quale la precedente, e tutta un’altra serie di opzioni.

Dentro Sam, clicchiamo su CONFIG, e poi su HTML OUTPUT.
Otteniamo questa schermata:

Html Output

A questo punto vediamo di interpretarla. In alto troviamo una specie di tabella.

La prima colonna ha come nome: TYPE ed indica il tipo di file template da utilizzare (spiegherò dopo cosa vuol dire)
La seconda colonna indica se effettuare il trasferimento FTP o no
La terza colonna indica la posizione del file Template
La quarta colonna indica l’url della pagina in uscita

Sotto abbiamo le righe della tabella (come compilare la tabella lo vedremo dopo)

Sotto ancora abbiamo un opzione:
Auto Generate on Song Change.Skip for songs less than ____ seconds in duration
che permette l’upgrade delle pagine selezionate, in caso di cambio canzone. Non si hanno cambiamenti per file che durano meno di N secondi.

Dopo si trova anche una tabellina simile alla precedente, stavolta per le playlist, e i campi per la connessione al vostro sito via FTP.

A questo punto potete tranquillamente avere sul vostro sito lo schema predefinito da Sam per la visione dei titoli delle canzoni sul web. E’molto bello, ma è sempre lo stesso, e non è molto user-friendly da modificare e personalizzare.

Quindi occorre effettuare un pò di studio su come Sam effettua l’aggiornamento delle canzoni, e quindi fare un pò di sano Hacking.

pagina 1 di 2»
Seguimi
FacebookLinkedInTwitterYoutubeRSS
I like it!
Google and Twitter

Benvenuto , oggi è lunedì, 6 febbraio 2012