2017-10-01 5 views
0

Tarsos DSPを使用して、マイクロホンから入力される音の周波数を決定します。大部分のデバイスでは完全に動作しますが、一部のデバイスでエラーが発生します。disparscher.addAudioProcessor(p)のTarsos DSPを使用したNullPointer例外の取得。

エラー:

java.lang.RuntimeException: 
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2695) 
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2769) 
at android.app.ActivityThread.access$900 (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); 
+0

'dispatcher'は単にnullです。 if(dispatcher!= null){dispatcher.addAudioProcessor(p); 1546行目の前にヌルチェックを追加します。 新しいスレッド(ディスパッチャ、 "Audio Dispatcher")。start();} –

+0

ありがとうございます、エラーを削除しました。 しかし、ディスパッチャーがnullとして定義されている理由を知っていますか? –

+0

私の答えをご覧ください。ありがとう。 –

答えて

0

そうすることができますNullPointerExceptionとのない、単純な問題オブジェクトから何かを得る直前にnull値をチェックするだけで簡単に解決できます。したがって、このエラーを取り除くことができます。

if (dispatcher != null) { 
    dispatcher.addAudioProcessor(p); 
    new Thread(dispatcher, "Audio Dispatcher").start(); 
} 

次に、dispatcherがnullになった理由が次のようになりました。そして、私はあなたにもいくつかの洞察力を与えることができます。

AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050, 1024, 0); 

dispatcherを初期化するために使用しているコードです。最初のパラメータはサンプルレートであり、2番目のパラメータはバッファサイズを示し、最後のパラメータは重複するバッファサイズを示します。したがって、あなたが提供しているサンプリングレートは、私が思う大多数のデバイスでサポートされているので、大部分のデバイスで完全に動作するはずです。 22050サンプリングレートをサポートしていないデバイスは、例外/エラーをスローしています。

Androidデバイスのサポートされているサンプリングレートとバッファサイズを取得するには、this answer of mine hereをご覧ください。

希望に役立ちます。ありがとう。

関連する問題