watson-developer-cloud / android-sdk

:high_brightness: Android SDK to use the IBM Watson services.
http://watson-developer-cloud.github.io/android-sdk/
Apache License 2.0
146 stars 94 forks source link

FATAL EXCEPTION: AudioToWebSocketThread #94

Open ZY6666 opened 4 years ago

ZY6666 commented 4 years ago

Sorry for my poor English, I will make it simple I successfully ran the example,But when I set inactivityTimeout to 1 second, I want to automatically end the connection or catch error code, but the application crashes heres the code:

private RecognizeOptions getRecognizeOptions(InputStream captureStream) {
    return new RecognizeOptions.Builder()
            .audio(captureStream)
            .contentType(ContentType.OPUS.toString())
            .model("ja-JP_BroadbandModel")
            .interimResults(true)
            .inactivityTimeout(1)
            .build();
  }

and crash log:

E/AndroidRuntime: FATAL EXCEPTION: AudioToWebSocketThread
    Process: com.ibm.watson.developer_cloud.android.myapplication, PID: 3228
    java.lang.IllegalMonitorStateException
        at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:156)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1291)
        at java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:466)
        at com.ibm.watson.developer_cloud.android.library.audio.MicrophoneCaptureThread.end(MicrophoneCaptureThread.java:138)
        at com.ibm.watson.developer_cloud.android.library.audio.MicrophoneInputStream.close(MicrophoneInputStream.java:109)
        at com.ibm.watson.speech_to_text.v1.websocket.SpeechToTextWebSocketListener.sendInputStream(SpeechToTextWebSocketListener.java:213)
        at com.ibm.watson.speech_to_text.v1.websocket.SpeechToTextWebSocketListener.access$100(SpeechToTextWebSocketListener.java:42)
        at com.ibm.watson.speech_to_text.v1.websocket.SpeechToTextWebSocketListener$1.run(SpeechToTextWebSocketListener.java:168)

Crash code: MicrophoneCaptureThread

public void end() {
    stop = true;

    if (!stopped) {
      try {
        running.tryLock(10, TimeUnit.SECONDS);
      } catch (InterruptedException e) {
        Log.e(TAG, e.getMessage());
      } finally {
        running.unlock();
      }
    }
  }

MicrophoneInputStream

@Override
  public void close() throws IOException {
    captureThread.end();
    os.close();
    is.close();
  }

Please help me,thank you very much

kevinkowa commented 3 years ago

Try it out with the latest version of the SDK and let me know if it's working fine on your end!