Classe AudioRecord et FFT
Bonsoir à tous.
Je suis en train d'essayer de faire une application Android qui écouterait le son ambiant, l'analyserait et effectuerait des actions en fonction du son entendu. J'ai pensé faire la FFT du son pour pouvoir l'analyser finement.
J'avais commencé au début avec la classe MediaRecorder, mais ça m'enregistre le bazar dans un fichier et (surtout) ça encode l'audio. Sauf que pour faire une FFT dessus, il faut que le son soit "pur". Du coup, je me suis penché sur AudioRecord qui me permet d'enregistrer le son dans un buffer.
J'ai également trouvé des sources pour travailler avec des complexes (http://introcs.cs.princeton.edu/java...plex.java.html) et pour faire la FFT d'un nombre complexe (http://introcs.cs.princeton.edu/java.../FFT.java.html).
Tout ça c'est bien beau, mais la méthode fft() de la classe FFT me fait la FFT d'un complexe. Sauf que dans mon buffer, j'ai des short (ou des bytes, moi j'ai choisi des short).
Pour faire bref : je crois que je n'ai rien pigé à tout ce que j'ai lu :lol:
Qu'est-ce que mon buffer stocke ? L'amplitude du son à un instant donné ? Autre chose ?
Et pourquoi prendre un short ou un byte (pour le buffer) ?
Si vous pouviez m'éclairer de vos lumières, ça m'aiderait pas mal :ccool:
Classe AudioRecord et FFT
Je précise également que j'ai cherché un looooong moment avant de me résoudre à déranger plus fort que moi. Je suis d'ailleurs tombé sur un fil de ce forum (http://www.developpez.net/forums/d98...ation-fourier/) qui m'a un peu inspiré, mais le gros problème auquel je suis confronté, c'est la compréhension du buffer. Je ne sais pas ce qu'il contient.
D'autant plus que j'y stocke des short mais la FFT me demande des complexes...
Bref, mon esprit est aussi embué qu'une vitre de sauna :(
Classe AudioRecord et FFT
Bon je constate que pas grand monde ne s'intéresse à mon problème, mais en fait c'est bien parce que du coup j'ai réussi à piger des trucs tout seul :ccool:
Bon c'est pas non plus la folie mais voilà ce que j'ai trouvé : le tableau qui me sert de buffer, je sais toujours pas ce qu'il contient. En revanche, il semblerait qu'il faille que je transforme ce tableau de short en tableau de complexes tout simplement en prenant le short pour la partie réelle du complexe et 0 pour la partie imaginaire (pourquoi ? J'en sais rien :? - tout ce que je sais, c'est que j'ai besoin de complexes pour la FFT).
Du coup j'ai utilisé la classe Complex.java (que j'ai donné dans mon premier post) pour faire ça, sauf que j'ai une belle NullPointerException dans la méthode times() à la ligne du calcul du réel. J'ai pas réussi à trouver pourquoi, et j'ai pas non plus cherché d'autre classe qui fasse la même chose pour voir. Je vais en chercher une autre dès que possible.
Si quelqu'un est toujours par là pour me répondre, est-ce que je ne fais pas fausse route au moment de créer mon complexe ? Parce que je ne sais pas vraiment pourquoi il faut mettre 0 à l'imaginaire...