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