2012-07-06 14 views
6

Ich habe vor 3 Tagen mit der Programmierung für Android begonnen, und heute wollte ich etwas schwieriger mit einigen Klassen von Android Api machen. Ich finde Klasse Visualizer und beim ersten Versuch hatte ich ein Problem. Ich habe viele Beiträge in verschiedenen Foren gelesen, die die gleichen Probleme hatten: Visualizer-Engine kann nicht initialisiert werden.Android: "Visualizer Engine kann nicht initialisiert werden"

Ich habe requierd verwendet-Erlaubnis zu einer Manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="org.program.fourier" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> 

    <uses-sdk 
     android:minSdkVersion="10" 
     android:targetSdkVersion="15" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <activity 
      android:name=".mainFFT" 
      android:label="@string/title_activity_main_fft" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Als nächstes habe ich versucht, dieses Problem zu beheben, aber ich kann nicht. Das ist mein voller Code:

package org.program.fourier; 

import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.support.v4.app.NavUtils; 

import android.media.audiofx.Visualizer; 
import android.media.audiofx.Visualizer.OnDataCaptureListener; 
import android.media.MediaPlayer; 
import android.media.AudioManager; 

public class mainFFT extends Activity { 

    MediaPlayer mPlayer; 
    Visualizer vis; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_fft); 

     mPlayer = MediaPlayer.create(this, R.raw.sight); 
     mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

     try 
     { 
      mPlayer.prepare(); 
     } 
     catch(Exception ex){ Log.w("ExCePtIoN", ex+""); } 

     try 
     { 
      vis = new Visualizer(mPlayer.getAudioSessionId()); 
     //vis.setDataCaptureListener(this, 20, true, true); 
     } 
     catch(Exception ex){ Log.w("ExCePtIoN", ex+""); } 


     mPlayer.start(); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main_fft, menu); 
     return true; 
    } 


} 

Und letztes Problem ist, dass es Illegal werfen, wenn ich will mPlayer.prepare() -Methode auszuführen.

dies ist voll LogCat Nachrichten:

07-06 18:33:17.141: E/Trace(833): error opening trace file: No such file or directory (2) 
07-06 18:33:17.591: E/MediaPlayer(833): prepareAsync called in state 8 
07-06 18:33:17.591: W/ExCePtIoN(833): java.lang.IllegalStateException 
07-06 18:33:17.621: E/AudioEffect(833): set(): AudioFlinger could not create effect, status: -22 
07-06 18:33:17.621: E/visualizers-JNI(833): Visualizer initCheck failed -4 
07-06 18:33:17.621: E/Visualizer-JAVA(833): Error code -4 when initializing Visualizer. 
07-06 18:33:17.621: W/ExCePtIoN(833): java.lang.RuntimeException: Cannot initialize Visualizer engine, error: -4 
07-06 18:33:18.482: I/Choreographer(833): Skipped 337 frames! The application may be doing too much work on its main thread. 
07-06 18:33:18.551: D/gralloc_goldfish(833): Emulator without GPU emulation detected. 

Antwort

1

Arbeitsbeispiel von Github

public void link(MediaPlayer player) 
    { 
    if(player == null) 
    { 
     throw new NullPointerException("Cannot link to null MediaPlayer"); 
    } 

    // Create the Visualizer object and attach it to our media player. 
    mVisualizer = new Visualizer(player.getAudioSessionId()); 
    mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]); 

    // Pass through Visualizer data to VisualizerView 
    Visualizer.OnDataCaptureListener captureListener = new Visualizer.OnDataCaptureListener() 
    { 
     @Override 
     public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, 
      int samplingRate) 
     { 
     updateVisualizer(bytes); 
     } 

     @Override 
     public void onFftDataCapture(Visualizer visualizer, byte[] bytes, 
      int samplingRate) 
     { 
     updateVisualizerFFT(bytes); 
     } 
    }; 

    mVisualizer.setDataCaptureListener(captureListener, 
     Visualizer.getMaxCaptureRate()/2, true, true); 

    // Enabled Visualizer and disable when we're done with the stream 
    mVisualizer.setEnabled(true); 
    player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
    { 
     @Override 
     public void onCompletion(MediaPlayer mediaPlayer) 
     { 
     mVisualizer.setEnabled(false); 
     } 
    }); 
    } 

und auch AudioFxDemo in Android-Entwickler-Website und überprüfen.

+0

muss http://stackoverflow.com/a/28427213/3496570 sehen – Nepster