2017-02-21 10 views
1

このコードは以前私のデバイスで正常に動作していましたが、今は動作しません。デバイスはSamsung SM-G900P(Android 6.0.2、API23)です。Watson STT java-sdkを使用して音声録音を開始すると、Androidアプリがクラッシュする

私のアプリの他の部分には新しいバージョンのOkHttpライブラリが必要なので、私はスピーチからテキスト、コア、およびテキスト読み上げライブラリを自分で構築しなければなりませんでした。私はPR#557から構築しました。

Androidスタジオで実行しているときに表示されるエラーです。あなたは音声を録音するための適切な権限を持っていないよう

E/AudioRecord: AudioFlinger could not create record track, status: -1 
E/AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -1. 
E/android.media.AudioRecord: Error code -20 when initializing native AudioRecord object. 

E/AndroidRuntime: FATAL EXCEPTION: Thread-5952 
       java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord. 
        at android.media.AudioRecord.startRecording(AudioRecord.java:943) 
        at com.ibm.watson.developer_cloud.android.library.audio.MicrophoneCaptureThread.run(MicrophoneCaptureThread.java:63) 

いくつかのコード...

private void startListening() { 

    if (listening != true) { 
     capture = new MicrophoneInputStream(true); 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        speechService.recognizeUsingWebSocket(capture, getRecognizeOptions(), new MicrophoneRecognizeDelegate()); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }).start(); 
     listening = true; 
    } else { 
     try { 
      capture.close(); 
      listening = false; 
      //recordInstance.release(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
} 

private class MicrophoneRecognizeDelegate implements RecognizeCallback { 

    @Override 
    public void onTranscription(SpeechResults speechResults) { 
     System.out.println(speechResults); 
     String text = speechResults.getResults().get(0).getAlternatives().get(0).getTranscript(); 
     showMicText(text); 
     if (speechResults.getResults().get(0).isFinal()) { 
      try { 
       capture.close(); 
       listening = false; 
       send(speechResults.getResults().get(0).getAlternatives().get(0).getTranscript()); 
      } catch (Exception e) { 
       System.out.println("error when closing capture"); 
       e.printStackTrace(); 
      } 
     } 

    } 

    @Override public void onConnected() { 
     System.out.println("mic connected"); 
    } 

    @Override public void onError(Exception e) { 
     e.printStackTrace(); 
    } 

    @Override public void onDisconnected() { 
     System.out.println("mic disconnected"); 
    } 
} 

おかげ

答えて

3

は、私には見えます。典型的にはそれはAudioFlinger could not create record track, status: -1が示すものです。 API 23から、アプリ実行時に特定の権限をリクエストする必要があります。オーディオ録音はそのセット内に収まります。チェックアウトhttps://developer.android.com/training/permissions/requesting.html

+0

ありがとうございます。私は、アプリケーションに追加されたアクセス許可を持っていたが、ユーザーに許可を求めるためにプロンプ​​トが表示されていないため、マイクのアクセス権がオフになっていた。私はマイクのプロンプトをコード化する必要があると思うが、私はそれが自動的にプロンプ​​トを出すと思った。 – troyd

関連する問題