2012-07-06 3 views
6

Я начал программировать для Android 3 дня назад, и сегодня мне хотелось сделать что-то более сложное, используя некоторые классы из android Api. Я нахожу класс Visualizer и сначала attemp у меня была проблема. Я прочитал много сообщений на разных форумах людей, у которых были те же проблемы: невозможно инициализировать движок визуализатора.Android: «невозможно инициализировать движок визуализатора»

Я добавил requierd использует-разрешение на 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> 

Далее я попытался решить эту проблему, но я не могу. Это мой полный код:

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; 
    } 


} 

И последняя проблема в том, что он бросить IllegalStateException, когда я хочу, чтобы выполнить метод mPlayer.prepare().

это полные LogCat сообщения:

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. 

ответ

1

Рабочий пример из 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); 
     } 
    }); 
    } 

, а также проверить AudioFxDemo на сайте для разработчиков Android и.

+0

должен увидеть http://stackoverflow.com/a/28427213/3496570 – Nepster