Si, la soluzione hardware mi era stata proposta anche altrove.
Sicuramente è più veloce e prestante, ma volevo provare via software.
Anche perchè di hardware non tocco nulla da anni e PORCO-DI-QUEL-MONDO mi stai facendo venire una
voglia matta di ritirare fuori tutto...vedremo.
CITAZIONE
Una cosa che non ho capito è se tu voglia discriminare la presenza contemporanea di più toni DTMF o se assumi che ne arrivi uno per volta.
In che senso ? Io potrei digitare 1,5,6 e registro in un file.
In quel file ci saranno le frequenze che compongono 1,5,6.
Se io faccio la fft, mi restituisce le frequenze, ma non l'ordine:
l'asse x è la frequenza, y l'intensità.
Quindi supponiamo che il 5 abbia frequenze più basse, io lo vedo prima dell'1 ma è stato digitato dopo.
Poi, ma ci devo ragionare, prendilo con le pinze.
Se noti due numeri diversi es:
3=697 hz e 1477 hz
6=770 hz e 1477 hz
supponiamo questi 2 numeri nella registrazione.
Se non ragiono male, facendo una fft troveri:
un picco da 697, uno da 770 e
uno da 1477 quando invece sono 2 !!!
Ora non mi chiedere se quello da 1477 lo vedo doppio in intensità perchè si somma....non saprei
Anche io come te, anzi di più, non conosco bene la fft, solo e puro hobby.
Quindi devo trovare una strada alternativa.
Che potrebbe essere:
Registro e salvo come wave.
Parto con il mio programma in C, e inizio a leggere i dati.
Se l'intensità, è molto bassa, significa che non sta entrando nulla, e non memorizzo nell'array di float o duble
che servirà per la FFT.
Quando il volume è significativo, inizio a memorizzare. Quando torna a essere basso mi fermo.
Memorizzo dove sono arrivato a leggere nel file e mi fermo.
Analizzo l'array con fft e comparo, stampo.
Ora ricomincio da dove ero rimasto.
Potrebbe essere un modo.
Certo, tra un tono e l'atro non ci devono essere disturbi, altrimenti il metodo viene ingannato.
C'è poi la grana: ok, ma volume basso non memorizzo.
Ma quanto basso ? E se faccio una registrazione successiva e i volumi sono differenti ?
lo standard di prima non mi va più bene.
Si potrebbe ovviare normalizzando sempre allo stesso livello.
Buttata li: potrei cercare il volume massimo nel file e da li "traslare" il tutto in proporzione a un livello scelto
a priori.
Come sai, anche dietro banalità ci sono un sacco di cose da risolvere.
Vale la pena via software? Decisamente no.
Ma a volte sono sfide. Se non ci lavori te lo puoi permettere.
Che ne pensi dei ragionamenti, ti sembrano validi/fattibili?