Java.lang.RuntimeException: Unable to initialize Visualizer engine, error: -4

When I run the application on API 16, I get below error.

java.lang.RuntimeException: Unable to start activity ComponentInfo{}: java.lang.RuntimeException: Cannot initialize Visualizer engine, error: -4 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) at android.app.ActivityThread.access$600(ActivityThread.java:130) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.RuntimeException: Cannot initialize Visualizer engine, error: -4 at android.media.audiofx.Visualizer.<init>(Visualizer.java:199) at xyz.activity.AudioPreviewActivity.setupVisualizerFxAndUI(AudioPreviewActivity.java:83) at xyz.activity.AudioPreviewActivity.initAudio(AudioPreviewActivity.java:60) at xyz.activity.AudioPreviewActivity.onCreate(AudioPreviewActivity.java:40) at android.app.Activity.performCreate(Activity.java:5008) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) at android.app.ActivityThread.access$600(ActivityThread.java:130) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) 

The error string is

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

the code

 private void setupVisualizerFxAndUI() { mMediaPlayer = MediaPlayer.create(this, Uri.parse(filePath)); mMediaPlayer .setOnCompletionListener(new MediaPlayer.OnCompletionListener() { public void onCompletion(MediaPlayer mediaPlayer) { mVisualizer.setEnabled(false); } }); mMediaPlayer.start(); mMediaPlayer.setLooping(true); mVisualizer = new Visualizer(mMediaPlayer.getAudioSessionId()); mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]); mVisualizer.setDataCaptureListener( new Visualizer.OnDataCaptureListener() { public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) { mVisualizerView.updateVisualizer(bytes); } public void onFftDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) { } }, Visualizer.getMaxCaptureRate() / 2, true, false); } 

I already added below permissions to the manifest -

 <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> 
+7
android media-player runtimeexception visualizer
source share
3 answers

-4 So you gave a bad parameter. Although getAudioSessionId can be called in any state, did you call prepare and start on the MediaPlayer that you use to make sure it has a good state before trying to render?

You may also need to add the permission android.permission.RECORD_AUDIO when using Visualiser in this way and android.permission.INTERNET if the sound source is not local

+3
source share

Add runtime resolution for api 23 and above.

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { int hasAudioPermission = checkSelfPermission(Manifest.permission.RECORD_AUDIO); int hasInternetPermission = checkSelfPermission(Manifest.permission.INTERNET); List<String> permissions = new ArrayList<>(); if (hasAudioPermission != PackageManager.PERMISSION_GRANTED) { permissions.add(Manifest.permission.RECORD_AUDIO); } if (hasInternetPermission != PackageManager.PERMISSION_GRANTED) { permissions.add(Manifest.permission.INTERNET); } if (!permissions.isEmpty()) { requestPermissions(permissions.toArray(new String[permissions.size()]), PERMISSION); } } 
+2
source share

You probably have something bad in the configuration in Visualizer, double check the contents in your setupVisualizer method. See a similar problem .

+1
source share

All Articles