Ho trascorso molti anni a ricercare il pitch pitch sulla musica polifonica, come rilevare le note di un assolo di chitarra in una registrazione mp3. Ho anche scritto una sezione su Wikipedia che fornisce una breve descrizione del processo (guarda la sottosezione "Rilevazione del passo" nel link sotto).
Quando un singolo tasto viene premuto su un piano, ciò che ascoltiamo non è solo una frequenza di vibrazione del suono, ma un composto di più vibrazioni del suono che si verificano a frequenze matematicamente diverse. Gli elementi di questo composto di vibrazioni a frequenze diverse sono indicati come armoniche o parziali. Ad esempio, se premiamo il tasto C centrale sul piano, le singole frequenze delle armoniche del composito inizieranno a 261,6 Hz come frequenza fondamentale, 523 Hz sarebbe la seconda armonica, 785 Hz sarebbe la terza armonica, 1046 Hz sarebbe essere la 4a 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).
Uso una trasformata logaritmica DFT modificata per rilevare prima le possibili armoniche cercando frequenze con livelli di picco (vedi diagramma sotto). A causa del modo in cui raccolgo i dati per il mio DFT di registro modificato, NON devo applicare una funzione Windowing al segnale, né aggiungere e sovrapporre . E ho creato il DFT in modo che i suoi canali di frequenza siano posizionati logaritmicamente per allinearli direttamente con le frequenze in cui le armoniche sono create dalle note di una chitarra, un sassofono, ecc.
Ora in pensione, ho deciso di rilasciare il codice sorgente per il mio motore di rilevamento del passo all'interno di un'app dimostrativa gratuita chiamata PitchScope Player . PitchScope Player è disponibile sul Web e puoi scaricare il file eseguibile per Windows per vedere il mio algoritmo al lavoro su un file mp3 di tua scelta. Il link seguente a GitHub.com ti condurrà al mio codice sorgente completo dove puoi vedere come rilevo le armoniche con una trasformazione DFT logaritmica personalizzata e quindi cercare i parziali (armoniche) le cui frequenze soddisfano la relazione intera corretta che definisce un ' intonazione'.
Il mio algoritmo di rilevamento del passo è in realtà un processo in due fasi: a) Innanzitutto viene rilevato ScalePitch ('ScalePitch' ha 12 possibili valori di passo: {E, F, F #, G, G #, A, A #, B, C, C #, D , D #}) b) e dopo aver determinato ScalePitch, l' ottava viene calcolata esaminando tutte le armoniche per le 4 possibili note Ottava-Candidato. L'algoritmo è progettato per rilevare il tono più dominante (una nota musicale) in un dato momento nel tempo all'interno di un file polifonico MP3. Questo di solito corrisponde alle note di un assolo strumentale. Coloro che sono interessati al codice sorgente C ++ per il mio algoritmo 2 Stage Pitch Detection potrebbero voler iniziare con la funzione Stima_ScalePitch () all'interno del file SPitchCalc.cpp su GitHub.com.
https://github.com/CreativeDetectors/PitchScope_Player
https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection
Di seguito l'immagine di un DFT Logarithmic (creato dal mio software C ++) per 3 secondi di un assolo di chitarra su una registrazione mp3 polifonica. Mostra come appaiono le armoniche per le singole note di una chitarra, mentre suona un assolo. Per ogni nota su questo DFT logaritmico possiamo vedere le sue armoniche multiple estendersi verticalmente, poiché ciascuna armonica avrà la stessa larghezza temporale. Dopo aver determinato l'ottava della nota, allora conosciamo la frequenza del Fondamentale.
Il diagramma seguente mostra l'algoritmo Octave Detection che ho sviluppato per scegliere la nota Octave-Candidate corretta (vale a dire il fondamentale fondamentale), una volta determinato il ScalePitch per quella nota. Coloro che desiderano vedere quel metodo in C ++ dovrebbero andare alla funzione Calc_Best_Octave_Candidate () all'interno del file chiamato FundCandidCalcer.cpp, che è contenuto nel mio codice sorgente su GitHub.