Newsgroup: it.comp.os.linux.development
Titolo: Rilevamento "Rumori" da microfono

Salve,
   c'è un metodo da linguaggio di programmazione per poter rilevare 
ruomori dal microfono? Mi spiego meglio...
Ho la necessità di gestire degli eventi in base ai rumori che arrivano 
nel microfono... semplicemente due stati "silenzio" e "rumore", nel 
momento in cui si verifica un rumore compare un messaggio di avviso...
Grazie


potresti aprire /dev/dsp in in lettura. Così puoi leggere quello che 
arriva dal microfono (al limite, regola a mano il mixer)
LP

Si, ma il problema è interpretare quello che mi arriva... ti lascio 
immaginare quello che compare se lanci un "cat /dev/dsp" e provi a 
parlare al MIC... ;D


 
[...]
Lo so cosa arriva: una sequenza di byte (l'unica cosa che non so è se a 
8 o 16 bit, ma cambia poco) che rappresenta il livello di pressione sul 
microfono.
Nel caso di un campionamento a 8 bit, il valore rimane intorno al 127 
(leggendo come unsigned char) scostandosi di poco in base al "rumore" di 
fondo o delle interferenze elettromagnetiche che ci sono nell'ambiente e 
che vengono captate e amplificate.
Quando si parla il livello cambia fino a coprire tutta la gamma ad 0 a 
255 (nel caso di un suono ad alta intensità).
Nel caso di 16 bit (ed è l'unica cosa da verificare) i livelli come 
unsigned short vanno ad 0 a 65535 con valore medio su 16384.
Ti prepari un bel vu-meter (cimi la semionda negativa e passi su un 
filtro o un rivelatore di picco con salita immediata e discesa lenta) e 
passi il tutto in un rivelatore ad isteresi (un bel trigger di schmitt) 
per stabilire se si sta superando il livello di rumore che fa scattare 
"l'allarme".
Regoli poi i livelli di scatto e reset eventualmente inserendo un 
controllo sulla durata del rumore per evitare falsi allarmi.
Mi dispiace, ma dalla scheda audio non puoi fare che così. A meno di non 
costruirti (o comprare già fatto) un circuto che faccia questo lavoro a 
livello hardware e ti ritorni un contatto aperto/chiuso per le 2 
condizioni di silenzio/rumore.
PS: per approfondire, guarda i DSP e le tecniche di filtraggio digitale 
(trasformata z se vuoi andare più sul tecnico).
Sembra più difficile di quanto non lo sia in realtà.
LP
PPS: chiedo scusa per qualche spiegazione troppo semplicistica.

On Sun, 19 Mar 2006 15:54:35 +0100, Ruben Elmo 
was talkin'about:
#define IMHO

Definisci un intervallo X in cui l'ampiezza della forma d'onda campionata é
mediamente al di sopra di un valore Y.
Apri il device del microfono in lettura, leggi l'intervallo, calcoli
l'ampiezza media e ritorni un codice d'uscita di 1 o 0.
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! I Never Wanted To Be What They Told Me To Be
  		Fulfill My Fate Then I'll Be Free >!- Blind Guardian - Mordred's Song

 
Anche io ho lo stesso problema, ma il mio flusso arriva dalla rete. Come 
calcolo l'ampiezza considerando che l'audio sarà compresso? Perdonate la 
mia ignoranza, ma non mi sono mai occupato di questo.
Lo devo anche fare con un flusso video MPEG4
FF

 Lo devo anche fare con un flusso video MPEG4
Direi che tutte le operazioni che devi fare saranno fatte su frammenti non
compressi, quindi il primo passo é decomprimere lo stream.
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! Computers are not intelligent.  They only think they are. !>-