Из примера 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?