gauravk95 / audio-visualizer-android

🎵 [Android Library] A light-weight and easy-to-use Audio Visualizer for Android.
Apache License 2.0
844 stars 127 forks source link

HIFI index out of bounds error #9

Open goodrickstar opened 5 years ago

goodrickstar commented 5 years ago

Trying to use this library to implement the HiFiVisualizer. Everything works well with the CirlcleLineVisiualizer. Simply switching to HiFi causes an index out of bounds error. Code below..

<com.gauravk.audiovisualizer.visualizer.HiFiVisualizer xmlns:custom="http://schemas.android.com/apk/res-auto"
            android:id="@+id/blast"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginEnd="16dp"
            android:layout_marginBottom="16dp"
            custom:avColor="@color/dark_blue"
            custom:avDensity="0.8"
            custom:avSpeed="normal"
            custom:avType="outline"
            custom:avWidth="0dp"
            custom:layout_constraintBottom_toTopOf="@id/gpsLocation"
            custom:layout_constraintEnd_toEndOf="parent"
            custom:layout_constraintStart_toStartOf="parent"
            custom:layout_constraintTop_toBottomOf="@id/quecount" />
    </android.support.constraint.ConstraintLayout>

private HiFiVisualizer visualizer; visualizer = findViewById(R.id.blast);

MediaPlayer is in a background service and passes sessionId to MainActivity through Interface like so

 player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        if (MI != null) MI.setSession(mp.getAudioSessionId());
                        if (!mute) {
                            gainFocus();
                            mp.setVolume(volumeA, volumeA);
                        }
                        mp.start();
                        updateDisplay();
                    }
                });
   @Override
    public void setSession(int id) {
           if (id != -1) visualizer.setAudioSessionId(id);
    }

Like I said before, everything works great when using CircleLine or Blast. Changing the XML from CirlcleLine to HiFi along with the global variable in the MainActivity to match compliles fine, runs, and causes the following crash.

E: FATAL EXCEPTION: main
    Process: com.cb3g.channel19, PID: 27644
    java.lang.ArrayIndexOutOfBoundsException: length=192; index=-1
        at com.gauravk.audiovisualizer.visualizer.HiFiVisualizer.onDraw(HiFiVisualizer.java:102)
        at android.view.View.draw(View.java:19192)
        at android.view.View.updateDisplayListIfDirty(View.java:18142)
        at android.view.View.draw(View.java:18920)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4236)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022)
        at android.support.constraint.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1873)
        at android.view.View.draw(View.java:19195)
        at android.view.View.updateDisplayListIfDirty(View.java:18142)
        at android.view.View.draw(View.java:18920)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4236)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022)
        at android.support.constraint.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1873)
        at android.view.View.updateDisplayListIfDirty(View.java:18133)
        at android.view.View.draw(View.java:18920)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4236)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022)
        at android.view.View.updateDisplayListIfDirty(View.java:18133)
        at android.view.View.draw(View.java:18920)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4236)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022)
        at android.view.View.updateDisplayListIfDirty(View.java:18133)
        at android.view.View.draw(View.java:18920)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4236)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022)
        at android.view.View.updateDisplayListIfDirty(View.java:18133)
        at android.view.View.draw(View.java:18920)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4236)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022)
        at android.view.View.updateDisplayListIfDirty(View.java:18133)
        at android.view.View.draw(View.java:18920)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4236)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4022)
        at android.view.View.updateDisplayListIfDirty(View.java:18133)
        at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:669)
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:675)
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:783)
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:2992)
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2806)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2359)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1392)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6752)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
        at android.view.Choreographer.doCallbacks(Choreographer.java:723)
        at android.view.Choreographer.doFrame(Choreographer.java:658)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Am I missing something here? The audio format is M4A (MPEG_4_Audio)

kenchoong commented 4 years ago

@wangfengye Hifi is great, but seems like it having error, sir can you look at it? 可以看一看吗大哥?

wangfengye commented 4 years ago

你改下HiFiVisualizer 的第100行 int lastPoint = i*mpoints/360 -1; if(lastPoint<0) lastPoint =0

---Original--- From: "Ken choong"<notifications@github.com> Date: Wed, Aug 26, 2020 14:06 PM To: "gauravk95/audio-visualizer-android"<audio-visualizer-android@noreply.github.com>; Cc: "maple"<1040441325@qq.com>;"Mention"<mention@noreply.github.com>; Subject: Re: [gauravk95/audio-visualizer-android] HIFI index out of bounds error (#9)

@wangfengye Hifi is great, but seems like it having error, sir can you look at it? 可以看一看吗大哥?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.