Skip to content

DO NOT MERGE: Add streaming support to Speech API. #1280

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,18 @@
package com.google.cloud.speech.spi.v1beta1;

import com.google.api.gax.grpc.ApiCallable;
import com.google.api.gax.protobuf.PathTemplate;
import com.google.cloud.speech.v1beta1.AsyncRecognizeRequest;
import com.google.cloud.speech.v1beta1.RecognitionAudio;
import com.google.cloud.speech.v1beta1.RecognitionConfig;
import com.google.cloud.speech.v1beta1.StreamingRecognizeRequest;
import com.google.cloud.speech.v1beta1.StreamingRecognizeResponse;
import com.google.cloud.speech.v1beta1.SyncRecognizeRequest;
import com.google.cloud.speech.v1beta1.SyncRecognizeResponse;
import com.google.longrunning.Operation;

import io.grpc.ManagedChannel;
import io.grpc.stub.StreamObserver;

import java.io.Closeable;
import java.io.IOException;
import java.util.ArrayList;
Expand Down Expand Up @@ -90,6 +94,8 @@ public class SpeechApi implements AutoCloseable {

private final ApiCallable<SyncRecognizeRequest, SyncRecognizeResponse> syncRecognizeCallable;
private final ApiCallable<AsyncRecognizeRequest, Operation> asyncRecognizeCallable;
private final ApiCallable<StreamObserver<StreamingRecognizeRequest>,
StreamObserver<StreamingRecognizeResponse>> streamingRecognizeCallable;

public final SpeechSettings getSettings() {
return settings;
Expand Down Expand Up @@ -125,6 +131,8 @@ protected SpeechApi(SpeechSettings settings) throws IOException {
ApiCallable.create(settings.syncRecognizeSettings(), this.channel, this.executor);
this.asyncRecognizeCallable =
ApiCallable.create(settings.asyncRecognizeSettings(), this.channel, this.executor);
this.streamingRecognizeCallable =
ApiCallable.create(settings.streamingRecognizeSettings(), this.channel, this.executor);

if (settings.getChannelProvider().shouldAutoClose()) {
closeables.add(
Expand All @@ -146,6 +154,11 @@ public void close() throws IOException {
}
}

public final StreamObserver<StreamingRecognizeResponse> streamingRecognize(
StreamObserver<StreamingRecognizeRequest> streamObserver) {
return streamingRecognizeCallable.call(streamObserver);
}

// AUTO-GENERATED DOCUMENTATION AND METHOD
/**
* Perform synchronous speech-recognition: receive results after all audio
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@
import com.google.api.gax.core.ConnectionSettings;
import com.google.api.gax.core.RetrySettings;
import com.google.api.gax.grpc.ApiCallSettings;
import com.google.api.gax.grpc.PageStreamingDescriptor;
import com.google.api.gax.grpc.ServiceApiSettings;
import com.google.api.gax.grpc.SimpleCallSettings;
import com.google.auth.Credentials;
import com.google.cloud.speech.v1beta1.AsyncRecognizeRequest;
import com.google.cloud.speech.v1beta1.SpeechGrpc;
import com.google.cloud.speech.v1beta1.StreamingRecognizeRequest;
import com.google.cloud.speech.v1beta1.StreamingRecognizeResponse;
import com.google.cloud.speech.v1beta1.SyncRecognizeRequest;
import com.google.cloud.speech.v1beta1.SyncRecognizeResponse;
import com.google.common.collect.ImmutableList;
Expand All @@ -30,12 +31,16 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.longrunning.Operation;

import org.joda.time.Duration;

import io.grpc.ManagedChannel;
import io.grpc.Status;
import io.grpc.stub.StreamObserver;

import java.io.IOException;
import java.util.List;
import java.util.concurrent.ScheduledExecutorService;
import org.joda.time.Duration;

// AUTO-GENERATED DOCUMENTATION AND CLASS
/**
Expand Down Expand Up @@ -95,6 +100,8 @@ public class SpeechSettings extends ServiceApiSettings {
private final SimpleCallSettings<SyncRecognizeRequest, SyncRecognizeResponse>
syncRecognizeSettings;
private final SimpleCallSettings<AsyncRecognizeRequest, Operation> asyncRecognizeSettings;
private final SimpleCallSettings<StreamObserver<StreamingRecognizeRequest>,
StreamObserver<StreamingRecognizeResponse>> streamingRecognizeSettings;

/**
* Returns the object with the settings used for calls to syncRecognize.
Expand All @@ -110,6 +117,14 @@ public SimpleCallSettings<AsyncRecognizeRequest, Operation> asyncRecognizeSettin
return asyncRecognizeSettings;
}

/**
* Returns the object with the settings used for calls to asyncRecognize.
*/
public SimpleCallSettings<StreamObserver<StreamingRecognizeRequest>,
StreamObserver<StreamingRecognizeResponse>> streamingRecognizeSettings() {
return streamingRecognizeSettings;
}

/**
* Returns the default service address.
*/
Expand Down Expand Up @@ -163,6 +178,7 @@ private SpeechSettings(Builder settingsBuilder) throws IOException {

syncRecognizeSettings = settingsBuilder.syncRecognizeSettings().build();
asyncRecognizeSettings = settingsBuilder.asyncRecognizeSettings().build();
streamingRecognizeSettings = settingsBuilder.streamingRecognizeSettings().build();
}

/**
Expand All @@ -174,6 +190,8 @@ public static class Builder extends ServiceApiSettings.Builder {
private SimpleCallSettings.Builder<SyncRecognizeRequest, SyncRecognizeResponse>
syncRecognizeSettings;
private SimpleCallSettings.Builder<AsyncRecognizeRequest, Operation> asyncRecognizeSettings;
private SimpleCallSettings.Builder<StreamObserver<StreamingRecognizeRequest>,
StreamObserver<StreamingRecognizeResponse>> streamingRecognizeSettings;

private static final ImmutableMap<String, ImmutableSet<Status.Code>> RETRYABLE_CODE_DEFINITIONS;

Expand Down Expand Up @@ -315,6 +333,11 @@ public SimpleCallSettings.Builder<AsyncRecognizeRequest, Operation> asyncRecogni
return asyncRecognizeSettings;
}

public SimpleCallSettings.Builder<StreamObserver<StreamingRecognizeRequest>,
StreamObserver<StreamingRecognizeResponse>> streamingRecognizeSettings() {
return streamingRecognizeSettings;
}

@Override
public SpeechSettings build() throws IOException {
return new SpeechSettings(this);
Expand Down