在 dispatcher.addAudioProcessor(p) 中使用 Tarsos DSP 获取 NullPointer 异常;
Getting NullPointer exception using Tarsos DSP in dispatcher.addAudioProcessor(p);
我使用 Tarsos DSP 来确定从麦克风输入的声音的频率。它在大多数设备上都能完美运行,但其中一些会出错。
错误:
java.lang.RuntimeException:
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2695)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2769)
at android.app.ActivityThread.access0 (ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1430)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:135)
at android.app.ActivityThread.main (ActivityThread.java:5910)
at java.lang.reflect.Method.invoke (Native Method)
at java.lang.reflect.Method.invoke (Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1200)
Caused by: java.lang.NullPointerException:
at com.example.denissobolevsky.mmm.MainActivity.onCreate (MainActivity.java:1546)
at android.app.Activity.performCreate (Activity.java:6178)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2648)
代码(第 1545-1547 行):
AudioProcessor p = new PitchProcessor(PitchProcessor.PitchEstimationAlgorithm.FFT_YIN, 22050, 1024, pdh);
dispatcher.addAudioProcessor(p);
new Thread(dispatcher, "Audio Dispatcher").start();
调度员是:
AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050, 1024, 0);
所以这不仅仅是 NullPointerException
的问题,可以通过在从对象中获取某些内容之前检查空值轻松解决。因此,通过简单地执行此操作,您可以摆脱此错误。
if (dispatcher != null) {
dispatcher.addAudioProcessor(p);
new Thread(dispatcher, "Audio Dispatcher").start();
}
现在下一个问题是为什么 dispatcher
变为空。因此我也可以给你一些见解。
AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050, 1024, 0);
这是您用来初始化 dispatcher
的代码。第一个参数是采样率,然后第二个参数表示缓冲区大小,最后一个参数表示重叠缓冲区大小。因此它应该在大多数设备中都能完美运行,因为我认为大多数设备都支持您提供的采样率。不支持22050采样率的设备抛出exceptions/errors。
要获得 Android 设备支持的采样率和缓冲区大小,您可以查看 this answer of mine here。
希望对您有所帮助。谢谢。
我使用 Tarsos DSP 来确定从麦克风输入的声音的频率。它在大多数设备上都能完美运行,但其中一些会出错。
错误:
java.lang.RuntimeException:
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2695)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2769)
at android.app.ActivityThread.access0 (ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1430)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:135)
at android.app.ActivityThread.main (ActivityThread.java:5910)
at java.lang.reflect.Method.invoke (Native Method)
at java.lang.reflect.Method.invoke (Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1200)
Caused by: java.lang.NullPointerException:
at com.example.denissobolevsky.mmm.MainActivity.onCreate (MainActivity.java:1546)
at android.app.Activity.performCreate (Activity.java:6178)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2648)
代码(第 1545-1547 行):
AudioProcessor p = new PitchProcessor(PitchProcessor.PitchEstimationAlgorithm.FFT_YIN, 22050, 1024, pdh);
dispatcher.addAudioProcessor(p);
new Thread(dispatcher, "Audio Dispatcher").start();
调度员是:
AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050, 1024, 0);
所以这不仅仅是 NullPointerException
的问题,可以通过在从对象中获取某些内容之前检查空值轻松解决。因此,通过简单地执行此操作,您可以摆脱此错误。
if (dispatcher != null) {
dispatcher.addAudioProcessor(p);
new Thread(dispatcher, "Audio Dispatcher").start();
}
现在下一个问题是为什么 dispatcher
变为空。因此我也可以给你一些见解。
AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050, 1024, 0);
这是您用来初始化 dispatcher
的代码。第一个参数是采样率,然后第二个参数表示缓冲区大小,最后一个参数表示重叠缓冲区大小。因此它应该在大多数设备中都能完美运行,因为我认为大多数设备都支持您提供的采样率。不支持22050采样率的设备抛出exceptions/errors。
要获得 Android 设备支持的采样率和缓冲区大小,您可以查看 this answer of mine here。
希望对您有所帮助。谢谢。