Domanda

che sto cercando di fare il rilevamento passo in tempo reale di un utente che cantano, ma sto correndo in un sacco di problemi. Ho provato un sacco di metodi, tra cui FFT ( FFT Problema (restituisce risultati casuali) ) e autocorrelazione ( restituisce i risultati casuali con ingresso microfonico ), ma io non riesco a ottenere tutti i metodi per dare un buon risultato. Qualcuno può suggerire un metodo per il monitoraggio in campo in tempo reale o come migliorare su un metodo che ho già? Io non riesco a trovare / metodi di buono C C ++ per il rilevamento passo in tempo reale.

Grazie,

Niall.

Modifica:. Basta notare, ho controllato che i dati di ingresso microfonico sia corretta, e che quando si utilizza una sinusoide i risultati sono più o meno il passo corretto

Edit: Purtroppo questo è in ritardo, ma al momento, im visualizzare l'autocolleration prendendo i valori di matrice risultati, e ogni indice, e riportando l'indice sull'asse X e il valore sull'asse Y (entrambi sono divise da 100000 o qualcosa del genere, e im utilizzando OpenGL), collegando i dati in un ospite VST e l'utilizzo di plug-in VST non è un'opzione per me. Al momento, sembra proprio come alcuni punti casuali. Sto facendo in modo corretto, o si può per favore mi punto torwards po 'di codice per farlo o aiutarmi a capire come visualizzare il grezzo dati audio e dati di autocorrelazione.

È stato utile?

Soluzione

Facendo un passo indietro ... Per ottenere questo lavoro si deve capire un modo per tracciare passaggi intermedi di questo processo. Quello che stai cercando di fare non è particolarmente difficile, ma è soggetto ad errori e poco pratici. Clipping, finestre, cattiva struttura, aliasing, offset DC, leggendo i canali sbagliati, l'asse strani frequenza FFT, disadattamenti di impedenza, errori dimensioni dei fotogrammi ... chi lo sa. Ma se è possibile tracciare i dati grezzi, e quindi tracciare la FFT, tutto sarà chiaro.

Altri suggerimenti

Ho trovato diverse implementazioni open source di campo in tempo reale monitoraggio

Ci sono anche alcuni passo inseguitori là fuori che potrebbero non essere progettato in tempo reale, ma può essere utilizzabile in questo modo per quanto ne so, e potrebbe anche essere utile come riferimento per confrontare il vostro inseguitore in tempo reale a:

So che questa risposta non sta per rendere tutti felici, ma qui va.

Questa roba è dura, molto dura. In primo luogo andare a leggere come molti tutorial come si può trovare su FFT, autocorrelazione, Wavelets. Anche se sto ancora alle prese con DSP ho avuto alcune intuizioni da quanto segue.

https://www.coursera.org/course/audio il corso non è in esecuzione al momento, ma i video sono ancora disponibili.

http://miracle.otago.ac.nz/tartini/papers/ Philip_McLeod_PhD.pdf tesi sullo sviluppo di un algoritmo di riconoscimento campo.

http://dsp.stackexchange.com un intero sito dedicato alla elaborazione del segnale digitale.

Se come me non ha fatto abbastanza per la matematica di seguire completamente il tutorial non si arrendono come alcuni degli schemi ed esempi ancora mi ha aiutato a capire cosa stava succedendo.

Il prossimo è dati di test e collaudo. Scrivi te è una libreria che genera file di test da utilizzare nel controllo il vostro algoritmo / s.

1) Un super semplice generatore di onda sinusoidale pura. Quindi dici che stai cercando a scrivere YAT (Yet Another Tuner) quindi utilizzare il generatore sinusoidale per creare una serie di file in tutto 440Hz dicono da 420-460Hz in vari incrementi e vedere come sensibile e preciso il codice è. Può risolvere entro 5 Hz, 1 Hz, più fine ancora?

2) Quindi aggiornare il tuo generatore di onde sinusoidali in modo che aggiunge una serie di armoniche più deboli al segnale.

3) Avanti sono variazioni del mondo reale su armoniche. Così, mentre per gli strumenti a corda più si vedrà una serie di armoniche multipli come semplici della frequenza fondamentale F0, per strumenti come clarinetti e flauti a causa del modo in cui l'aria si comporta nella camera le armoniche saranno mancanti o molto debole. E per alcuni strumenti F0 manca, ma può essere determinata dalla distribuzione delle altre armoniche. F0 essendo ciò che l'orecchio umano percepisce come la pece.

4) gettare in alcuni deliberata distorsione spostando le frequenze di picco armoniche su e giù in modo irregolare

Il punto è che se si sta creando i file con i risultati noti poi è più facile verificare che ciò che si sta costruendo in realtà funziona, bug a parte naturalmente.

Ci sono anche una serie di "librerie" là fuori che contengono campioni sonori. https://freesound.org dalla serie Coursera cui sopra. http://theremin.music.uiowa.edu/MIS.html

Avanti essere consapevoli che il microfono non è perfetto e se non si hanno speso migliaia di dollari su di essa avrà una gamma di risposta in frequenza abbastanza variabile. In particolare se si sta lavorando con note basse allora microfoni meno costosi, leggere quelli insiti nel vostro PC o telefono, avere un notevole attenuazione a partire da circa 80-100Hz. Per ragionevolmente buoni esterni si potrebbe scendere a 30-40Hz. Andate a cercare i dati sul microfono.

È inoltre possibile controllare ciò che accade giocando il tono attraverso gli altoparlanti e la registrazione con voi il microfono preferito. Ma, naturalmente, ora stiamo parlando di 2 serie di curve di risposta di frequenza.

Quando si tratta di prestazioni ci sono una serie di librerie liberamente disponibili là fuori, anche se si deve essere consapevoli dei vari modelli di licenza.

Prima di tutto non si arrendono dopo il primo paio di tentativi. Buona fortuna.

Ho avuto un problema simile con ingresso microfono su un progetto che ho fatto qualche anno fa -. Rivelata essere a causa di un offset DC

Assicurati di rimuovere ogni pregiudizio prima di tentare FFT o qualsiasi altro metodo che si sta utilizzando.

E 'anche possibile che si esegue in problemi headroom o di ritaglio.

I grafici sono il modo migliore per diagnosticare la maggior parte dei problemi con l'audio.

Ecco il codice C ++ sorgente per un algoritmo a due stadi insolito che ho ideato che può fare in tempo reale Pitch Detection su polifonica file MP3 mentre in riproduzione su Windows. Questa applicazione gratuita ( PitchScope Player , disponibile sul web) è spesso usato per rilevare le note di una chitarra o un sassofono solista su una registrazione MP3. L'algoritmo è progettato per rilevare il passo più dominante (una nota musicale) in un dato momento nel tempo all'interno di un file musicale MP3. insorgenze Nota sono accuratamente dedotte da un cambiamento significativo nel campo più dominante (una nota musicale) in qualsiasi momento durante la registrazione MP3.

Quando si preme un tasto su un pianoforte, quello che sentiamo non è solo una frequenza di vibrazione del suono, ma un composito di molteplici vibrazioni sonore che si verificano a frequenze diverse matematicamente correlate. Gli elementi di questo composito di vibrazioni a frequenze differenti vengono indicati come armoniche o parziali. Ad esempio, se premiamo il tasto Medio C sul pianoforte, le singole frequenze armoniche del composito inizieranno a 261,6 Hz come la frequenza fondamentale, 523 Hz sarebbe il 2 ° armonica, 785 Hz sarebbe la terza armonica, 1046 Hz sarebbe sia il 4 ° armonica, ecc le armoniche successive sono multipli interi della frequenza fondamentale, 261.6 Hz (es: 2 x 261,6 = 523, 3 x 261,6 = 785, 4 x 261,6 = 1046). Collegato in fondo, è una fotografia del reale armoniche che si verificano nel corso di una registrazione MP3 polifonica di un assolo di chitarra.

Invece di una FFT, uso una DFT modificato trasformata, con spaziatura frequenza logaritmica, per rilevare prima possibile questi armoniche , cercando di frequenze con livelli di picco (vedi lo schema). A causa del modo in cui raccolgo i dati per il mio modificato Log DFT, non ho per applicare una funzione di windowing al segnale, né aggiungo e si sovrappongono. E io ho creato il DFT così i suoi canali di frequenza si trovano logaritmica al fine di allineare direttamente con le frequenze in cui armoniche sono creati dalle note su una chitarra, sassofono, ecc.

Ora essendo in pensione, ho deciso di rilasciare il codice sorgente per il mio motore di rilevamento passo all'interno di un'applicazione dimostrazione gratuita chiamato PitchScope Player . PitchScope Player è disponibile sul web, e si potrebbe scaricare l'eseguibile per Windows per vedere il mio algoritmo al lavoro su un file mp3 di tua scelta. Il link qui sotto per GitHub.com vi condurrà al mio codice sorgente completo dove è possibile visualizzare come rilevo le armoniche con un logaritmica personalizzato DFT trasformare, e quindi cercare parziali (armoniche) le cui frequenze soddisfare il rapporto intero corretto che definisce un ' passo'.

Il mio Pitch algoritmo di rilevamento è in realtà un processo in due fasi: a) In primo luogo il ScalePitch viene rilevato ( 'ScalePitch' dispone di 12 possibili valori di passo: {E, F, F #, G, G #, a, a #, B, C, C #, D, D #}) b) e dopo ScalePitch è determinato, allora il Octave è calcolato esaminando tutte le armoniche per i 4 possibili note Octave-candidati. L'algoritmo è progettato per rilevare il passo più dominante (una nota musicale) in un dato momento nel tempo all'interno di un file MP3 polifonica. Che di solito corrisponde alle note di un assolo strumentale. Chi è interessato a C ++ codice sorgente per il mio algoritmo a due stadi Pitch Detection potrebbe voler iniziare alla funzione Estimate_ScalePitch () nel file SPitchCalc.cpp a GitHub.com. https://github.com/CreativeDetectors/PitchScope_Player

Di seguito è riportato l'immagine di un DFT logaritmica (creato da mio C ++ software) per 3 secondi di un assolo di chitarra su una registrazione mp3 polifonica. Essa mostra come le armoniche appaiono per singole note su una chitarra, durante la riproduzione di un assolo. Per ogni nota su questo logaritmica DFT possiamo vedere le sue armoniche multiple estendentesi verticalmente, perché ogni harmonic avrà lo stesso tempo di larghezza. Dopo l'ottava della nota è determinato, quindi sappiamo che la frequenza della fondamentale.

 entrare descrizione dell'immagine qui

aubio e libreria open source che include diversi metodi di state-of-the-art per il monitoraggio campo.

Date un'occhiata a questa applicazione di esempio:

http://www.codeproject.com/KB/audio-video /SoundCatcher.aspx

Mi rendo conto che l'applicazione è in C # e C ++ bisogno, e mi rendo conto che è .Net / Windows e siete su un mac ... Ma ho pensato la sua implementazione FFT potrebbe essere un punto di riferimento di partenza. Provate a confrontare l'implementazione FFT al suo. (Sua è la versione iterativa, ampiezza della FFT di Cooley-Tukey). Sono simili?

Inoltre, il comportamento "casuale" si sta descrivendo potrebbe essere perché si sta prendendo i dati restituiti dalla scheda audio direttamente senza l'assemblaggio dei valori dal byte-array correttamente. Hai chiesto la scheda audio per campionare i valori a 16 bit, e poi diede un byte-array per memorizzare i valori? In caso affermativo, tenere presente che due byte consecutivi nella matrice restituita costituiscono un campione audio a 16 bit.

codice Java per un rivelatore vero e proprio in tempo reale è disponibile all'indirizzo http://code.google.com / p / freqazoid / .

Funziona abbastanza bene su qualsiasi computer che esegue dopo il 2008, in tempo reale Java. Il progetto è stato fatto cadere e potrebbe essere raccolto da tutte le parti interessate. Contattarmi se volete ulteriori dettagli.

Ho fatto una domanda simile qui:

C / C ++ / Obj-C algoritmo in tempo reale per accertare Nota (non Pitch) da ingresso Vocal

EDIT:

Performous contiene un modulo C ++ per il rilevamento in tempo reale passo

algoritmo Pitch-tracking Yin

Si può adattare qualsiasi cosa, da sintonizzatori dello strumento? Il mio accordatore per chitarra deliziosamente compatta è in grado di rilevare l'intonazione delle corde abbastanza bene. Vedo questo riferimento a un pianoforte sintonizzatore che spiega un algoritmo in una certa misura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top