IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Classe AudioRecord et FFT


Sujet :

Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Points : 4
    Points
    4
    Par défaut 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

    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

  2. #2
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Points : 4
    Points
    4
    Par défaut 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

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Points : 4
    Points
    4
    Par défaut 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

    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...

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 171
    Points : 218
    Points
    218
    Par défaut
    Bonjour,

    Pour le contenu de ton buffer, il contient les différentes amplitudes de ton signal au cours du temps.
    Donc à une position i donnée de ton buffer tu auras l'amplitude à l'instant t1 et à la position i+1 l'amplitude à l'instant t2+1. C'est la fréquence d'échantillonage que tu as choisie à l'initialisation de ton objet AudioRecord qui déterminera le temps qui sépare t1 et t2

    Short ou byte dépend de l'audioFormat choisi il me semble (à confirmer), 8 ou 16 bits : ce qui correspond respectivement aux tailles des byte et des short.

    Pour le reste, je ne saurais pas trop t'aider, n'ayant que peu de connaissance dans le domaine du traitement du signal.

Discussions similaires

  1. Classe pour la création d'un graphe xy
    Par Bob dans le forum MFC
    Réponses: 24
    Dernier message: 03/12/2009, 17h20
  2. Réponses: 31
    Dernier message: 30/03/2006, 16h57
  3. Algo de calcul de FFT
    Par djlex03 dans le forum Traitement du signal
    Réponses: 15
    Dernier message: 02/08/2002, 17h45
  4. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21
  5. FFT(Fast Fourier Transform)
    Par IngBen dans le forum Traitement du signal
    Réponses: 6
    Dernier message: 23/05/2002, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo