2012-07-06 28 views
6

Tôi đã bắt đầu lập trình cho Android 3 ngày trước và hôm nay tôi muốn làm điều gì đó khó khăn hơn bằng cách sử dụng một số lớp học từ Api android. Tôi tìm thấy lớp Visualizer và lúc đầu tiên attemp tôi đã có một vấn đề. Tôi đọc nhiều bài trên các diễn đàn khác nhau những người có cùng một vấn đề: không thể khởi tạo công cụ visualizer.Android: "không thể khởi tạo công cụ visualizer"

tôi thêm requierd sử dụng-phép một 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> 

Tiếp theo, tôi đã cố gắng để khắc phục vấn đề này nhưng tôi không thể. Đây là mã đầy đủ của tôi:

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


} 

Và cuối cùng vấn đề là nó ném IllegalStateException khi tôi muốn thực hiện phương pháp mPlayer.prepare().

này là đầy đủ các thông điệp 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. 

Trả lời

1

dụ Làm việc từ 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); 
     } 
    }); 
    } 

và cũng kiểm tra AudioFxDemo trong trang web nhà phát triển Android và.

+0

phải xem http://stackoverflow.com/a/28427213/3496570 – Nepster

Các vấn đề liên quan