谷歌语音到文本流没有给出结果,但相同的字节在同步 api 调用中工作

问题描述

尝试使用流式方法向谷歌语音 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 (将#修改为@)