android eqaulizer导致NoClassDefFoundError:android.media.audiofx.Visualizer错误

android eqaulizer导致NoClassDefFoundError:android.media.audiofx.Visualizer错误,android,visualization,equalizer,Android,Visualization,Equalizer,android eqaulizer导致NoClassDefFoundError:android.media.audiofx.Visualizer错误 我正在尝试制作一款带有可视化和均衡器的android MediaPlayer 来自以下教程 我正在尝试的代码是 @TargetApi(Build.VERSION_CODES.GINGERBREAD) public class equalizer extends Activity { /** Called when the activity

android eqaulizer导致NoClassDefFoundError:android.media.audiofx.Visualizer错误

我正在尝试制作一款带有可视化和均衡器的android MediaPlayer

来自以下教程

我正在尝试的代码是

@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public class equalizer extends Activity {
    /** Called when the activity is first created. */

 private static final String TAG = "AudioFxDemo";

    private static final float VISUALIZER_HEIGHT_DIP = 50f;

    private MediaPlayer mp;
    private Visualizer mVisualizer;
    private Equalizer mEqualizer;

    private LinearLayout ll;
    private VideoView vv;
    private VisualizerView mVisualizerView;
    private TextView tv;
    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
        tv=new TextView(this);
        vv=new VideoView(this);
        ll=new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);
        ll.addView(tv);
        setContentView(ll);
        mp=MediaPlayer.create(getApplicationContext(), R.raw.song01);
      //  Log.d(TAG, "MediaPlayer audio session ID: " + mp.getAudioSessionId());

        setupVisualizer();
        setupEqualizer();
        mVisualizer.setEnabled(true);
        mp.setOnCompletionListener(new OnCompletionListener()
        {

   @Override
   public void onCompletion(MediaPlayer arg0) {
    // TODO Auto-generated method stub
    mVisualizer.setEnabled(false);

   }

        });
        mp.start();
        tv.setText("playing audio");
    }
    public void setupEqualizer()
    {
     mEqualizer=new Equalizer(0,mp.getAudioSessionId());
     mEqualizer.setEnabled(true);
     TextView tv=new TextView(this);
     tv.setText("equalizer");
     ll.addView(tv);
     short bands=mEqualizer.getNumberOfBands();
     final short min=mEqualizer.getBandLevelRange()[0];
     final short max=mEqualizer.getBandLevelRange()[1];
     for(short i=0;i<bands;i++)
     {
      final short band=1;
      TextView tv1=new TextView(this);
      tv1.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT));
      tv1.setGravity(Gravity.CENTER_HORIZONTAL);
      tv1.setText((mEqualizer.getCenterFreq(band)/1000)+"hz");
      ll.addView(tv1);
      LinearLayout lv=new LinearLayout(this);
      lv.setOrientation(LinearLayout.HORIZONTAL);
      //TextView tv2=new TextView(this);
      //tv2.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT));
      //tv2.setText((min/100)+"db");
      //TextView tv3=new TextView(this);
      //tv3.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT));
      //tv3.setText((max/100)+"db");
      LinearLayout.LayoutParams param=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
      param.weight=1;
      SeekBar bar=new SeekBar(this);
      bar.setLayoutParams(param);
      bar.setMax(max-min);
      bar.setProgress(mEqualizer.getBandLevel(band));
      bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
     // TODO Auto-generated method stub

    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
     // TODO Auto-generated method stub

    }

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
      boolean fromUser) {
     // TODO Auto-generated method stub
     mEqualizer.setBandLevel(band, (short)(progress+min));

    }
   });
      //lv.addView(tv2);
      //lv.addView(tv3);
      lv.addView(bar);
      ll.addView(lv);
     }

    }
    public void setupVisualizer()
    {
     mVisualizerView=new VisualizerView(this);
     mVisualizerView.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.FILL_PARENT,
                (int)(VISUALIZER_HEIGHT_DIP * getResources().getDisplayMetrics().density)));
     /*vv.getBackground();
     ll.addView(vv);*/
    ll.addView(mVisualizerView);

   mVisualizer=new Visualizer(mp.getAudioSessionId());




    mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
    mVisualizer.setDataCaptureListener(new Visualizer.OnDataCaptureListener() {

  @Override
  public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes,
    int samplingRate) {
   // TODO Auto-generated method stub
   mVisualizerView.updateVisualizer(bytes);

  }

  @Override
  public void onFftDataCapture(Visualizer visualizer, byte[] fft,
    int samplingRate) {
   // TODO Auto-generated method stub

  }
 }, Visualizer.getMaxCaptureRate()/2, true,false);

    }
    protected void onPause() {
        super.onPause();

        if (isFinishing() && mp != null) {
            mVisualizer.release();
            mEqualizer.release();
            mp.release();
            mp = null;
        }
    }
}
class VisualizerView extends View {
    private byte[] mBytes;
    private float[] mPoints;
    private Rect mRect = new Rect();

    private Paint mForePaint = new Paint();

    public VisualizerView(Context context) {
        super(context);
        init();
    }

    private void init() {
        mBytes = null;

        mForePaint.setStrokeWidth(1f);
        mForePaint.setAntiAlias(true);
        mForePaint.setColor(Color.rgb(0, 128, 255));
    }

    public void updateVisualizer(byte[] bytes) {
        mBytes = bytes;
        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if (mBytes == null) {
            return;
        }

        if (mPoints == null || mPoints.length < mBytes.length * 4) {
            mPoints = new float[mBytes.length * 4];
        }

        mRect.set(0, 0, getWidth(), getHeight());

        for (int i = 0; i < mBytes.length - 1; i++) {
            mPoints[i * 4] = mRect.width() * i / (mBytes.length - 1);
            mPoints[i * 4 + 1] = mRect.height() / 2
                    + ((byte) (mBytes[i] + 128)) * (mRect.height() / 2) / 128;
            mPoints[i * 4 + 2] = mRect.width() * (i + 1) / (mBytes.length - 1);
            mPoints[i * 4 + 3] = mRect.height() / 2
                    + ((byte) (mBytes[i + 1] + 128)) * (mRect.height() / 2) / 128;
        }

        canvas.drawLines(mPoints, mForePaint);
    }
}
虚拟化器(int优先级、int音频会话)


@param priority应用程序为控制虚拟机引擎而请求的优先级。由于多个应用程序可以共享同一个引擎,因此此参数指示请求应用程序需要控制效果参数的程度。正常优先级为0,高于正常优先级为正数,低于正常优先级为负数。

您确定这是对问题的回答吗?OP收到一个错误,表示未定义可视化工具类类型。oops!虚拟机/可视化工具!我的错误。
07-09 17:49:41.090: E/AndroidRuntime(425): FATAL EXCEPTION: main
07-09 17:49:41.090: E/AndroidRuntime(425): java.lang.NoClassDefFoundError: android.media.audiofx.Visualizer
07-09 17:49:41.090: E/AndroidRuntime(425):  at com.example.createplaylist.equalizer.setupVisualizer(equalizer.java:143)
07-09 17:49:41.090: E/AndroidRuntime(425):  at com.example.createplaylist.equalizer.onCreate(equalizer.java:55)
07-09 17:49:41.090: E/AndroidRuntime(425):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-09 17:49:41.090: E/AndroidRuntime(425):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
07-09 17:49:41.090: E/AndroidRuntime(425):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-09 17:49:41.090: E/AndroidRuntime(425):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-09 17:49:41.090: E/AndroidRuntime(425):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-09 17:49:41.090: E/AndroidRuntime(425):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-09 17:49:41.090: E/AndroidRuntime(425):  at android.os.Looper.loop(Looper.java:123)
07-09 17:49:41.090: E/AndroidRuntime(425):  at android.app.ActivityThread.main(ActivityThread.java:4627)
07-09 17:49:41.090: E/AndroidRuntime(425):  at java.lang.reflect.Method.invokeNative(Native Method)
07-09 17:49:41.090: E/AndroidRuntime(425):  at java.lang.reflect.Method.invoke(Method.java:521)
07-09 17:49:41.090: E/AndroidRuntime(425):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-09 17:49:41.090: E/AndroidRuntime(425):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-09 17:49:41.090: E/AndroidRuntime(425):  at dalvik.system.NativeStart.main(Native Method)