Vamos ver. Não tenho idéia sobre classes Java ou que tipo de suporte ele tem para processamento de sinais, mas darei algumas orientações. Os detalhes específicos da implementação no idioma, você precisa descobrir.
Para fazer qualquer tipo de processamento em um arquivo de áudio, você precisa dos dados "brutos", ou seja, um arquivo de áudio que possui amostras de áudio descompactadas. Por exemplo, o formato WAV, que normalmente possui amostras no complemento de 2 bits com assinatura de 16 bits.
Se você estiver usando um computador e processando offline, pode ser uma boa ideia converter esse valor em um dobro (o que na maioria dos processadores hoje significa número de ponto flutuante de 64 bits).
Portanto, você terá um fluxo contínuo de números duplos provenientes do arquivo. Então você precisa definir uma maneira de lidar com os dados contínuos. Uma maneira padrão e amplamente usada é usar um buffer circular (mesmo se estiver offline, presumo que você queira que seu código seja eficiente e carregar o arquivo inteiro na memória como uma matriz não é a melhor solução). Ou isso ou apenas um buffer normal, é sua escolha. O comprimento do buffer deve ser uma potência de 2 (faça com a eficiência do algoritmo Cooley-Tukey radix-2).
Agora você precisa fazer a FFT real. Isso é apenas uma multiplicação do buffer (que matematicamente é um vetor) pela matriz FFT. Como essa operação é realmente executada em Java, não faço ideia. Em C, seria apenas passar o ponteiro para a matriz e o comprimento para uma rotina FFT que, ou retorna um ponteiro para a memória alocada dinamicamente, ou deixa o resultado em uma matriz que você passa para ela.
finalmente, você chega a uma matriz de números complexos M (assumindo que o comprimento da matriz / buffer / vetor com o sinal seja M). E então você faz o que quiser com ele.
Por exemplo, você pode medir a magnitude de cada um dos números complexos e encontrar o máximo para detectar onde a frequência fundamental pode estar (embora muito aproximada).
Extras: técnicas mais avançadas para processar incluiriam um pré-janelamento para evitar vazamentos, preenchimento zero para obter mais resolução no espectro da janela, etc.
Espero que ajude.