2017-10-01 1 views
0

Tarsos DSP를 사용하여 마이크에서 입력되는 사운드의 주파수를 결정합니다. 대부분의 장치에서 완벽하게 작동하지만 일부는 오류가 발생합니다.dispatcher.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입니다. 1546 줄 앞에 널 검사를 추가하십시오. if (dispatcher! = null) {dispatcher.addAudioProcessor (p); 새 스레드 (Dispatcher, "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을 초기화하는 데 사용하는 코드입니다. 첫 번째 매개 변수는 샘플 속도이고, 두 번째 매개 변수는 버퍼 크기를 나타내며 마지막 매개 변수는 겹치는 버퍼 크기를 나타냅니다. 따라서 대부분의 장치에서 완벽하게 작동해야합니다. 제공하는 샘플링 속도는 대다수의 장치에서 지원됩니다. 22050 샘플링 속도를 지원하지 않는 장치는 예외/오류를 발생시킵니다.

Android 장치의 지원되는 샘플링 속도와 버퍼 크기를 얻으려면 this answer of mine here을 살펴보십시오.

희망이 있습니다. 감사.

관련 문제