0

android eqaulizer causes NoClassDefFoundError: android.media.audiofx.Visualizer error

i am trying to make an android MediaPlayer with Visualization And Equalizer

from the following tutorial

the code that i am trying is

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

but it causes the above error

here is the log cat

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)
1234567
  • 2,226
  • 4
  • 24
  • 69

1 Answers1

-1

Virtualizer(int priority, int audioSession)

@param priority the priority level requested by the application for controlling the Virtualizer engine. As the same engine can be shared by several applications, this parameter indicates how much the requesting application needs control of effect parameters. The normal priority is 0, above normal is a positive number, below normal a negative number.

Heina
  • 1