问题描述
尝试使用流式方法向谷歌语音 api 发送请求。发送请求时它没有抛出任何错误。但是结果不是从 api 调用返回的。 我在 byteBuffer 中存储了相同的字节并作为同步调用发送到 api 并且它可以工作,即。我可以从 api 响应中看到成绩单。贴代码
try (SpeechClient client = SpeechClient.create(settings)) {
clientStream = client.streamingRecognizeCallable().splitCall(new ResponSEObserver<StreamingRecognizeResponse>() {
private List<StreamingRecognizeResponse> responses = new ArrayList<>();
@Override
public void onStart(StreamController controller) {
log.info("started...........");
}
@Override
public void onResponse(StreamingRecognizeResponse response) {
responses.add(response);
}
@Override
public void onError(Throwable t) {
log.error("gstt error ",t);
}
@Override
public void onComplete() {
for (StreamingRecognizeResponse response : responses) {
StreamingRecognitionResult result = response.getResultsList().get(0);
SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
log.info("Transcript: %s\n",alternative.getTranscript());
}
}
});
} catch (Exception e) {
}
RecognitionConfig recognitionConfig = RecognitionConfig.newBuilder()
.setEncoding(RecognitionConfig.AudioEncoding.LINEAR16)
.setLanguageCode("en-US")
.setAudioChannelCount(1)
.setSampleRateHertz(16000)
.build();
StreamingRecognitionConfig streamingRecognitionConfig = StreamingRecognitionConfig.newBuilder()
.setConfig(recognitionConfig).build();
StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder()
.setStreamingConfig(streamingRecognitionConfig).build();
clientStream.send(request);
System.out.println("Start speaking");
}
long start = System.currentTimeMillis();
try {
while (!stopSend.get()) {
while (!audioBytes.isEmpty()) {
Byte[] byteByte = audioBytes.poll(); // blockingQueue and another process is adding the bytes to this.
if (byteByte != null) {
byte[] bytes = ArrayUtils.toPrimitive(byteByte);
log.info("Sending bytes to gstt " + bytes);
StreamingRecognizeRequest request =
StreamingRecognizeRequest.newBuilder()
.setAudioContent(ByteString.copyFrom(bytes))
.build();
clientStream.send(request);
}
}
}
} catch (Exception e) {
e.printstacktrace();
} finally {
clientStream.closeSend();
responSEObserver.onComplete();
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)