Skip to content

Commit

Permalink
samples: migrate code from googleapis/java-speech (#7437)
Browse files Browse the repository at this point in the history
### Migrating samples from [googleapis/java-speech](https://github.com/googleapis/java-speech/tree/main/samples) into [java-docs-samples/speech](https://github.com/GoogleCloudPlatform/java-docs-samples)
---

- samples: Speech GA - library update (#1212)
- samples: Due to API backend changes, update the samples to match (#1595)
-  fix: update retry configs, adds generated samples (#26)
- build: move clirr to separate check (#30)
- feat: add speaker_tag to WordInfo (#40)
- chore: update common templates, regenerate tests
- samples: Fix flaky speech test for speaker diarization (#1829)
- chore(regen): update license year for generated files (#82)
- chore(regen): regenerate with updated year
- samples: move generated samples to generated directory (#105)
- chore: update common templates
- samples: fix: flaky tests in speech (#2286)
- samples: speech: move samples out of branch (#2324)
- samples: scaffold pom.xml files (#118)
- chore(deps): update dependency com.google.cloud:libraries-bom to v4.3.0 (#122)
- chore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.0.13 (#126)
- samples: update shared config (#2443)
- chore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.0.14 (#130)
- chore(deps): update dependency com.google.cloud:libraries-bom to v4.4.0 (#131)
- chore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.0.15 (#133)
- chore(deps): update dependency com.google.cloud:libraries-bom to v4.4.1 (#134)
- chore(deps): update dependency com.google.cloud:libraries-bom to v5 (#144)
- chore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.0.16 (#149)
- chore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.0.17 (#153)
- chore: fix samples snippets and update name in repo-metadata (#155)
- chore(deps): update dependency com.google.cloud:libraries-bom to v5.2.0 (#160)
- chore(deps): update dependency com.google.cloud:libraries-bom to v5.3.0 (#167)
- chore(deps): update dependency com.google.cloud:libraries-bom to v5.5.0 (#177)
- chore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.0.18 (#200)
- chore(deps): update dependency com.google.cloud:libraries-bom to v5.7.0 (#199)
- chore(deps): update dependency com.google.cloud:libraries-bom to v6 (#210)
- chore(deps): update dependency com.google.cloud:libraries-bom to v7 (#214)
- chore(deps): update dependency com.google.cloud:libraries-bom to v7.0.1 (#222)
- chore(deps): update dependency com.google.cloud:libraries-bom to v8 (#227)
- chore(deps): update dependency com.google.cloud:libraries-bom to v8.1.0 (#237)
- samples: Add Speech API quickstart sample. (#497)
- samples: Adds sync / async examples for local and remote files
- samples: Fixes whitespace around while blocks
- samples: Adds some basic javadocs and comments
- samples: Infer project from env
- samples: Updates to use v1 release.
- samples: Fixes checkstyle issues.
- samples: Adds streaming example and tests.
- samples: Nits found in self-review.
- samples: Removes commented out code snippet and adds note on async local file limit.
- samples: Speech async examples (#612)
- samples: Vision speech upgrade (#641)
- samples: updating to latest google-cloud-* dependencies (#723)
- samples: Upgrades client and addresses changes to long running operations
- samples: Adds support for word time offset
- samples: Minimizes cloud maven dependencies and fixes lint warnings
- samples: Fixes seconds reported in word time offsets and enables maven checks
- samples: Updates to highlight word time offsets (#787)
- samples: Use only first alternative. Comments for clarity (#837)
- samples: Auto-update dependencies. (#853)
- samples: Auto-update dependencies. (#912)
- samples: Updated mlengine, monitoring, pubsub, spanner, and speech. (#993)
- samples: Speech samples (#1036)
- samples: Add model selection to streaming sample (#1073)
- samples: Model selection (#1074)
- samples: Add Auto-Punctuation samples to speech (#1079)
- samples: Add samples for enhanced models and metadata (#1093)
- samples: Add speech beta samples (#1151)
- samples: [DO_NOT_MERGE] Microphone streaming with a 1 minute duration. (#1185)
- samples: Speech region tag update (#1188)
- samples: updates word time offsets region tag (#1191)
- samples: Speech GA - library update (#1212)
- samples: Bump QuickStartSample to v1 (#1285)
- samples: Infinite Stream recognition (#1297)
- samples: Speech multi-channel GA (#1341)
- samples: Data logging opt-in is no longer required for enhanced models (#1360)
- samples: Updated Infinite streaming sample (#1422)
- samples: Revert Tests, product team rolled back changes, Auto Punctuation behavior is back to the expected output (#1428)
- samples: Increase timeout to 5 mins (#1453)
- samples: Update Recognize.java (#1460)
- samples: Add back missing break statement (#1512)
- samples: Added command line option class + option to pass different lang code as argument (#1504)
- samples: Update a default value to parameter (#1522)
- samples: Add samples for speech diarization ga (auto-punctuation samples alrea… (#1744)
- samples: speech: add ga samples and fix some flaky tests (#2049)
- samples: update shared config (#2443)
- samples: speech: make flaky tests generic (#2825)
- samples: fix test dependencies
- chore(deps): update dependency com.google.cloud:libraries-bom to v9 (#263)
- chore(deps): update dependency com.google.cloud:libraries-bom to v10 (#271)
- chore(deps): update dependency com.google.cloud:libraries-bom to v11
- chore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.0.21 (#294)
- chore(deps): update dependency com.google.cloud:libraries-bom to v12 (#298)
- test(deps): update dependency junit:junit to v4.13.1
- chore(deps): update dependency com.google.cloud:libraries-bom to v12.1.0 (#310)
- chore(deps): update dependency com.google.cloud:libraries-bom to v13 (#321)
- chore(deps): update dependency com.google.cloud:libraries-bom to v13.1.0 (#326)
- test(deps): update dependency com.google.truth:truth to v1.1 (#322)
- chore(deps): update dependency com.google.cloud:libraries-bom to v13.2.0 (#332)
- chore(deps): update dependency com.google.cloud:libraries-bom to v13.3.0 (#334)
- chore(deps): update dependency com.google.cloud:libraries-bom to v13.4.0 (#338)
- chore(deps): update dependency com.google.cloud:libraries-bom to v14 (#347)
- chore(deps): update dependency com.google.cloud:libraries-bom to v15 (#350)
- chore(deps): update dependency com.google.cloud:libraries-bom to v15.1.0 (#357)
- chore(deps): update dependency com.google.cloud:libraries-bom to v16 (#364)
- samples: add recognize sample with profanity filter (#376)
- samples: refactor quickstart to use a gcs file (#378)
- chore(deps): update dependency com.google.cloud:libraries-bom to v16.2.0 (#389)
- samples: add multi region transcribe sample (#394)
- chore(deps): update dependency com.google.cloud:libraries-bom to v16.2.1 (#398)
- chore(deps): update dependency com.google.cloud:libraries-bom to v16.3.0 (#405)
- test(deps): update dependency com.google.truth:truth to v1.1.2 (#407)
- chore(deps): update dependency com.google.cloud:libraries-bom to v16.4.0 (#423)
- test(deps): update dependency junit:junit to v4.13.2 (#428)
- chore(deps): update dependency com.google.cloud:libraries-bom to v17 (#441)
- chore(deps): update dependency com.google.cloud:libraries-bom to v18 (#445)
- chore(deps): update dependency com.google.cloud:libraries-bom to v18.1.0 (#456)
- chore(deps): update dependency com.google.cloud:libraries-bom to v19 (#459)
- chore(samples): adds model adaptation sample (#468)
- chore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.0.22 (#482)
- chore(deps): update dependency com.google.cloud:libraries-bom to v20 (#486)
- chore(deps): update dependency com.google.cloud:libraries-bom to v20.1.0 (#493)
- chore(deps): update dependency com.google.cloud:libraries-bom to v20.2.0 (#505)
- chore(deps): update dependency com.google.cloud:libraries-bom to v20.3.0 (#514)
- chore(deps): update dependency com.google.cloud:libraries-bom to v20.4.0 (#523)
- chore(deps): update dependency com.google.cloud:libraries-bom to v20.5.0 (#535)
- test(deps): update dependency com.google.truth:truth to v1.1.3 (#537)
- chore: change region (#538)
- samples: adds export to GCS sample (#544)
- chore(deps): update dependency com.google.cloud:libraries-bom to v20.6.0 (#552)
- chore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.0.23 (#551)
- chore(deps): update dependency com.google.cloud:libraries-bom to v20.7.0 (#568)
- chore(deps): update dependency com.google.cloud:libraries-bom to v20.8.0 (#578)
- chore(deps): update dependency com.google.cloud:libraries-bom to v20.9.0 (#589)
- chore(deps): update dependency com.google.cloud:libraries-bom to v21 (#625)
- chore(deps): update dependency com.google.cloud:libraries-bom to v22 (#650)
- chore(deps): update dependency com.google.cloud:libraries-bom to v23 (#663)
- chore: migrate to owlbot (#660)
- chore(deps): update dependency com.google.cloud:libraries-bom to v23.1.0 (#702)
- chore(deps): update dependency com.google.cloud:libraries-bom to v24 (#719)
- deps: update dependency commons-cli:commons-cli to v1.5.0 (#720)
- sample: Configure polling algorithm in long recognition sample (#464)
- chore: cleanup cloud RAD generation (#1269) (#725)
- docs(samples): refactors the export-to-gcs sample (#737)
- deps: update dependency org.json:json to v20211205 (#745)
- chore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.0.24 (#742)
- chore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.2.0 (#753)
- chore(deps): update dependency com.google.cloud:libraries-bom to v24.1.0 (#758)
- chore(deps): update dependency com.google.cloud:libraries-bom to v24.1.1 (#759)
- chore(deps): update dependency com.google.cloud:libraries-bom to v24.1.2 (#764)
- chore(deps): update dependency com.google.cloud:libraries-bom to v24.2.0 (#775)
- chore(deps): update dependency com.google.cloud:libraries-bom to v24.3.0 (#794)
- chore(deps): update dependency com.google.cloud:libraries-bom to v24.4.0 (#823)
- deps: update dependency org.json:json to v20220320 (#835)
- chore(deps): update dependency com.google.cloud:libraries-bom to v25 (#834)
- chore(deps): update dependency com.google.cloud:libraries-bom to v25.1.0 (#849)
- chore(deps): update dependency com.google.cloud:libraries-bom to v25.2.0 (#876)
- chore(deps): update dependency com.google.cloud:libraries-bom to v25.3.0 (#883)
- chore(deps): update dependency com.google.cloud:libraries-bom to v25.4.0 (#892)
- chore(deps): update dependency com.google.cloud:libraries-bom to v26 (#918)
- chore(deps): update dependency com.google.cloud:libraries-bom to v26.1.0 (#938)
- chore(deps): update dependency com.google.cloud:libraries-bom to v26.1.1 (#941)
- chore(deps): update dependency com.google.cloud:libraries-bom to v26.1.2 (#957)
- deps: update dependency org.json:json to v20220924 (#961)
- chore(deps): update dependency com.google.cloud:libraries-bom to v26.1.3 (#975)

Fixes #issue

> It's a good idea to open an issue first for discussion.

- [ ] I have followed [Sample Format Guide](https://github.com/GoogleCloudPlatform/java-docs-samples/blob/main/SAMPLE_FORMAT.md)
- [ ] `pom.xml` parent set to latest `shared-configuration`
- [ ] Appropriate changes to README are included in PR
- [ ] API's need to be enabled to test (tell us)
- [ ] Environment Variables need to be set (ask us to set them)
- [ ] **Tests** pass:   `mvn clean verify` **required**
- [ ] **Lint**  passes: `mvn -P lint checkstyle:check` **required**
- [ ] **Static Analysis**:  `mvn -P lint clean compile pmd:cpd-check spotbugs:check` **advisory only**
- [ ] Please **merge** this PR for me once it is approved.
  • Loading branch information
Shabirmean committed Nov 17, 2022
1 parent eba49f5 commit 6161d0f
Show file tree
Hide file tree
Showing 21 changed files with 2,853 additions and 3 deletions.
3 changes: 0 additions & 3 deletions speech/README.md

This file was deleted.

75 changes: 75 additions & 0 deletions speech/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
<?xml version='1.0' encoding='UTF-8'?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.speech</groupId>
<artifactId>google-cloud-speech-snippets</artifactId>
<packaging>jar</packaging>
<name>Google Cloud Speech Snippets</name>
<url>https://github.com/GoogleCloudPlatform/java-docs-samples/tree/main/speech</url>

<!--
The parent pom defines common style checks and testing strategies for our samples.
Removing or replacing it should not affect the execution of the samples in anyway.
-->
<parent>
<groupId>com.google.cloud.samples</groupId>
<artifactId>shared-configuration</artifactId>
<version>1.2.0</version>
</parent>

<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>


<!-- [START speech_install_with_bom] -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.1.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20220924</version>
</dependency>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-speech</artifactId>
</dependency>
<!-- [START_EXCLUDE] -->
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.5.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.truth</groupId>
<artifactId>truth</artifactId>
<version>1.1.3</version>
<scope>test</scope>
</dependency>
<!-- [END_EXCLUDE] -->
</dependencies>
<!-- [END speech_install_with_bom] -->
</project>
Binary file added speech/resources/Google_Gnome.wav
Binary file not shown.
Binary file added speech/resources/audio.raw
Binary file not shown.
Binary file added speech/resources/commercial_mono.wav
Binary file not shown.
Binary file added speech/resources/commercial_stereo.wav
Binary file not shown.
302 changes: 302 additions & 0 deletions speech/src/main/java/com/example/speech/InfiniteStreamRecognize.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,302 @@
/*
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.example.speech;

// [START speech_transcribe_infinite_streaming]

import com.google.api.gax.rpc.ClientStream;
import com.google.api.gax.rpc.ResponseObserver;
import com.google.api.gax.rpc.StreamController;
import com.google.cloud.speech.v1p1beta1.RecognitionConfig;
import com.google.cloud.speech.v1p1beta1.SpeechClient;
import com.google.cloud.speech.v1p1beta1.SpeechRecognitionAlternative;
import com.google.cloud.speech.v1p1beta1.StreamingRecognitionConfig;
import com.google.cloud.speech.v1p1beta1.StreamingRecognitionResult;
import com.google.cloud.speech.v1p1beta1.StreamingRecognizeRequest;
import com.google.cloud.speech.v1p1beta1.StreamingRecognizeResponse;
import com.google.protobuf.ByteString;
import com.google.protobuf.Duration;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.DataLine.Info;
import javax.sound.sampled.TargetDataLine;

public class InfiniteStreamRecognize {

private static final int STREAMING_LIMIT = 290000; // ~5 minutes

public static final String RED = "\033[0;31m";
public static final String GREEN = "\033[0;32m";
public static final String YELLOW = "\033[0;33m";

// Creating shared object
private static volatile BlockingQueue<byte[]> sharedQueue = new LinkedBlockingQueue();
private static TargetDataLine targetDataLine;
private static int BYTES_PER_BUFFER = 6400; // buffer size in bytes

private static int restartCounter = 0;
private static ArrayList<ByteString> audioInput = new ArrayList<ByteString>();
private static ArrayList<ByteString> lastAudioInput = new ArrayList<ByteString>();
private static int resultEndTimeInMS = 0;
private static int isFinalEndTime = 0;
private static int finalRequestEndTime = 0;
private static boolean newStream = true;
private static double bridgingOffset = 0;
private static boolean lastTranscriptWasFinal = false;
private static StreamController referenceToStreamController;
private static ByteString tempByteString;

public static void main(String... args) {
InfiniteStreamRecognizeOptions options = InfiniteStreamRecognizeOptions.fromFlags(args);
if (options == null) {
// Could not parse.
System.out.println("Failed to parse options.");
System.exit(1);
}

try {
infiniteStreamingRecognize(options.langCode);
} catch (Exception e) {
System.out.println("Exception caught: " + e);
}
}

public static String convertMillisToDate(double milliSeconds) {
long millis = (long) milliSeconds;
DecimalFormat format = new DecimalFormat();
format.setMinimumIntegerDigits(2);
return String.format(
"%s:%s /",
format.format(TimeUnit.MILLISECONDS.toMinutes(millis)),
format.format(
TimeUnit.MILLISECONDS.toSeconds(millis)
- TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))));
}

/** Performs infinite streaming speech recognition */
public static void infiniteStreamingRecognize(String languageCode) throws Exception {

// Microphone Input buffering
class MicBuffer implements Runnable {

@Override
public void run() {
System.out.println(YELLOW);
System.out.println("Start speaking...Press Ctrl-C to stop");
targetDataLine.start();
byte[] data = new byte[BYTES_PER_BUFFER];
while (targetDataLine.isOpen()) {
try {
int numBytesRead = targetDataLine.read(data, 0, data.length);
if ((numBytesRead <= 0) && (targetDataLine.isOpen())) {
continue;
}
sharedQueue.put(data.clone());
} catch (InterruptedException e) {
System.out.println("Microphone input buffering interrupted : " + e.getMessage());
}
}
}
}

// Creating microphone input buffer thread
MicBuffer micrunnable = new MicBuffer();
Thread micThread = new Thread(micrunnable);
ResponseObserver<StreamingRecognizeResponse> responseObserver = null;
try (SpeechClient client = SpeechClient.create()) {
ClientStream<StreamingRecognizeRequest> clientStream;
responseObserver =
new ResponseObserver<StreamingRecognizeResponse>() {

ArrayList<StreamingRecognizeResponse> responses = new ArrayList<>();

public void onStart(StreamController controller) {
referenceToStreamController = controller;
}

public void onResponse(StreamingRecognizeResponse response) {
responses.add(response);
StreamingRecognitionResult result = response.getResultsList().get(0);
Duration resultEndTime = result.getResultEndTime();
resultEndTimeInMS =
(int)
((resultEndTime.getSeconds() * 1000) + (resultEndTime.getNanos() / 1000000));
double correctedTime =
resultEndTimeInMS - bridgingOffset + (STREAMING_LIMIT * restartCounter);

SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
if (result.getIsFinal()) {
System.out.print(GREEN);
System.out.print("\033[2K\r");
System.out.printf(
"%s: %s [confidence: %.2f]\n",
convertMillisToDate(correctedTime),
alternative.getTranscript(),
alternative.getConfidence());
isFinalEndTime = resultEndTimeInMS;
lastTranscriptWasFinal = true;
} else {
System.out.print(RED);
System.out.print("\033[2K\r");
System.out.printf(
"%s: %s", convertMillisToDate(correctedTime), alternative.getTranscript());
lastTranscriptWasFinal = false;
}
}

public void onComplete() {}

public void onError(Throwable t) {}
};
clientStream = client.streamingRecognizeCallable().splitCall(responseObserver);

RecognitionConfig recognitionConfig =
RecognitionConfig.newBuilder()
.setEncoding(RecognitionConfig.AudioEncoding.LINEAR16)
.setLanguageCode(languageCode)
.setSampleRateHertz(16000)
.build();

StreamingRecognitionConfig streamingRecognitionConfig =
StreamingRecognitionConfig.newBuilder()
.setConfig(recognitionConfig)
.setInterimResults(true)
.build();

StreamingRecognizeRequest request =
StreamingRecognizeRequest.newBuilder()
.setStreamingConfig(streamingRecognitionConfig)
.build(); // The first request in a streaming call has to be a config

clientStream.send(request);

try {
// SampleRate:16000Hz, SampleSizeInBits: 16, Number of channels: 1, Signed: true,
// bigEndian: false
AudioFormat audioFormat = new AudioFormat(16000, 16, 1, true, false);
DataLine.Info targetInfo =
new Info(
TargetDataLine.class,
audioFormat); // Set the system information to read from the microphone audio
// stream

if (!AudioSystem.isLineSupported(targetInfo)) {
System.out.println("Microphone not supported");
System.exit(0);
}
// Target data line captures the audio stream the microphone produces.
targetDataLine = (TargetDataLine) AudioSystem.getLine(targetInfo);
targetDataLine.open(audioFormat);
micThread.start();

long startTime = System.currentTimeMillis();

while (true) {

long estimatedTime = System.currentTimeMillis() - startTime;

if (estimatedTime >= STREAMING_LIMIT) {

clientStream.closeSend();
referenceToStreamController.cancel(); // remove Observer

if (resultEndTimeInMS > 0) {
finalRequestEndTime = isFinalEndTime;
}
resultEndTimeInMS = 0;

lastAudioInput = null;
lastAudioInput = audioInput;
audioInput = new ArrayList<ByteString>();

restartCounter++;

if (!lastTranscriptWasFinal) {
System.out.print('\n');
}

newStream = true;

clientStream = client.streamingRecognizeCallable().splitCall(responseObserver);

request =
StreamingRecognizeRequest.newBuilder()
.setStreamingConfig(streamingRecognitionConfig)
.build();

System.out.println(YELLOW);
System.out.printf("%d: RESTARTING REQUEST\n", restartCounter * STREAMING_LIMIT);

startTime = System.currentTimeMillis();

} else {

if ((newStream) && (lastAudioInput.size() > 0)) {
// if this is the first audio from a new request
// calculate amount of unfinalized audio from last request
// resend the audio to the speech client before incoming audio
double chunkTime = STREAMING_LIMIT / lastAudioInput.size();
// ms length of each chunk in previous request audio arrayList
if (chunkTime != 0) {
if (bridgingOffset < 0) {
// bridging Offset accounts for time of resent audio
// calculated from last request
bridgingOffset = 0;
}
if (bridgingOffset > finalRequestEndTime) {
bridgingOffset = finalRequestEndTime;
}
int chunksFromMs =
(int) Math.floor((finalRequestEndTime - bridgingOffset) / chunkTime);
// chunks from MS is number of chunks to resend
bridgingOffset =
(int) Math.floor((lastAudioInput.size() - chunksFromMs) * chunkTime);
// set bridging offset for next request
for (int i = chunksFromMs; i < lastAudioInput.size(); i++) {
request =
StreamingRecognizeRequest.newBuilder()
.setAudioContent(lastAudioInput.get(i))
.build();
clientStream.send(request);
}
}
newStream = false;
}

tempByteString = ByteString.copyFrom(sharedQueue.take());

request =
StreamingRecognizeRequest.newBuilder().setAudioContent(tempByteString).build();

audioInput.add(tempByteString);
}

clientStream.send(request);
}
} catch (Exception e) {
System.out.println(e);
}
}
}
}
// [END speech_transcribe_infinite_streaming]
Loading

0 comments on commit 6161d0f

Please sign in to comment.