Java Google cloud SpeechClient - Как остановить потоковое аудио? - PullRequest
0 голосов
/ 06 января 2020

Из примера do c Следующий код начинает запись аудио и потоков в облако Google и получает ответы. Все работает, но я хочу закрыть стриминг после выполнения определенного условия.

if (mPermissionToRecord) {
        val isFirstRequest = AtomicBoolean(true)
        mAudioEmitter = AudioEmitter()

        textView.setText("starting listener.")

        // start streaming the data to the server and collect responses
        val requestStream = mSpeechClient.streamingRecognizeCallable()
            .bidiStreamingCall(object : ApiStreamObserver<StreamingRecognizeResponse> {
                override fun onNext(value: StreamingRecognizeResponse) {
                    runOnUiThread {
                        when {
                            value.resultsCount > 0 -> mTextView.setText(
                                value.getResults(0).getAlternatives(
                                    0
                                ).transcript
                            )
                            else -> mTextView.setText(getString(R.string.api_error))
                        }
                    }
                }

                override fun onError(t: Throwable) {
                    //Log.e(TAG, "an error occurred", t)
                    textView.setText("an error occurred "+t.toString())
                }

                override fun onCompleted() {
                    //Log.d(TAG, "stream closed")
                    textView.setText("stream closed")
                }
            })


        // monitor the input stream and send requests as audio data becomes available
        mAudioEmitter!!.start { bytes ->
            val builder = StreamingRecognizeRequest.newBuilder()
                .setAudioContent(bytes)

            // if first time, include the config
            if (isFirstRequest.getAndSet(false)) {
                builder.streamingConfig = StreamingRecognitionConfig.newBuilder()
                    .setConfig(
                        RecognitionConfig.newBuilder()
                            .setLanguageCode("en-US")
                            .setEncoding(RecognitionConfig.AudioEncoding.LINEAR16)
                            .setSampleRateHertz(16000)
                            .build()
                    )
                    .setInterimResults(true)
                    .setSingleUtterance(false)
                    .build()
            }

            // send the next request
            requestStream.onNext(builder.build())


        }

    } else {
        Log.e(TAG, "No permission to record! Please allow.")
    }

AudioEmitter() - класс аудиозаписывающего устройства. Я пытался позвонить:

mAudioEmitter?.stop()
mAudioEmitter = null

, но это только останавливает запись звука. Я также хочу остановить потоковое аудио. При вызове mSpeechClient.shutdown() происходит сбой приложения.

Как остановить SpeechClient bidiStreamingCall?

...