Newsgroup: it.comp.programmare.win32
Titolo: [OT] wave

qualcuno sa come ricavarsi da una forma d'onda l'altezza del suono
registrato? (la frequenza) ...
... oppure consigliarmi dove poter reperire tale informazione?
grazie 1000


Beh, non e' che abbia da fare con win32... ma...
Allora, ci sono vari metodi e dipende molto dal segnale che vuoi analizzare
e la precisione.
1) con una dfft puoi avere lo spettro e cerchi il massimo, ma non e' da
considerare molto preciso (dipende dalla larghezza della finestra campione.
Trovi tanto software (in C), efficiente, .
2) con il metodo zerocrossing (f(t) < 0 <= f(t+1)), problematico se lo
spettro contiene tanti armonici.
E' facile da implementare, magari puoi anche prima filtrare il segnale con
un Low-Pass digitale (cerca filtri IIR o FIR)
3) correlazione auto, cio' verificando le onde per varie distanze se sono
simili
    (min ( [Somma(f(t ...t-max)-Somma(f(tp ...tp-max)]p) {difficile da
scrivere in ascii quello che intendo :-) }. Pesante, ma molto preciso (con
oversampling arrivi a dei valori piu preciso di un Sample, importante per
frequenze alte).
medio difficile da implementare, lento, metodo usato nei campionatori per il
pitchshifting.
Ci sono anche altri metodi, ma non li conosco in pratica (solo teoria)
4) Wavelet analysis,  nonlinear formant-pitch prediction (con rete
neuronali), resonant models
Qui trovi un interessante articolo (molto completo, ma si tratta di
analizzare la voce umana, solo teoria, senza sorgenti)
http://svr-www.eng.cam.ac.uk/~ajr/SA95/
per i sorgenti un libro: Numerical recipes in C, William H.Press et altri
(caro)
Puoi anche cercare in rete, tipo pitch analysis (in generale), o voicing
analysis (per il speech analysis)
Jurgen

WOW!

 WOW!
Posso chiederti cosa vuoi fare di preciso?
J.

sicuro... ma e' un lavoraccio per il quale mi ci vorra' parechcio tempo...
vorrei scrivere un metodo per chitarra (io la suono ovviamente) che utilizzi
il microfono e segnali l'errore quando l'esercizio non viene eseguito
correttamente, sia se la nota viene suonata fuori tempo, sia se viene
suonata una nota sbagliata
una cosina cosi'... dici che sara' cosa fattibile?

 wrote in message
news:Q1Hw7.30859$pm2.5...@news1.tin.it...

Si e no, dipende a che livello vuoi arrivare.
Ricavare note suonate unisono e' relativamente facile. Il problema sono
accordi e devi ricavare lo spettro. Ma questo spettro ha inerente delle
problematiche: una suono e composto da vari armonici, soprattutto l'ottava
(f/2) e la quinta (della ottava = f/3). Ma adesso non sei sicuro se in un
esercizio sara' scritto un Do/Sol oppure il Do con tanti armonici (posizione
dove tocchi la corda ha un influsso forte sullo spettro).
< OnTopic>
Un programma che segnala errori di tempo e' molto piu' facile, ma devi
lottare con un problema (torniamo ON-Topic) delle librerie windows che
spesso hanno una forte latenza, cio' ritardo nella acquisizione dei dati.
Questo molto meno se usi librerie Direct-X o ASIO.
</OnTopic>
Un metodo molto piu' facile e' usare dei strumenti Midi (anche la chitarra)
che per analizzare il segnala (puoi anche controllare il bending e alcuni
per la chitarra permentono addirittura di sapere se la penata veniva da su o
da giu) e un gioco da ragazzi. Ma una chitarra con pickup esafonici e
convertitore Midi ha un certo costo, quindi un pacchetto metodo/chitarre
potrebbe essere solo un investimento valido per scuole specializzate. Se una
cosa simile ti interessa mi puoi contattare in privato, ti posso dare una
mano.
J.

dove tocchi la corda ha un influsso forte sullo spettro).
tieni presente che, normalmente, un errore non consiste nel suonare un sol
invece che un do, ma magari non suonare niente, suonare una nota sporca (un
rumore) o suonare do diesis (la nota subito dopo) che non avrebbe a quel
punto nessun armonico in comune
quindi potrei benissimo considerare di ogni nota gli armonici, e prendere
per buoni anche quelli, senza andare a compromettere un granche' l'utilita'
dell'esercizio
inoltre la mia intenzione era di fare una DLLActiveX (che ho imparato a
scrivere qualche tempo fa) e mettere il metodo on line... passare al midi
significherebbe dover cambiare completamente target
io insegno chitarra in un paio di scuole, e a volte mi sarebbe piaciuto
avere qualcosa come dei grossi display, un punteggio a 100, e ad ogni errore
il punteggio cala
alla fine dell'esercizio si vede chi ha vinto... bel giochino, ma con costi
veramente troppo alti...
credo che tentero' ancora la strada wave, al limite gestendo solo esercizi
ritmici
levami una curiosita'... come mai sei cosi' esperto ed interessato in un
argomento tuttosommato cosi' -laterale- della programmazione tradizionale?

 argomento tuttosommato cosi' -laterale- della programmazione tradizionale?
Sono una decina d'anni che lavor{av}o in quel campo, ancora mi interessa, ma
adesso solo a livello hobby...
J.

 grazie 1000
Prego, spero d'esserti stato un pochino d'aiuto!
--
Virtual (24, 120, MI)
e-mail: 
vir...@lombardiacom.it

 writes:
A> qualcuno sa come ricavarsi da una forma d'onda l'altezza del suono
A> registrato? (la frequenza) ...
FFT (Fast Fourier Transform) ?
L'implementazione più  veloce che  conosco (si conosca)  è la  FFTW su
www.fftw.org...
A> ... oppure consigliarmi dove poter reperire tale informazione?
Testi sull'elaborazione numerica dei segnali.
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )