runit Posté(e) 8 janvier 2011 Share Posté(e) 8 janvier 2011 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 More sharing options...
Naskel Posté(e) 17 janvier 2011 Share Posté(e) 17 janvier 2011 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 More sharing options...
runit Posté(e) 19 janvier 2011 Auteur Share Posté(e) 19 janvier 2011 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 More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.