Vediamo. Non ho idea delle classi Java o del tipo di supporto che ha per l'elaborazione del segnale, ma ti darò alcune linee guida. I dettagli particolari dell'implementazione nella lingua, devi capire.
Per eseguire qualsiasi tipo di elaborazione su un file audio sono necessari i dati "grezzi", ovvero un file audio che contiene campioni audio non compressi. Ad esempio, il formato WAV, che normalmente ha campioni nel complemento a 2 bit firmato 2 bit.
Se hai intenzione di utilizzare un computer e di eseguire l'elaborazione offline, potrebbe essere una buona idea trasmettere quel valore a un doppio (che nella maggior parte dei processori oggi significa numero a virgola mobile a 64 bit).
Pertanto avrai un flusso continuo di doppi numeri provenienti dal file. Quindi è necessario definire un modo per gestire i dati continui. Un modo standard, molto utilizzato è quello di utilizzare un buffer circolare (anche se non è in linea, presumo che tu voglia il tuo codice per essere efficiente e caricare l'intero file in memoria poiché un array non è la soluzione migliore). O quello o solo un normale buffer, è la tua scelta. La lunghezza del buffer dovrebbe essere una potenza di 2 (fare per l'efficienza dell'algoritmo Cooley-Tukey radix-2).
Ora devi fare l'effettiva FFT. Questa è semplicemente una moltiplicazione del buffer (che matematicamente è un vettore) per la matrice FFT. Come questa operazione venga effettivamente eseguita in Java, non ne ho idea. In C sarebbe solo passare il puntatore all'array e la lunghezza a una routine FFT che, o restituisce un puntatore alla memoria allocata dinamicamente, o lascia il risultato in un array che gli si passa.
infine, si arriva a una matrice di numeri complessi M (Supponendo che la lunghezza della matrice / buffer / vettore con il segnale sia M). E poi fai quello che vuoi con esso.
Ad esempio, potresti prendere la grandezza di ciascuno dei numeri complessi e trovare il massimo per rilevare dove potrebbe trovarsi la frequenza fondamentale (anche se molto approssimativa).
Extra: tecniche più avanzate da elaborare includono un pre-windowing per evitare perdite, facendo zero-padding per ottenere una maggiore risoluzione sullo spettro con finestre, ecc.
Spero che sia d'aiuto.