Aller au contenu

probleme pour recuperer la frequence d'un son


runit

Recommended Posts

Bonjour tout le monde

je souhaiterai recuperer la frequence d'un son pour que par exemple quand je joue un son a 440 Hz il m'affiche "OK"

J'ai trouver un fonction qui permet de recuperer les frequences d'un son mais je ne comp^ren pas comment l'utiliser.

Le lien de la doc :%29"]ici (c'est la fonction "getFft")

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

Voici un test unitaire trouvé sur internet, j'espère que cela pourra t'aider à comprendre son fonctionnement :

//Test case 2.0: test capture in polling mode
   @LargeTest
   public void test2_0PollingCapture() throws Exception {
       boolean result = false;
       String msg = "test2_0PollingCapture()";
       AudioEffect vc = null;
       MediaPlayer mp = null;
       AudioManager am = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
       int volume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
       am.setStreamVolume(AudioManager.STREAM_MUSIC,
                          am.getStreamMaxVolume(AudioManager.STREAM_MUSIC),
                          0);

       try {
           // creating a volume controller on output mix ensures that ro.audio.silent mutes
           // audio after the effects and not before
           vc = new AudioEffect(
                   AudioEffect.EFFECT_TYPE_NULL,
                   UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b"),
                     0,
                     0);
           vc.setEnabled(true);

           mp = new MediaPlayer();
           mp.setDataSource(MediaNames.SINE_200_1000);
           mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
           getVisualizer(mp.getAudioSessionId());
           mVisualizer.setEnabled(true);
           // check capture on silence
           byte[] data = new byte[mVisualizer.getCaptureSize()];
           mVisualizer.getWaveForm(data);
           int energy = computeEnergy(data, true);
           assertEquals(msg +": getWaveForm reports energy for silence",
                   0, energy);
           mVisualizer.getFft(data);
           energy = computeEnergy(data, false);
           assertEquals(msg +": getFft reports energy for silence",
                   0, energy);
           mp.prepare();
           mp.start();
           Thread.sleep(500);
           // check capture on sound
           mVisualizer.getWaveForm(data);
           energy = computeEnergy(data, true);
           assertTrue(msg +": getWaveForm reads insufficient level",
                   energy > 0);
           mVisualizer.getFft(data);
           energy = computeEnergy(data, false);
           assertTrue(msg +": getFft reads insufficient level",
                   energy > 0);
           result = true;
       } catch (IllegalArgumentException e) {
           msg = msg.concat(": Bad parameter value");
           loge(msg, "Bad parameter value");
       } catch (UnsupportedOperationException e) {
           msg = msg.concat(": get parameter() rejected");
           loge(msg, "get parameter() rejected");
       } catch (IllegalStateException e) {
           msg = msg.concat("get parameter() called in wrong state");
           loge(msg, "get parameter() called in wrong state");
       } catch (InterruptedException e) {
           loge(msg, "sleep() interrupted");
       }
       finally {
           releaseVisualizer();
           if (mp != null) {
               mp.release();
           }
           if (vc != null) {
               vc.release();
           }
           am.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0);
       }
       assertTrue(msg, result);
   }

 //-----------------------------------------------------------------
   // private methods
   //----------------------------------

   private int computeEnergy(byte[] data, boolean unsigned) {
       int energy = 0;
       if (data.length != 0) {
           for (int i = 0; i < data.length; i++) {
               int tmp;
               // convert from unsigned 8 bit to signed 16 bit
               if (unsigned) {
                   tmp = ((int)data[i] & 0xFF) - 128;
               } else {
                   tmp = (int)data[i];
               }
               energy += tmp*tmp;
           }
           energy /= data.length;
       }
       return energy;
   }

   private void getVisualizer(int session) {
        if (mVisualizer == null || session != mSession) {
            if (session != mSession && mVisualizer != null) {
                mVisualizer.release();
                mVisualizer = null;
            }
            try {
               mVisualizer = new Visualizer(session);
               mSession = session;
           } catch (IllegalArgumentException e) {
               Log.e(TAG, "getVisualizer() Visualizer not found exception: "+e);
           } catch (UnsupportedOperationException e) {
               Log.e(TAG, "getVisualizer() Effect library not loaded exception: "+e);
           }
        }
        assertNotNull("could not create mVisualizer", mVisualizer);
   }




Cordialement

Lien vers le commentaire
Partager sur d’autres sites

Merci pour le code je vais regarder sa de plus près.

EDIT: en effet je comprend mieux comment cela fonctionne mais voila j'ai un probleme ^^

Je ne comprend pas pourquoi dans eclipse il me dit de creer une class audio effect

et que la fonction getAudioSession n'est pas defini pour la methode media player.

MErci d'avance

RE-EDIT:

Pourrait tu me dire ou tu a trouver le code? stp.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...