Go Down

Topic: Audio in streaming (Read 1 time) previous topic - next topic

makky

Salve ragazzi io avrei la necessita di ascoltare da remoto quindi magari via adsl una sorgente audio. Ovviamente la sorgente audio la vorrei collegare con arduino che con l'ethernet shield va in rete. Dall'altra parte non so ancora cosa utilizare, magari semplicemente un browser.
Qualcuno può darmi qualche idea?

Guglio

Non penso che l'arduino abbia abbastanza ram (2kb) e processore per fare quello che chiedi!!
Fa fatica a fornire le pagine HTML!!
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

lesto

l'audio è normalmente campionato a 44100Hz pari a 44.1KHz, pari a 0.0441MHz quindi arduino (che lavora a 16MHz) dovrebbe farcela. certo, mancano i tempi di fetch del dato, inserimento nel pacchetto e invio, ma credo che ce la faccia alla grande per un client solo, soprattutto se usa il wiznet che si occupa del (pesantissimo) protocollo ISO/OSI.
per un server multiclient dovrebbe farcela usando uno streaming multicast UDP.

Allora, makky, quali sono le tue competenze informatiche? sai programmare? hai mai programmato giocando con l'audio? e con la rete? sai la differenza tra un firewall e una nat? insomma, sicuro di aver le competenze per portare avanti un progetto del genere, o è meglio se prima aggiusti la mira?

insomma io partirei così: lettura di un file TXT da microSD
lettura di un mp3 da microSD
stream di un dato via TCP e programma a PC che lo salvi su disco (magari in java così lo puoi anche inserire nelle pagine html come applet)
stream dell'mp3 e uso del precedente programma, giusto per controllare che l'mp3 venga inviato e ricevuto correttamente
modifica del programma lato PC per riprodurre lo stream.

Molto programmi come VLC, media player, etc... supportano vari tipi di streaming, però sono protocolli che dovresti implementare seguendo le RFC, il che complica un poco la storia perchè dubito che siano stati pensati per risparmiare risorse lato cpu/memoria, ma solo a lato network

l'UDP è migliore per queste cose del TCP, ma devi lottare con il problema che non c'è sicurezza che i dati arrrivino, o siano corretti, o i provider bloccano i multicast.
Devi fare anche i conti con MTU, banda disponibile (in upload a lato server, il dowload a lato client di solito è molto alto).
Se ti tocca fare un sistema multiclient senza sfruttare il multicast, allora forse ti conviene usare 3 arduino: uno si occupa del layer ISO/OSI, invia le richieste di connessione al secondo arduino, che le gestisce, mentre il trzo arduino si occupa solo del recupero del file mp3 e della sua pacchetizzazione.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ratto93

L'argomento era stato affrontato qualche topic fa e dopo varie valutazioni tutti d'accordo abbiamo lasciato "morire" la cosa non perchè a livello matematico non ce la faccia ma perchè il convertitore A/D contenuto nell'ATmega non ce la fà..... essendo troppo lento .....
Se corri veloce come un fulmine, ti schianterai come un tuono.

lesto

#4
Jun 26, 2011, 08:36 pm Last Edit: Jun 26, 2011, 08:45 pm by lesto Reason: 1
ratto non ti seguo. Stai tirando in mezzo l'ADC, che assolutamente non serve per fare streaming di un mp3 salvato su di una smart card.
Non puoi campionare musica, o riprodurla, (forse i MIDI) ma stiamo parlando di altre cose.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ratto93


ratto non ti seguo. Stai tirando in mezzo l'ADC, che assolutamente non serve per fare streaming di un mp3 salvato su di una smart card.
Non puoi campionare musica, o riprodurla, (forse i MIDI) ma stiamo parlando di altre cose.
Ops... perdonatemi...  mi devo essere confuso io con qulache vecchio topic.... sorry.... :smiley-red:
Se corri veloce come un fulmine, ti schianterai come un tuono.

Guglio

Quote
Ovviamente la sorgente audio la vorrei collegare con arduino

Io ho inteso la fonte come un microfono...
Magari è come dice @lesto ed intende una SD!
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

lesto

comunque anche con un microfono (e qualche componente hw in più come un amplificatore) si può fare..
http://lab.robomotic.com/index.php?option=com_content&view=article&id=52:audio-beacon-part-1&catid=37:beginners&Itemid=28

questi hanno fatto esattamente ciò che ti serve fino al punto 3 del mio primo post però con stream attraverso la seriale
carto, campiona a 8KHz, ma è la stessa frequenza dei telefoni di casa... http://it.wikipedia.org/wiki/Frequenza_di_campionamento
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

uwefed

#8
Jun 27, 2011, 01:14 am Last Edit: Jun 27, 2011, 06:00 pm by uwefed Reason: 1

Quote
Ovviamente la sorgente audio la vorrei collegare con arduino

Io ho inteso la fonte come un microfono...
Magari è come dice @lesto ed intende una SD!


Comunque anch io capirei some sorgente un microfono o un altra fonte analogica.

Vediamo cosa dice makky

Ciao Uwe

astrobeed

Anche parlando di uno strem audio basato su un file mp3 letto da SD avrei qualche dubbio sul fatto che Arduino sia in grado di gestire il flusso dati in real time.
Non scordiamoci che la SD e l'Ethernet shield condividono il bus SPI e che sia leggere la SD, blocchi di 512 byte per volta, che inviare i dati su Ethernet, con relativa gestione dello stream non sono operazioni leggere dal punto di vista elaborazione.

lesto

non sapevo che l'ethernet usava la SPI... Non ho mai usato la SPI, può gestire contemporaneamente 2 host? io sapevo che lòa SD la puoi leggere in i2c..
con 1,5MB al minuto (media degli mp3 che ho) son ~26300 Byte al secondo... ovvero 50 letture al secondo..
Quanto è la velocità in byte di i2c e SPI?
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ratto93



ratto non ti seguo. Stai tirando in mezzo l'ADC, che assolutamente non serve per fare streaming di un mp3 salvato su di una smart card.
Non puoi campionare musica, o riprodurla, (forse i MIDI) ma stiamo parlando di altre cose.
Ops... perdonatemi...  mi devo essere confuso io con qulache vecchio topic.... sorry.... :smiley-red:

Beh se non altro non solo io avevo capito che si voleva usare un microfono.....
Se corri veloce come un fulmine, ti schianterai come un tuono.

astrobeed


non sapevo che l'ethernet usava la SPI... Non ho mai usato la SPI, può gestire contemporaneamente 2 host? io sapevo che lòa SD la puoi leggere in i2c..


La SPI è un bus multidrop, cioè più device possono coesistere in parallelo, però richiede un pin aggiuntivo di controllo, il CS, per ogni dispositivo collegato al master.
Le SD usano la SPI.

Quote

con 1,5MB al minuto (media degli mp3 che ho) son ~26300 Byte al secondo... ovvero 50 letture al secondo..
Quanto è la velocità in byte di i2c e SPI?


I2C su Arduino al massimo 400 kbps, la SPI non credo arrivi olte 2 Mbps.
Però quello che conta non è tanto la velocità di trasferimento dei dati quanto tutti i passaggi intermedi e il fatto che prima devi leggere il blocco dati, 512 byte per volta, dalla SD e poi inviarlo alla Ethernet shield, gestendo il relativo protocollo, il tutto più velocemente del tempo necessario per riprodurre i dati, altrimenti lo stream audio comincia ad andare a singhiozzo.
Se poi ci mettiamo di mezzo pure wiring con tutti i colli di bottiglia che, per ovvi motivi, crea ecco che non riesci ad inviare in modo continuo il flusso dati.
Da varie prove che ho fatto con la ethernet shield in modalità server ho visto che si fa fatica ad aggiornare più di poche volte al secondo una semplicissima pagina web, figuriamoci ad inviare oltre 26 kBytes al secondo costantemente usando un protocollo dedicato per lo streaming che non mi pare sia gestito direttamente dal WIZ.


lesto

#13
Jun 27, 2011, 05:54 pm Last Edit: Jun 27, 2011, 06:00 pm by lesto Reason: 1
il wix supporterà l'upd, credo, che va più che bene. Poi come ho detto prima per una cosa professionale 3 atmega, unio per gestire i flussi, uno per gestire le connessioni(non serve con multicast) e uno per leggere la SD o campionare il microfono

edit se l'i2c va a 50kB/s forze è un poco al limite. La SPI non dovrebbe aver problemi, capisco che il problema sia la richiesta dei dati, ma il fatto che la SPI sia gestita via hardware dovrebbe semplificare le cose no? oppure la SPI è una virtualizzazione di Wiring/arduino?

ps. ogni aggiornamento di pagina HTML è una creazione di connesione, distruzione della stessa, e invio di molti pacchetti che probabilmente non raggiungono nemmeno metà MTU... cosa che invece nello streaming si tende a riempire, creando così un buffer.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

makky

Ragazzi scusatemi se rispondo solo ora, ma sono stato fuori tutta la giornata. Innanzitutto grazie mille per il vostro interessamento.
Per prima cosa vorrei precisare forse perchè non l'ho spiegato esplicitamente che a me interessa ascoltare in streaming una sorgente audio collegata magari ad arduino quindi possiamo intenderlo come microfono che poi potrebbe essere un ingresso RCA. Il campionamento a me va bene anche a 8Khz e mi va bene anche il collegamento con un unico client. Io sinceramente pensavo di fare una shield con l'hardware appositamente studiato che fa tutto il lavoro di campionamento e quant'altro da usare ovviamente con un arduino e una shield ethernet.
Lesto ho buone basi per cominciare differenze tra nat e firewall le conosco, come conosco C e conosco l'elettronica.
Arduino lo conosco da poco, da qualche mese giusto il tempo di provarlo un po' con qualche applicazione abbastanza semplice. Prima programmavo le FoxBoard.
Spero di farcela a farlo con Arduino (ovviamente anche con il vostro aiuto) perchè mi piace molto come scheda.
Grazie

Go Up