Voyons voir. Je n'ai aucune idée des classes Java ni du type de support qu'il a pour le traitement du signal, mais je vais vous donner quelques directives. Les détails particuliers de la mise en œuvre dans la langue, vous devez comprendre.
Pour effectuer tout type de traitement sur un fichier audio, vous avez besoin des données "brutes", c'est-à-dire un fichier audio contenant des échantillons audio non compressés. Par exemple, le format WAV, qui comporte normalement des échantillons en complément à 2 bits signé 16 bits.
Si vous allez utiliser un ordinateur et effectuer un traitement hors ligne, il peut être judicieux de convertir cette valeur en double (ce qui, dans la plupart des processeurs, signifie aujourd'hui un nombre à virgule flottante 64 bits).
Par conséquent, vous aurez un flux continu de nombres doubles provenant du fichier. Ensuite, vous devez définir un moyen de gérer les données continues. Un moyen standard et très largement utilisé consiste à utiliser un tampon circulaire (même s'il est hors ligne, je suppose que vous voulez que votre code soit efficace, et charger le fichier entier en mémoire sous forme de tableau n'est pas la meilleure solution). Soit cela, soit juste un tampon normal, est votre choix. La longueur du tampon doit être une puissance de 2 (Do à l'efficacité de l'algorithme Cooley-Tukey radix-2).
Vous devez maintenant effectuer la FFT réelle. Il s'agit simplement d'une multiplication du tampon (qui est mathématiquement un vecteur) par la matrice FFT. Comment cette opération est réellement effectuée en Java, aucune idée. En C, ce serait juste de passer le pointeur au tableau et la longueur à une routine FFT qui, soit retourne un pointeur à la mémoire allouée de manière dinamique, soit laisse le résultat dans un tableau que vous lui passez.
enfin, vous arrivez à un tableau de M nombres complexes (en supposant que la longueur du tableau / tampon / vecteur avec le signal est M). Et puis vous faites ce que vous voulez avec.
Par exemple, vous pourriez prendre la magnitude de chacun des nombres complexes et trouver le maximum pour détecter où la fréquence fondamentale pourrait être (très approximative cependant).
Extras: Des techniques plus avancées à traiter incluent un pré fenêtrage pour éviter les fuites, un remplissage nul pour obtenir plus de résolution sur le spectre fenêtré, etc.
J'espère que cela aide.