diff --git a/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/RecognitionConfig.java b/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/RecognitionConfig.java
index f1a8337edfb9..c84131df0b19 100644
--- a/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/RecognitionConfig.java
+++ b/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/RecognitionConfig.java
@@ -103,6 +103,22 @@ private RecognitionConfig(
           case 64:
             {
               enableWordTimeOffsets_ = input.readBool();
+              break;
+            }
+          case 74:
+            {
+              com.google.cloud.speech.v1.RecognitionMetadata.Builder subBuilder = null;
+              if (metadata_ != null) {
+                subBuilder = metadata_.toBuilder();
+              }
+              metadata_ =
+                  input.readMessage(
+                      com.google.cloud.speech.v1.RecognitionMetadata.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(metadata_);
+                metadata_ = subBuilder.buildPartial();
+              }
+
               break;
             }
           case 88:
@@ -780,6 +796,47 @@ public boolean getEnableAutomaticPunctuation() {
     return enableAutomaticPunctuation_;
   }
 
+  public static final int METADATA_FIELD_NUMBER = 9;
+  private com.google.cloud.speech.v1.RecognitionMetadata metadata_;
+  /**
+   *
+   *
+   * <pre>
+   * *Optional* Metadata regarding this request.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+   */
+  public boolean hasMetadata() {
+    return metadata_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * *Optional* Metadata regarding this request.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+   */
+  public com.google.cloud.speech.v1.RecognitionMetadata getMetadata() {
+    return metadata_ == null
+        ? com.google.cloud.speech.v1.RecognitionMetadata.getDefaultInstance()
+        : metadata_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * *Optional* Metadata regarding this request.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+   */
+  public com.google.cloud.speech.v1.RecognitionMetadataOrBuilder getMetadataOrBuilder() {
+    return getMetadata();
+  }
+
   public static final int MODEL_FIELD_NUMBER = 13;
   private volatile java.lang.Object model_;
   /**
@@ -952,6 +1009,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io
     if (enableWordTimeOffsets_ != false) {
       output.writeBool(8, enableWordTimeOffsets_);
     }
+    if (metadata_ != null) {
+      output.writeMessage(9, getMetadata());
+    }
     if (enableAutomaticPunctuation_ != false) {
       output.writeBool(11, enableAutomaticPunctuation_);
     }
@@ -999,6 +1059,9 @@ public int getSerializedSize() {
     if (enableWordTimeOffsets_ != false) {
       size += com.google.protobuf.CodedOutputStream.computeBoolSize(8, enableWordTimeOffsets_);
     }
+    if (metadata_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(9, getMetadata());
+    }
     if (enableAutomaticPunctuation_ != false) {
       size +=
           com.google.protobuf.CodedOutputStream.computeBoolSize(11, enableAutomaticPunctuation_);
@@ -1041,6 +1104,10 @@ public boolean equals(final java.lang.Object obj) {
     if (!getSpeechContextsList().equals(other.getSpeechContextsList())) return false;
     if (getEnableWordTimeOffsets() != other.getEnableWordTimeOffsets()) return false;
     if (getEnableAutomaticPunctuation() != other.getEnableAutomaticPunctuation()) return false;
+    if (hasMetadata() != other.hasMetadata()) return false;
+    if (hasMetadata()) {
+      if (!getMetadata().equals(other.getMetadata())) return false;
+    }
     if (!getModel().equals(other.getModel())) return false;
     if (getUseEnhanced() != other.getUseEnhanced()) return false;
     if (!unknownFields.equals(other.unknownFields)) return false;
@@ -1078,6 +1145,10 @@ public int hashCode() {
     hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getEnableWordTimeOffsets());
     hash = (37 * hash) + ENABLE_AUTOMATIC_PUNCTUATION_FIELD_NUMBER;
     hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getEnableAutomaticPunctuation());
+    if (hasMetadata()) {
+      hash = (37 * hash) + METADATA_FIELD_NUMBER;
+      hash = (53 * hash) + getMetadata().hashCode();
+    }
     hash = (37 * hash) + MODEL_FIELD_NUMBER;
     hash = (53 * hash) + getModel().hashCode();
     hash = (37 * hash) + USE_ENHANCED_FIELD_NUMBER;
@@ -1254,6 +1325,12 @@ public Builder clear() {
 
       enableAutomaticPunctuation_ = false;
 
+      if (metadataBuilder_ == null) {
+        metadata_ = null;
+      } else {
+        metadata_ = null;
+        metadataBuilder_ = null;
+      }
       model_ = "";
 
       useEnhanced_ = false;
@@ -1305,6 +1382,11 @@ public com.google.cloud.speech.v1.RecognitionConfig buildPartial() {
       }
       result.enableWordTimeOffsets_ = enableWordTimeOffsets_;
       result.enableAutomaticPunctuation_ = enableAutomaticPunctuation_;
+      if (metadataBuilder_ == null) {
+        result.metadata_ = metadata_;
+      } else {
+        result.metadata_ = metadataBuilder_.build();
+      }
       result.model_ = model_;
       result.useEnhanced_ = useEnhanced_;
       result.bitField0_ = to_bitField0_;
@@ -1412,6 +1494,9 @@ public Builder mergeFrom(com.google.cloud.speech.v1.RecognitionConfig other) {
       if (other.getEnableAutomaticPunctuation() != false) {
         setEnableAutomaticPunctuation(other.getEnableAutomaticPunctuation());
       }
+      if (other.hasMetadata()) {
+        mergeMetadata(other.getMetadata());
+      }
       if (!other.getModel().isEmpty()) {
         model_ = other.model_;
         onChanged();
@@ -2466,6 +2551,188 @@ public Builder clearEnableAutomaticPunctuation() {
       return this;
     }
 
+    private com.google.cloud.speech.v1.RecognitionMetadata metadata_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.speech.v1.RecognitionMetadata,
+            com.google.cloud.speech.v1.RecognitionMetadata.Builder,
+            com.google.cloud.speech.v1.RecognitionMetadataOrBuilder>
+        metadataBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * *Optional* Metadata regarding this request.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+     */
+    public boolean hasMetadata() {
+      return metadataBuilder_ != null || metadata_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * *Optional* Metadata regarding this request.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+     */
+    public com.google.cloud.speech.v1.RecognitionMetadata getMetadata() {
+      if (metadataBuilder_ == null) {
+        return metadata_ == null
+            ? com.google.cloud.speech.v1.RecognitionMetadata.getDefaultInstance()
+            : metadata_;
+      } else {
+        return metadataBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * *Optional* Metadata regarding this request.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+     */
+    public Builder setMetadata(com.google.cloud.speech.v1.RecognitionMetadata value) {
+      if (metadataBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        metadata_ = value;
+        onChanged();
+      } else {
+        metadataBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * *Optional* Metadata regarding this request.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+     */
+    public Builder setMetadata(
+        com.google.cloud.speech.v1.RecognitionMetadata.Builder builderForValue) {
+      if (metadataBuilder_ == null) {
+        metadata_ = builderForValue.build();
+        onChanged();
+      } else {
+        metadataBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * *Optional* Metadata regarding this request.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+     */
+    public Builder mergeMetadata(com.google.cloud.speech.v1.RecognitionMetadata value) {
+      if (metadataBuilder_ == null) {
+        if (metadata_ != null) {
+          metadata_ =
+              com.google.cloud.speech.v1.RecognitionMetadata.newBuilder(metadata_)
+                  .mergeFrom(value)
+                  .buildPartial();
+        } else {
+          metadata_ = value;
+        }
+        onChanged();
+      } else {
+        metadataBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * *Optional* Metadata regarding this request.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+     */
+    public Builder clearMetadata() {
+      if (metadataBuilder_ == null) {
+        metadata_ = null;
+        onChanged();
+      } else {
+        metadata_ = null;
+        metadataBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * *Optional* Metadata regarding this request.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+     */
+    public com.google.cloud.speech.v1.RecognitionMetadata.Builder getMetadataBuilder() {
+
+      onChanged();
+      return getMetadataFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * *Optional* Metadata regarding this request.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+     */
+    public com.google.cloud.speech.v1.RecognitionMetadataOrBuilder getMetadataOrBuilder() {
+      if (metadataBuilder_ != null) {
+        return metadataBuilder_.getMessageOrBuilder();
+      } else {
+        return metadata_ == null
+            ? com.google.cloud.speech.v1.RecognitionMetadata.getDefaultInstance()
+            : metadata_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * *Optional* Metadata regarding this request.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.cloud.speech.v1.RecognitionMetadata,
+            com.google.cloud.speech.v1.RecognitionMetadata.Builder,
+            com.google.cloud.speech.v1.RecognitionMetadataOrBuilder>
+        getMetadataFieldBuilder() {
+      if (metadataBuilder_ == null) {
+        metadataBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.cloud.speech.v1.RecognitionMetadata,
+                com.google.cloud.speech.v1.RecognitionMetadata.Builder,
+                com.google.cloud.speech.v1.RecognitionMetadataOrBuilder>(
+                getMetadata(), getParentForChildren(), isClean());
+        metadata_ = null;
+      }
+      return metadataBuilder_;
+    }
+
     private java.lang.Object model_ = "";
     /**
      *
diff --git a/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/RecognitionConfigOrBuilder.java b/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/RecognitionConfigOrBuilder.java
index 6751b9c28703..ed22e249d4c1 100644
--- a/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/RecognitionConfigOrBuilder.java
+++ b/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/RecognitionConfigOrBuilder.java
@@ -240,6 +240,37 @@ public interface RecognitionConfigOrBuilder
    */
   boolean getEnableAutomaticPunctuation();
 
+  /**
+   *
+   *
+   * <pre>
+   * *Optional* Metadata regarding this request.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+   */
+  boolean hasMetadata();
+  /**
+   *
+   *
+   * <pre>
+   * *Optional* Metadata regarding this request.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+   */
+  com.google.cloud.speech.v1.RecognitionMetadata getMetadata();
+  /**
+   *
+   *
+   * <pre>
+   * *Optional* Metadata regarding this request.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata metadata = 9;</code>
+   */
+  com.google.cloud.speech.v1.RecognitionMetadataOrBuilder getMetadataOrBuilder();
+
   /**
    *
    *
diff --git a/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/RecognitionMetadata.java b/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/RecognitionMetadata.java
new file mode 100644
index 000000000000..94f784a30305
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/RecognitionMetadata.java
@@ -0,0 +1,2505 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/speech/v1/cloud_speech.proto
+
+package com.google.cloud.speech.v1;
+
+/**
+ *
+ *
+ * <pre>
+ * Description of audio data to be recognized.
+ * </pre>
+ *
+ * Protobuf type {@code google.cloud.speech.v1.RecognitionMetadata}
+ */
+public final class RecognitionMetadata extends com.google.protobuf.GeneratedMessageV3
+    implements
+    // @@protoc_insertion_point(message_implements:google.cloud.speech.v1.RecognitionMetadata)
+    RecognitionMetadataOrBuilder {
+  private static final long serialVersionUID = 0L;
+  // Use RecognitionMetadata.newBuilder() to construct.
+  private RecognitionMetadata(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+
+  private RecognitionMetadata() {
+    interactionType_ = 0;
+    microphoneDistance_ = 0;
+    originalMediaType_ = 0;
+    recordingDeviceType_ = 0;
+    recordingDeviceName_ = "";
+    originalMimeType_ = "";
+    audioTopic_ = "";
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
+  private RecognitionMetadata(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 8:
+            {
+              int rawValue = input.readEnum();
+
+              interactionType_ = rawValue;
+              break;
+            }
+          case 24:
+            {
+              industryNaicsCodeOfAudio_ = input.readUInt32();
+              break;
+            }
+          case 32:
+            {
+              int rawValue = input.readEnum();
+
+              microphoneDistance_ = rawValue;
+              break;
+            }
+          case 40:
+            {
+              int rawValue = input.readEnum();
+
+              originalMediaType_ = rawValue;
+              break;
+            }
+          case 48:
+            {
+              int rawValue = input.readEnum();
+
+              recordingDeviceType_ = rawValue;
+              break;
+            }
+          case 58:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              recordingDeviceName_ = s;
+              break;
+            }
+          case 66:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              originalMimeType_ = s;
+              break;
+            }
+          case 82:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              audioTopic_ = s;
+              break;
+            }
+          default:
+            {
+              if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+    return com.google.cloud.speech.v1.SpeechProto
+        .internal_static_google_cloud_speech_v1_RecognitionMetadata_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.google.cloud.speech.v1.SpeechProto
+        .internal_static_google_cloud_speech_v1_RecognitionMetadata_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.google.cloud.speech.v1.RecognitionMetadata.class,
+            com.google.cloud.speech.v1.RecognitionMetadata.Builder.class);
+  }
+
+  /**
+   *
+   *
+   * <pre>
+   * Use case categories that the audio recognition request can be described
+   * by.
+   * </pre>
+   *
+   * Protobuf enum {@code google.cloud.speech.v1.RecognitionMetadata.InteractionType}
+   */
+  public enum InteractionType implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     *
+     *
+     * <pre>
+     * Use case is either unknown or is something other than one of the other
+     * values below.
+     * </pre>
+     *
+     * <code>INTERACTION_TYPE_UNSPECIFIED = 0;</code>
+     */
+    INTERACTION_TYPE_UNSPECIFIED(0),
+    /**
+     *
+     *
+     * <pre>
+     * Multiple people in a conversation or discussion. For example in a
+     * meeting with two or more people actively participating. Typically
+     * all the primary people speaking would be in the same room (if not,
+     * see PHONE_CALL)
+     * </pre>
+     *
+     * <code>DISCUSSION = 1;</code>
+     */
+    DISCUSSION(1),
+    /**
+     *
+     *
+     * <pre>
+     * One or more persons lecturing or presenting to others, mostly
+     * uninterrupted.
+     * </pre>
+     *
+     * <code>PRESENTATION = 2;</code>
+     */
+    PRESENTATION(2),
+    /**
+     *
+     *
+     * <pre>
+     * A phone-call or video-conference in which two or more people, who are
+     * not in the same room, are actively participating.
+     * </pre>
+     *
+     * <code>PHONE_CALL = 3;</code>
+     */
+    PHONE_CALL(3),
+    /**
+     *
+     *
+     * <pre>
+     * A recorded message intended for another person to listen to.
+     * </pre>
+     *
+     * <code>VOICEMAIL = 4;</code>
+     */
+    VOICEMAIL(4),
+    /**
+     *
+     *
+     * <pre>
+     * Professionally produced audio (eg. TV Show, Podcast).
+     * </pre>
+     *
+     * <code>PROFESSIONALLY_PRODUCED = 5;</code>
+     */
+    PROFESSIONALLY_PRODUCED(5),
+    /**
+     *
+     *
+     * <pre>
+     * Transcribe spoken questions and queries into text.
+     * </pre>
+     *
+     * <code>VOICE_SEARCH = 6;</code>
+     */
+    VOICE_SEARCH(6),
+    /**
+     *
+     *
+     * <pre>
+     * Transcribe voice commands, such as for controlling a device.
+     * </pre>
+     *
+     * <code>VOICE_COMMAND = 7;</code>
+     */
+    VOICE_COMMAND(7),
+    /**
+     *
+     *
+     * <pre>
+     * Transcribe speech to text to create a written document, such as a
+     * text-message, email or report.
+     * </pre>
+     *
+     * <code>DICTATION = 8;</code>
+     */
+    DICTATION(8),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     *
+     *
+     * <pre>
+     * Use case is either unknown or is something other than one of the other
+     * values below.
+     * </pre>
+     *
+     * <code>INTERACTION_TYPE_UNSPECIFIED = 0;</code>
+     */
+    public static final int INTERACTION_TYPE_UNSPECIFIED_VALUE = 0;
+    /**
+     *
+     *
+     * <pre>
+     * Multiple people in a conversation or discussion. For example in a
+     * meeting with two or more people actively participating. Typically
+     * all the primary people speaking would be in the same room (if not,
+     * see PHONE_CALL)
+     * </pre>
+     *
+     * <code>DISCUSSION = 1;</code>
+     */
+    public static final int DISCUSSION_VALUE = 1;
+    /**
+     *
+     *
+     * <pre>
+     * One or more persons lecturing or presenting to others, mostly
+     * uninterrupted.
+     * </pre>
+     *
+     * <code>PRESENTATION = 2;</code>
+     */
+    public static final int PRESENTATION_VALUE = 2;
+    /**
+     *
+     *
+     * <pre>
+     * A phone-call or video-conference in which two or more people, who are
+     * not in the same room, are actively participating.
+     * </pre>
+     *
+     * <code>PHONE_CALL = 3;</code>
+     */
+    public static final int PHONE_CALL_VALUE = 3;
+    /**
+     *
+     *
+     * <pre>
+     * A recorded message intended for another person to listen to.
+     * </pre>
+     *
+     * <code>VOICEMAIL = 4;</code>
+     */
+    public static final int VOICEMAIL_VALUE = 4;
+    /**
+     *
+     *
+     * <pre>
+     * Professionally produced audio (eg. TV Show, Podcast).
+     * </pre>
+     *
+     * <code>PROFESSIONALLY_PRODUCED = 5;</code>
+     */
+    public static final int PROFESSIONALLY_PRODUCED_VALUE = 5;
+    /**
+     *
+     *
+     * <pre>
+     * Transcribe spoken questions and queries into text.
+     * </pre>
+     *
+     * <code>VOICE_SEARCH = 6;</code>
+     */
+    public static final int VOICE_SEARCH_VALUE = 6;
+    /**
+     *
+     *
+     * <pre>
+     * Transcribe voice commands, such as for controlling a device.
+     * </pre>
+     *
+     * <code>VOICE_COMMAND = 7;</code>
+     */
+    public static final int VOICE_COMMAND_VALUE = 7;
+    /**
+     *
+     *
+     * <pre>
+     * Transcribe speech to text to create a written document, such as a
+     * text-message, email or report.
+     * </pre>
+     *
+     * <code>DICTATION = 8;</code>
+     */
+    public static final int DICTATION_VALUE = 8;
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /** @deprecated Use {@link #forNumber(int)} instead. */
+    @java.lang.Deprecated
+    public static InteractionType valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static InteractionType forNumber(int value) {
+      switch (value) {
+        case 0:
+          return INTERACTION_TYPE_UNSPECIFIED;
+        case 1:
+          return DISCUSSION;
+        case 2:
+          return PRESENTATION;
+        case 3:
+          return PHONE_CALL;
+        case 4:
+          return VOICEMAIL;
+        case 5:
+          return PROFESSIONALLY_PRODUCED;
+        case 6:
+          return VOICE_SEARCH;
+        case 7:
+          return VOICE_COMMAND;
+        case 8:
+          return DICTATION;
+        default:
+          return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<InteractionType> internalGetValueMap() {
+      return internalValueMap;
+    }
+
+    private static final com.google.protobuf.Internal.EnumLiteMap<InteractionType>
+        internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<InteractionType>() {
+              public InteractionType findValueByNumber(int number) {
+                return InteractionType.forNumber(number);
+              }
+            };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
+      return getDescriptor().getValues().get(ordinal());
+    }
+
+    public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
+      return getDescriptor();
+    }
+
+    public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
+      return com.google.cloud.speech.v1.RecognitionMetadata.getDescriptor().getEnumTypes().get(0);
+    }
+
+    private static final InteractionType[] VALUES = values();
+
+    public static InteractionType valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private InteractionType(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:google.cloud.speech.v1.RecognitionMetadata.InteractionType)
+  }
+
+  /**
+   *
+   *
+   * <pre>
+   * Enumerates the types of capture settings describing an audio file.
+   * </pre>
+   *
+   * Protobuf enum {@code google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance}
+   */
+  public enum MicrophoneDistance implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     *
+     *
+     * <pre>
+     * Audio type is not known.
+     * </pre>
+     *
+     * <code>MICROPHONE_DISTANCE_UNSPECIFIED = 0;</code>
+     */
+    MICROPHONE_DISTANCE_UNSPECIFIED(0),
+    /**
+     *
+     *
+     * <pre>
+     * The audio was captured from a closely placed microphone. Eg. phone,
+     * dictaphone, or handheld microphone. Generally if there speaker is within
+     * 1 meter of the microphone.
+     * </pre>
+     *
+     * <code>NEARFIELD = 1;</code>
+     */
+    NEARFIELD(1),
+    /**
+     *
+     *
+     * <pre>
+     * The speaker if within 3 meters of the microphone.
+     * </pre>
+     *
+     * <code>MIDFIELD = 2;</code>
+     */
+    MIDFIELD(2),
+    /**
+     *
+     *
+     * <pre>
+     * The speaker is more than 3 meters away from the microphone.
+     * </pre>
+     *
+     * <code>FARFIELD = 3;</code>
+     */
+    FARFIELD(3),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     *
+     *
+     * <pre>
+     * Audio type is not known.
+     * </pre>
+     *
+     * <code>MICROPHONE_DISTANCE_UNSPECIFIED = 0;</code>
+     */
+    public static final int MICROPHONE_DISTANCE_UNSPECIFIED_VALUE = 0;
+    /**
+     *
+     *
+     * <pre>
+     * The audio was captured from a closely placed microphone. Eg. phone,
+     * dictaphone, or handheld microphone. Generally if there speaker is within
+     * 1 meter of the microphone.
+     * </pre>
+     *
+     * <code>NEARFIELD = 1;</code>
+     */
+    public static final int NEARFIELD_VALUE = 1;
+    /**
+     *
+     *
+     * <pre>
+     * The speaker if within 3 meters of the microphone.
+     * </pre>
+     *
+     * <code>MIDFIELD = 2;</code>
+     */
+    public static final int MIDFIELD_VALUE = 2;
+    /**
+     *
+     *
+     * <pre>
+     * The speaker is more than 3 meters away from the microphone.
+     * </pre>
+     *
+     * <code>FARFIELD = 3;</code>
+     */
+    public static final int FARFIELD_VALUE = 3;
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /** @deprecated Use {@link #forNumber(int)} instead. */
+    @java.lang.Deprecated
+    public static MicrophoneDistance valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static MicrophoneDistance forNumber(int value) {
+      switch (value) {
+        case 0:
+          return MICROPHONE_DISTANCE_UNSPECIFIED;
+        case 1:
+          return NEARFIELD;
+        case 2:
+          return MIDFIELD;
+        case 3:
+          return FARFIELD;
+        default:
+          return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<MicrophoneDistance>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+
+    private static final com.google.protobuf.Internal.EnumLiteMap<MicrophoneDistance>
+        internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<MicrophoneDistance>() {
+              public MicrophoneDistance findValueByNumber(int number) {
+                return MicrophoneDistance.forNumber(number);
+              }
+            };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
+      return getDescriptor().getValues().get(ordinal());
+    }
+
+    public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
+      return getDescriptor();
+    }
+
+    public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
+      return com.google.cloud.speech.v1.RecognitionMetadata.getDescriptor().getEnumTypes().get(1);
+    }
+
+    private static final MicrophoneDistance[] VALUES = values();
+
+    public static MicrophoneDistance valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private MicrophoneDistance(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance)
+  }
+
+  /**
+   *
+   *
+   * <pre>
+   * The original media the speech was recorded on.
+   * </pre>
+   *
+   * Protobuf enum {@code google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType}
+   */
+  public enum OriginalMediaType implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     *
+     *
+     * <pre>
+     * Unknown original media type.
+     * </pre>
+     *
+     * <code>ORIGINAL_MEDIA_TYPE_UNSPECIFIED = 0;</code>
+     */
+    ORIGINAL_MEDIA_TYPE_UNSPECIFIED(0),
+    /**
+     *
+     *
+     * <pre>
+     * The speech data is an audio recording.
+     * </pre>
+     *
+     * <code>AUDIO = 1;</code>
+     */
+    AUDIO(1),
+    /**
+     *
+     *
+     * <pre>
+     * The speech data originally recorded on a video.
+     * </pre>
+     *
+     * <code>VIDEO = 2;</code>
+     */
+    VIDEO(2),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     *
+     *
+     * <pre>
+     * Unknown original media type.
+     * </pre>
+     *
+     * <code>ORIGINAL_MEDIA_TYPE_UNSPECIFIED = 0;</code>
+     */
+    public static final int ORIGINAL_MEDIA_TYPE_UNSPECIFIED_VALUE = 0;
+    /**
+     *
+     *
+     * <pre>
+     * The speech data is an audio recording.
+     * </pre>
+     *
+     * <code>AUDIO = 1;</code>
+     */
+    public static final int AUDIO_VALUE = 1;
+    /**
+     *
+     *
+     * <pre>
+     * The speech data originally recorded on a video.
+     * </pre>
+     *
+     * <code>VIDEO = 2;</code>
+     */
+    public static final int VIDEO_VALUE = 2;
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /** @deprecated Use {@link #forNumber(int)} instead. */
+    @java.lang.Deprecated
+    public static OriginalMediaType valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static OriginalMediaType forNumber(int value) {
+      switch (value) {
+        case 0:
+          return ORIGINAL_MEDIA_TYPE_UNSPECIFIED;
+        case 1:
+          return AUDIO;
+        case 2:
+          return VIDEO;
+        default:
+          return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<OriginalMediaType>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+
+    private static final com.google.protobuf.Internal.EnumLiteMap<OriginalMediaType>
+        internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<OriginalMediaType>() {
+              public OriginalMediaType findValueByNumber(int number) {
+                return OriginalMediaType.forNumber(number);
+              }
+            };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
+      return getDescriptor().getValues().get(ordinal());
+    }
+
+    public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
+      return getDescriptor();
+    }
+
+    public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
+      return com.google.cloud.speech.v1.RecognitionMetadata.getDescriptor().getEnumTypes().get(2);
+    }
+
+    private static final OriginalMediaType[] VALUES = values();
+
+    public static OriginalMediaType valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private OriginalMediaType(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType)
+  }
+
+  /**
+   *
+   *
+   * <pre>
+   * The type of device the speech was recorded with.
+   * </pre>
+   *
+   * Protobuf enum {@code google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType}
+   */
+  public enum RecordingDeviceType implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     *
+     *
+     * <pre>
+     * The recording device is unknown.
+     * </pre>
+     *
+     * <code>RECORDING_DEVICE_TYPE_UNSPECIFIED = 0;</code>
+     */
+    RECORDING_DEVICE_TYPE_UNSPECIFIED(0),
+    /**
+     *
+     *
+     * <pre>
+     * Speech was recorded on a smartphone.
+     * </pre>
+     *
+     * <code>SMARTPHONE = 1;</code>
+     */
+    SMARTPHONE(1),
+    /**
+     *
+     *
+     * <pre>
+     * Speech was recorded using a personal computer or tablet.
+     * </pre>
+     *
+     * <code>PC = 2;</code>
+     */
+    PC(2),
+    /**
+     *
+     *
+     * <pre>
+     * Speech was recorded over a phone line.
+     * </pre>
+     *
+     * <code>PHONE_LINE = 3;</code>
+     */
+    PHONE_LINE(3),
+    /**
+     *
+     *
+     * <pre>
+     * Speech was recorded in a vehicle.
+     * </pre>
+     *
+     * <code>VEHICLE = 4;</code>
+     */
+    VEHICLE(4),
+    /**
+     *
+     *
+     * <pre>
+     * Speech was recorded outdoors.
+     * </pre>
+     *
+     * <code>OTHER_OUTDOOR_DEVICE = 5;</code>
+     */
+    OTHER_OUTDOOR_DEVICE(5),
+    /**
+     *
+     *
+     * <pre>
+     * Speech was recorded indoors.
+     * </pre>
+     *
+     * <code>OTHER_INDOOR_DEVICE = 6;</code>
+     */
+    OTHER_INDOOR_DEVICE(6),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     *
+     *
+     * <pre>
+     * The recording device is unknown.
+     * </pre>
+     *
+     * <code>RECORDING_DEVICE_TYPE_UNSPECIFIED = 0;</code>
+     */
+    public static final int RECORDING_DEVICE_TYPE_UNSPECIFIED_VALUE = 0;
+    /**
+     *
+     *
+     * <pre>
+     * Speech was recorded on a smartphone.
+     * </pre>
+     *
+     * <code>SMARTPHONE = 1;</code>
+     */
+    public static final int SMARTPHONE_VALUE = 1;
+    /**
+     *
+     *
+     * <pre>
+     * Speech was recorded using a personal computer or tablet.
+     * </pre>
+     *
+     * <code>PC = 2;</code>
+     */
+    public static final int PC_VALUE = 2;
+    /**
+     *
+     *
+     * <pre>
+     * Speech was recorded over a phone line.
+     * </pre>
+     *
+     * <code>PHONE_LINE = 3;</code>
+     */
+    public static final int PHONE_LINE_VALUE = 3;
+    /**
+     *
+     *
+     * <pre>
+     * Speech was recorded in a vehicle.
+     * </pre>
+     *
+     * <code>VEHICLE = 4;</code>
+     */
+    public static final int VEHICLE_VALUE = 4;
+    /**
+     *
+     *
+     * <pre>
+     * Speech was recorded outdoors.
+     * </pre>
+     *
+     * <code>OTHER_OUTDOOR_DEVICE = 5;</code>
+     */
+    public static final int OTHER_OUTDOOR_DEVICE_VALUE = 5;
+    /**
+     *
+     *
+     * <pre>
+     * Speech was recorded indoors.
+     * </pre>
+     *
+     * <code>OTHER_INDOOR_DEVICE = 6;</code>
+     */
+    public static final int OTHER_INDOOR_DEVICE_VALUE = 6;
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /** @deprecated Use {@link #forNumber(int)} instead. */
+    @java.lang.Deprecated
+    public static RecordingDeviceType valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static RecordingDeviceType forNumber(int value) {
+      switch (value) {
+        case 0:
+          return RECORDING_DEVICE_TYPE_UNSPECIFIED;
+        case 1:
+          return SMARTPHONE;
+        case 2:
+          return PC;
+        case 3:
+          return PHONE_LINE;
+        case 4:
+          return VEHICLE;
+        case 5:
+          return OTHER_OUTDOOR_DEVICE;
+        case 6:
+          return OTHER_INDOOR_DEVICE;
+        default:
+          return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<RecordingDeviceType>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+
+    private static final com.google.protobuf.Internal.EnumLiteMap<RecordingDeviceType>
+        internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<RecordingDeviceType>() {
+              public RecordingDeviceType findValueByNumber(int number) {
+                return RecordingDeviceType.forNumber(number);
+              }
+            };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
+      return getDescriptor().getValues().get(ordinal());
+    }
+
+    public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
+      return getDescriptor();
+    }
+
+    public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
+      return com.google.cloud.speech.v1.RecognitionMetadata.getDescriptor().getEnumTypes().get(3);
+    }
+
+    private static final RecordingDeviceType[] VALUES = values();
+
+    public static RecordingDeviceType valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private RecordingDeviceType(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType)
+  }
+
+  public static final int INTERACTION_TYPE_FIELD_NUMBER = 1;
+  private int interactionType_;
+  /**
+   *
+   *
+   * <pre>
+   * The use case most closely describing the audio content to be recognized.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata.InteractionType interaction_type = 1;</code>
+   */
+  public int getInteractionTypeValue() {
+    return interactionType_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The use case most closely describing the audio content to be recognized.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata.InteractionType interaction_type = 1;</code>
+   */
+  public com.google.cloud.speech.v1.RecognitionMetadata.InteractionType getInteractionType() {
+    @SuppressWarnings("deprecation")
+    com.google.cloud.speech.v1.RecognitionMetadata.InteractionType result =
+        com.google.cloud.speech.v1.RecognitionMetadata.InteractionType.valueOf(interactionType_);
+    return result == null
+        ? com.google.cloud.speech.v1.RecognitionMetadata.InteractionType.UNRECOGNIZED
+        : result;
+  }
+
+  public static final int INDUSTRY_NAICS_CODE_OF_AUDIO_FIELD_NUMBER = 3;
+  private int industryNaicsCodeOfAudio_;
+  /**
+   *
+   *
+   * <pre>
+   * The industry vertical to which this speech recognition request most
+   * closely applies. This is most indicative of the topics contained
+   * in the audio.  Use the 6-digit NAICS code to identify the industry
+   * vertical - see https://www.naics.com/search/.
+   * </pre>
+   *
+   * <code>uint32 industry_naics_code_of_audio = 3;</code>
+   */
+  public int getIndustryNaicsCodeOfAudio() {
+    return industryNaicsCodeOfAudio_;
+  }
+
+  public static final int MICROPHONE_DISTANCE_FIELD_NUMBER = 4;
+  private int microphoneDistance_;
+  /**
+   *
+   *
+   * <pre>
+   * The audio type that most closely describes the audio being recognized.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance microphone_distance = 4;
+   * </code>
+   */
+  public int getMicrophoneDistanceValue() {
+    return microphoneDistance_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The audio type that most closely describes the audio being recognized.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance microphone_distance = 4;
+   * </code>
+   */
+  public com.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance getMicrophoneDistance() {
+    @SuppressWarnings("deprecation")
+    com.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance result =
+        com.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance.valueOf(
+            microphoneDistance_);
+    return result == null
+        ? com.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance.UNRECOGNIZED
+        : result;
+  }
+
+  public static final int ORIGINAL_MEDIA_TYPE_FIELD_NUMBER = 5;
+  private int originalMediaType_;
+  /**
+   *
+   *
+   * <pre>
+   * The original media the speech was recorded on.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType original_media_type = 5;
+   * </code>
+   */
+  public int getOriginalMediaTypeValue() {
+    return originalMediaType_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The original media the speech was recorded on.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType original_media_type = 5;
+   * </code>
+   */
+  public com.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType getOriginalMediaType() {
+    @SuppressWarnings("deprecation")
+    com.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType result =
+        com.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType.valueOf(
+            originalMediaType_);
+    return result == null
+        ? com.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType.UNRECOGNIZED
+        : result;
+  }
+
+  public static final int RECORDING_DEVICE_TYPE_FIELD_NUMBER = 6;
+  private int recordingDeviceType_;
+  /**
+   *
+   *
+   * <pre>
+   * The type of device the speech was recorded with.
+   * </pre>
+   *
+   * <code>
+   * .google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType recording_device_type = 6;
+   * </code>
+   */
+  public int getRecordingDeviceTypeValue() {
+    return recordingDeviceType_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The type of device the speech was recorded with.
+   * </pre>
+   *
+   * <code>
+   * .google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType recording_device_type = 6;
+   * </code>
+   */
+  public com.google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType
+      getRecordingDeviceType() {
+    @SuppressWarnings("deprecation")
+    com.google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType result =
+        com.google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType.valueOf(
+            recordingDeviceType_);
+    return result == null
+        ? com.google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType.UNRECOGNIZED
+        : result;
+  }
+
+  public static final int RECORDING_DEVICE_NAME_FIELD_NUMBER = 7;
+  private volatile java.lang.Object recordingDeviceName_;
+  /**
+   *
+   *
+   * <pre>
+   * The device used to make the recording.  Examples 'Nexus 5X' or
+   * 'Polycom SoundStation IP 6000' or 'POTS' or 'VoIP' or
+   * 'Cardioid Microphone'.
+   * </pre>
+   *
+   * <code>string recording_device_name = 7;</code>
+   */
+  public java.lang.String getRecordingDeviceName() {
+    java.lang.Object ref = recordingDeviceName_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      recordingDeviceName_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * The device used to make the recording.  Examples 'Nexus 5X' or
+   * 'Polycom SoundStation IP 6000' or 'POTS' or 'VoIP' or
+   * 'Cardioid Microphone'.
+   * </pre>
+   *
+   * <code>string recording_device_name = 7;</code>
+   */
+  public com.google.protobuf.ByteString getRecordingDeviceNameBytes() {
+    java.lang.Object ref = recordingDeviceName_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      recordingDeviceName_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int ORIGINAL_MIME_TYPE_FIELD_NUMBER = 8;
+  private volatile java.lang.Object originalMimeType_;
+  /**
+   *
+   *
+   * <pre>
+   * Mime type of the original audio file.  For example `audio/m4a`,
+   * `audio/x-alaw-basic`, `audio/mp3`, `audio/3gpp`.
+   * A list of possible audio mime types is maintained at
+   * http://www.iana.org/assignments/media-types/media-types.xhtml#audio
+   * </pre>
+   *
+   * <code>string original_mime_type = 8;</code>
+   */
+  public java.lang.String getOriginalMimeType() {
+    java.lang.Object ref = originalMimeType_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      originalMimeType_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Mime type of the original audio file.  For example `audio/m4a`,
+   * `audio/x-alaw-basic`, `audio/mp3`, `audio/3gpp`.
+   * A list of possible audio mime types is maintained at
+   * http://www.iana.org/assignments/media-types/media-types.xhtml#audio
+   * </pre>
+   *
+   * <code>string original_mime_type = 8;</code>
+   */
+  public com.google.protobuf.ByteString getOriginalMimeTypeBytes() {
+    java.lang.Object ref = originalMimeType_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      originalMimeType_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int AUDIO_TOPIC_FIELD_NUMBER = 10;
+  private volatile java.lang.Object audioTopic_;
+  /**
+   *
+   *
+   * <pre>
+   * Description of the content. Eg. "Recordings of federal supreme court
+   * hearings from 2012".
+   * </pre>
+   *
+   * <code>string audio_topic = 10;</code>
+   */
+  public java.lang.String getAudioTopic() {
+    java.lang.Object ref = audioTopic_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      audioTopic_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Description of the content. Eg. "Recordings of federal supreme court
+   * hearings from 2012".
+   * </pre>
+   *
+   * <code>string audio_topic = 10;</code>
+   */
+  public com.google.protobuf.ByteString getAudioTopicBytes() {
+    java.lang.Object ref = audioTopic_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      audioTopic_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  private byte memoizedIsInitialized = -1;
+
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+    if (interactionType_
+        != com.google.cloud.speech.v1.RecognitionMetadata.InteractionType
+            .INTERACTION_TYPE_UNSPECIFIED
+            .getNumber()) {
+      output.writeEnum(1, interactionType_);
+    }
+    if (industryNaicsCodeOfAudio_ != 0) {
+      output.writeUInt32(3, industryNaicsCodeOfAudio_);
+    }
+    if (microphoneDistance_
+        != com.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance
+            .MICROPHONE_DISTANCE_UNSPECIFIED
+            .getNumber()) {
+      output.writeEnum(4, microphoneDistance_);
+    }
+    if (originalMediaType_
+        != com.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType
+            .ORIGINAL_MEDIA_TYPE_UNSPECIFIED
+            .getNumber()) {
+      output.writeEnum(5, originalMediaType_);
+    }
+    if (recordingDeviceType_
+        != com.google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType
+            .RECORDING_DEVICE_TYPE_UNSPECIFIED
+            .getNumber()) {
+      output.writeEnum(6, recordingDeviceType_);
+    }
+    if (!getRecordingDeviceNameBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 7, recordingDeviceName_);
+    }
+    if (!getOriginalMimeTypeBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 8, originalMimeType_);
+    }
+    if (!getAudioTopicBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 10, audioTopic_);
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (interactionType_
+        != com.google.cloud.speech.v1.RecognitionMetadata.InteractionType
+            .INTERACTION_TYPE_UNSPECIFIED
+            .getNumber()) {
+      size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, interactionType_);
+    }
+    if (industryNaicsCodeOfAudio_ != 0) {
+      size += com.google.protobuf.CodedOutputStream.computeUInt32Size(3, industryNaicsCodeOfAudio_);
+    }
+    if (microphoneDistance_
+        != com.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance
+            .MICROPHONE_DISTANCE_UNSPECIFIED
+            .getNumber()) {
+      size += com.google.protobuf.CodedOutputStream.computeEnumSize(4, microphoneDistance_);
+    }
+    if (originalMediaType_
+        != com.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType
+            .ORIGINAL_MEDIA_TYPE_UNSPECIFIED
+            .getNumber()) {
+      size += com.google.protobuf.CodedOutputStream.computeEnumSize(5, originalMediaType_);
+    }
+    if (recordingDeviceType_
+        != com.google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType
+            .RECORDING_DEVICE_TYPE_UNSPECIFIED
+            .getNumber()) {
+      size += com.google.protobuf.CodedOutputStream.computeEnumSize(6, recordingDeviceType_);
+    }
+    if (!getRecordingDeviceNameBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, recordingDeviceName_);
+    }
+    if (!getOriginalMimeTypeBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, originalMimeType_);
+    }
+    if (!getAudioTopicBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, audioTopic_);
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (!(obj instanceof com.google.cloud.speech.v1.RecognitionMetadata)) {
+      return super.equals(obj);
+    }
+    com.google.cloud.speech.v1.RecognitionMetadata other =
+        (com.google.cloud.speech.v1.RecognitionMetadata) obj;
+
+    if (interactionType_ != other.interactionType_) return false;
+    if (getIndustryNaicsCodeOfAudio() != other.getIndustryNaicsCodeOfAudio()) return false;
+    if (microphoneDistance_ != other.microphoneDistance_) return false;
+    if (originalMediaType_ != other.originalMediaType_) return false;
+    if (recordingDeviceType_ != other.recordingDeviceType_) return false;
+    if (!getRecordingDeviceName().equals(other.getRecordingDeviceName())) return false;
+    if (!getOriginalMimeType().equals(other.getOriginalMimeType())) return false;
+    if (!getAudioTopic().equals(other.getAudioTopic())) return false;
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + INTERACTION_TYPE_FIELD_NUMBER;
+    hash = (53 * hash) + interactionType_;
+    hash = (37 * hash) + INDUSTRY_NAICS_CODE_OF_AUDIO_FIELD_NUMBER;
+    hash = (53 * hash) + getIndustryNaicsCodeOfAudio();
+    hash = (37 * hash) + MICROPHONE_DISTANCE_FIELD_NUMBER;
+    hash = (53 * hash) + microphoneDistance_;
+    hash = (37 * hash) + ORIGINAL_MEDIA_TYPE_FIELD_NUMBER;
+    hash = (53 * hash) + originalMediaType_;
+    hash = (37 * hash) + RECORDING_DEVICE_TYPE_FIELD_NUMBER;
+    hash = (53 * hash) + recordingDeviceType_;
+    hash = (37 * hash) + RECORDING_DEVICE_NAME_FIELD_NUMBER;
+    hash = (53 * hash) + getRecordingDeviceName().hashCode();
+    hash = (37 * hash) + ORIGINAL_MIME_TYPE_FIELD_NUMBER;
+    hash = (53 * hash) + getOriginalMimeType().hashCode();
+    hash = (37 * hash) + AUDIO_TOPIC_FIELD_NUMBER;
+    hash = (53 * hash) + getAudioTopic().hashCode();
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.google.cloud.speech.v1.RecognitionMetadata parseFrom(java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.speech.v1.RecognitionMetadata parseFrom(
+      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.speech.v1.RecognitionMetadata parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.speech.v1.RecognitionMetadata parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.speech.v1.RecognitionMetadata parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+
+  public static com.google.cloud.speech.v1.RecognitionMetadata parseFrom(
+      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+
+  public static com.google.cloud.speech.v1.RecognitionMetadata parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.speech.v1.RecognitionMetadata parseFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.speech.v1.RecognitionMetadata parseDelimitedFrom(
+      java.io.InputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.speech.v1.RecognitionMetadata parseDelimitedFrom(
+      java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  public static com.google.cloud.speech.v1.RecognitionMetadata parseFrom(
+      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+  }
+
+  public static com.google.cloud.speech.v1.RecognitionMetadata parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
+        PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() {
+    return newBuilder();
+  }
+
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+
+  public static Builder newBuilder(com.google.cloud.speech.v1.RecognitionMetadata prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Description of audio data to be recognized.
+   * </pre>
+   *
+   * Protobuf type {@code google.cloud.speech.v1.RecognitionMetadata}
+   */
+  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
+      implements
+      // @@protoc_insertion_point(builder_implements:google.cloud.speech.v1.RecognitionMetadata)
+      com.google.cloud.speech.v1.RecognitionMetadataOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+      return com.google.cloud.speech.v1.SpeechProto
+          .internal_static_google_cloud_speech_v1_RecognitionMetadata_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.cloud.speech.v1.SpeechProto
+          .internal_static_google_cloud_speech_v1_RecognitionMetadata_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.google.cloud.speech.v1.RecognitionMetadata.class,
+              com.google.cloud.speech.v1.RecognitionMetadata.Builder.class);
+    }
+
+    // Construct using com.google.cloud.speech.v1.RecognitionMetadata.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
+    }
+
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      interactionType_ = 0;
+
+      industryNaicsCodeOfAudio_ = 0;
+
+      microphoneDistance_ = 0;
+
+      originalMediaType_ = 0;
+
+      recordingDeviceType_ = 0;
+
+      recordingDeviceName_ = "";
+
+      originalMimeType_ = "";
+
+      audioTopic_ = "";
+
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+      return com.google.cloud.speech.v1.SpeechProto
+          .internal_static_google_cloud_speech_v1_RecognitionMetadata_descriptor;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.speech.v1.RecognitionMetadata getDefaultInstanceForType() {
+      return com.google.cloud.speech.v1.RecognitionMetadata.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.google.cloud.speech.v1.RecognitionMetadata build() {
+      com.google.cloud.speech.v1.RecognitionMetadata result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.google.cloud.speech.v1.RecognitionMetadata buildPartial() {
+      com.google.cloud.speech.v1.RecognitionMetadata result =
+          new com.google.cloud.speech.v1.RecognitionMetadata(this);
+      result.interactionType_ = interactionType_;
+      result.industryNaicsCodeOfAudio_ = industryNaicsCodeOfAudio_;
+      result.microphoneDistance_ = microphoneDistance_;
+      result.originalMediaType_ = originalMediaType_;
+      result.recordingDeviceType_ = recordingDeviceType_;
+      result.recordingDeviceName_ = recordingDeviceName_;
+      result.originalMimeType_ = originalMimeType_;
+      result.audioTopic_ = audioTopic_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.setField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+
+    @java.lang.Override
+    public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.google.cloud.speech.v1.RecognitionMetadata) {
+        return mergeFrom((com.google.cloud.speech.v1.RecognitionMetadata) other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.google.cloud.speech.v1.RecognitionMetadata other) {
+      if (other == com.google.cloud.speech.v1.RecognitionMetadata.getDefaultInstance()) return this;
+      if (other.interactionType_ != 0) {
+        setInteractionTypeValue(other.getInteractionTypeValue());
+      }
+      if (other.getIndustryNaicsCodeOfAudio() != 0) {
+        setIndustryNaicsCodeOfAudio(other.getIndustryNaicsCodeOfAudio());
+      }
+      if (other.microphoneDistance_ != 0) {
+        setMicrophoneDistanceValue(other.getMicrophoneDistanceValue());
+      }
+      if (other.originalMediaType_ != 0) {
+        setOriginalMediaTypeValue(other.getOriginalMediaTypeValue());
+      }
+      if (other.recordingDeviceType_ != 0) {
+        setRecordingDeviceTypeValue(other.getRecordingDeviceTypeValue());
+      }
+      if (!other.getRecordingDeviceName().isEmpty()) {
+        recordingDeviceName_ = other.recordingDeviceName_;
+        onChanged();
+      }
+      if (!other.getOriginalMimeType().isEmpty()) {
+        originalMimeType_ = other.originalMimeType_;
+        onChanged();
+      }
+      if (!other.getAudioTopic().isEmpty()) {
+        audioTopic_ = other.audioTopic_;
+        onChanged();
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.google.cloud.speech.v1.RecognitionMetadata parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.google.cloud.speech.v1.RecognitionMetadata) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private int interactionType_ = 0;
+    /**
+     *
+     *
+     * <pre>
+     * The use case most closely describing the audio content to be recognized.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.InteractionType interaction_type = 1;
+     * </code>
+     */
+    public int getInteractionTypeValue() {
+      return interactionType_;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The use case most closely describing the audio content to be recognized.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.InteractionType interaction_type = 1;
+     * </code>
+     */
+    public Builder setInteractionTypeValue(int value) {
+      interactionType_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The use case most closely describing the audio content to be recognized.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.InteractionType interaction_type = 1;
+     * </code>
+     */
+    public com.google.cloud.speech.v1.RecognitionMetadata.InteractionType getInteractionType() {
+      @SuppressWarnings("deprecation")
+      com.google.cloud.speech.v1.RecognitionMetadata.InteractionType result =
+          com.google.cloud.speech.v1.RecognitionMetadata.InteractionType.valueOf(interactionType_);
+      return result == null
+          ? com.google.cloud.speech.v1.RecognitionMetadata.InteractionType.UNRECOGNIZED
+          : result;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The use case most closely describing the audio content to be recognized.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.InteractionType interaction_type = 1;
+     * </code>
+     */
+    public Builder setInteractionType(
+        com.google.cloud.speech.v1.RecognitionMetadata.InteractionType value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      interactionType_ = value.getNumber();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The use case most closely describing the audio content to be recognized.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.InteractionType interaction_type = 1;
+     * </code>
+     */
+    public Builder clearInteractionType() {
+
+      interactionType_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private int industryNaicsCodeOfAudio_;
+    /**
+     *
+     *
+     * <pre>
+     * The industry vertical to which this speech recognition request most
+     * closely applies. This is most indicative of the topics contained
+     * in the audio.  Use the 6-digit NAICS code to identify the industry
+     * vertical - see https://www.naics.com/search/.
+     * </pre>
+     *
+     * <code>uint32 industry_naics_code_of_audio = 3;</code>
+     */
+    public int getIndustryNaicsCodeOfAudio() {
+      return industryNaicsCodeOfAudio_;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The industry vertical to which this speech recognition request most
+     * closely applies. This is most indicative of the topics contained
+     * in the audio.  Use the 6-digit NAICS code to identify the industry
+     * vertical - see https://www.naics.com/search/.
+     * </pre>
+     *
+     * <code>uint32 industry_naics_code_of_audio = 3;</code>
+     */
+    public Builder setIndustryNaicsCodeOfAudio(int value) {
+
+      industryNaicsCodeOfAudio_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The industry vertical to which this speech recognition request most
+     * closely applies. This is most indicative of the topics contained
+     * in the audio.  Use the 6-digit NAICS code to identify the industry
+     * vertical - see https://www.naics.com/search/.
+     * </pre>
+     *
+     * <code>uint32 industry_naics_code_of_audio = 3;</code>
+     */
+    public Builder clearIndustryNaicsCodeOfAudio() {
+
+      industryNaicsCodeOfAudio_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private int microphoneDistance_ = 0;
+    /**
+     *
+     *
+     * <pre>
+     * The audio type that most closely describes the audio being recognized.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance microphone_distance = 4;
+     * </code>
+     */
+    public int getMicrophoneDistanceValue() {
+      return microphoneDistance_;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The audio type that most closely describes the audio being recognized.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance microphone_distance = 4;
+     * </code>
+     */
+    public Builder setMicrophoneDistanceValue(int value) {
+      microphoneDistance_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The audio type that most closely describes the audio being recognized.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance microphone_distance = 4;
+     * </code>
+     */
+    public com.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance
+        getMicrophoneDistance() {
+      @SuppressWarnings("deprecation")
+      com.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance result =
+          com.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance.valueOf(
+              microphoneDistance_);
+      return result == null
+          ? com.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance.UNRECOGNIZED
+          : result;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The audio type that most closely describes the audio being recognized.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance microphone_distance = 4;
+     * </code>
+     */
+    public Builder setMicrophoneDistance(
+        com.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      microphoneDistance_ = value.getNumber();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The audio type that most closely describes the audio being recognized.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance microphone_distance = 4;
+     * </code>
+     */
+    public Builder clearMicrophoneDistance() {
+
+      microphoneDistance_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private int originalMediaType_ = 0;
+    /**
+     *
+     *
+     * <pre>
+     * The original media the speech was recorded on.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType original_media_type = 5;
+     * </code>
+     */
+    public int getOriginalMediaTypeValue() {
+      return originalMediaType_;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The original media the speech was recorded on.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType original_media_type = 5;
+     * </code>
+     */
+    public Builder setOriginalMediaTypeValue(int value) {
+      originalMediaType_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The original media the speech was recorded on.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType original_media_type = 5;
+     * </code>
+     */
+    public com.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType getOriginalMediaType() {
+      @SuppressWarnings("deprecation")
+      com.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType result =
+          com.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType.valueOf(
+              originalMediaType_);
+      return result == null
+          ? com.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType.UNRECOGNIZED
+          : result;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The original media the speech was recorded on.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType original_media_type = 5;
+     * </code>
+     */
+    public Builder setOriginalMediaType(
+        com.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      originalMediaType_ = value.getNumber();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The original media the speech was recorded on.
+     * </pre>
+     *
+     * <code>.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType original_media_type = 5;
+     * </code>
+     */
+    public Builder clearOriginalMediaType() {
+
+      originalMediaType_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private int recordingDeviceType_ = 0;
+    /**
+     *
+     *
+     * <pre>
+     * The type of device the speech was recorded with.
+     * </pre>
+     *
+     * <code>
+     * .google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType recording_device_type = 6;
+     * </code>
+     */
+    public int getRecordingDeviceTypeValue() {
+      return recordingDeviceType_;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The type of device the speech was recorded with.
+     * </pre>
+     *
+     * <code>
+     * .google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType recording_device_type = 6;
+     * </code>
+     */
+    public Builder setRecordingDeviceTypeValue(int value) {
+      recordingDeviceType_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The type of device the speech was recorded with.
+     * </pre>
+     *
+     * <code>
+     * .google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType recording_device_type = 6;
+     * </code>
+     */
+    public com.google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType
+        getRecordingDeviceType() {
+      @SuppressWarnings("deprecation")
+      com.google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType result =
+          com.google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType.valueOf(
+              recordingDeviceType_);
+      return result == null
+          ? com.google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType.UNRECOGNIZED
+          : result;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The type of device the speech was recorded with.
+     * </pre>
+     *
+     * <code>
+     * .google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType recording_device_type = 6;
+     * </code>
+     */
+    public Builder setRecordingDeviceType(
+        com.google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      recordingDeviceType_ = value.getNumber();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The type of device the speech was recorded with.
+     * </pre>
+     *
+     * <code>
+     * .google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType recording_device_type = 6;
+     * </code>
+     */
+    public Builder clearRecordingDeviceType() {
+
+      recordingDeviceType_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object recordingDeviceName_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * The device used to make the recording.  Examples 'Nexus 5X' or
+     * 'Polycom SoundStation IP 6000' or 'POTS' or 'VoIP' or
+     * 'Cardioid Microphone'.
+     * </pre>
+     *
+     * <code>string recording_device_name = 7;</code>
+     */
+    public java.lang.String getRecordingDeviceName() {
+      java.lang.Object ref = recordingDeviceName_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        recordingDeviceName_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The device used to make the recording.  Examples 'Nexus 5X' or
+     * 'Polycom SoundStation IP 6000' or 'POTS' or 'VoIP' or
+     * 'Cardioid Microphone'.
+     * </pre>
+     *
+     * <code>string recording_device_name = 7;</code>
+     */
+    public com.google.protobuf.ByteString getRecordingDeviceNameBytes() {
+      java.lang.Object ref = recordingDeviceName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        recordingDeviceName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The device used to make the recording.  Examples 'Nexus 5X' or
+     * 'Polycom SoundStation IP 6000' or 'POTS' or 'VoIP' or
+     * 'Cardioid Microphone'.
+     * </pre>
+     *
+     * <code>string recording_device_name = 7;</code>
+     */
+    public Builder setRecordingDeviceName(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      recordingDeviceName_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The device used to make the recording.  Examples 'Nexus 5X' or
+     * 'Polycom SoundStation IP 6000' or 'POTS' or 'VoIP' or
+     * 'Cardioid Microphone'.
+     * </pre>
+     *
+     * <code>string recording_device_name = 7;</code>
+     */
+    public Builder clearRecordingDeviceName() {
+
+      recordingDeviceName_ = getDefaultInstance().getRecordingDeviceName();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * The device used to make the recording.  Examples 'Nexus 5X' or
+     * 'Polycom SoundStation IP 6000' or 'POTS' or 'VoIP' or
+     * 'Cardioid Microphone'.
+     * </pre>
+     *
+     * <code>string recording_device_name = 7;</code>
+     */
+    public Builder setRecordingDeviceNameBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      recordingDeviceName_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object originalMimeType_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Mime type of the original audio file.  For example `audio/m4a`,
+     * `audio/x-alaw-basic`, `audio/mp3`, `audio/3gpp`.
+     * A list of possible audio mime types is maintained at
+     * http://www.iana.org/assignments/media-types/media-types.xhtml#audio
+     * </pre>
+     *
+     * <code>string original_mime_type = 8;</code>
+     */
+    public java.lang.String getOriginalMimeType() {
+      java.lang.Object ref = originalMimeType_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        originalMimeType_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Mime type of the original audio file.  For example `audio/m4a`,
+     * `audio/x-alaw-basic`, `audio/mp3`, `audio/3gpp`.
+     * A list of possible audio mime types is maintained at
+     * http://www.iana.org/assignments/media-types/media-types.xhtml#audio
+     * </pre>
+     *
+     * <code>string original_mime_type = 8;</code>
+     */
+    public com.google.protobuf.ByteString getOriginalMimeTypeBytes() {
+      java.lang.Object ref = originalMimeType_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        originalMimeType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Mime type of the original audio file.  For example `audio/m4a`,
+     * `audio/x-alaw-basic`, `audio/mp3`, `audio/3gpp`.
+     * A list of possible audio mime types is maintained at
+     * http://www.iana.org/assignments/media-types/media-types.xhtml#audio
+     * </pre>
+     *
+     * <code>string original_mime_type = 8;</code>
+     */
+    public Builder setOriginalMimeType(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      originalMimeType_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Mime type of the original audio file.  For example `audio/m4a`,
+     * `audio/x-alaw-basic`, `audio/mp3`, `audio/3gpp`.
+     * A list of possible audio mime types is maintained at
+     * http://www.iana.org/assignments/media-types/media-types.xhtml#audio
+     * </pre>
+     *
+     * <code>string original_mime_type = 8;</code>
+     */
+    public Builder clearOriginalMimeType() {
+
+      originalMimeType_ = getDefaultInstance().getOriginalMimeType();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Mime type of the original audio file.  For example `audio/m4a`,
+     * `audio/x-alaw-basic`, `audio/mp3`, `audio/3gpp`.
+     * A list of possible audio mime types is maintained at
+     * http://www.iana.org/assignments/media-types/media-types.xhtml#audio
+     * </pre>
+     *
+     * <code>string original_mime_type = 8;</code>
+     */
+    public Builder setOriginalMimeTypeBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      originalMimeType_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object audioTopic_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Description of the content. Eg. "Recordings of federal supreme court
+     * hearings from 2012".
+     * </pre>
+     *
+     * <code>string audio_topic = 10;</code>
+     */
+    public java.lang.String getAudioTopic() {
+      java.lang.Object ref = audioTopic_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        audioTopic_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Description of the content. Eg. "Recordings of federal supreme court
+     * hearings from 2012".
+     * </pre>
+     *
+     * <code>string audio_topic = 10;</code>
+     */
+    public com.google.protobuf.ByteString getAudioTopicBytes() {
+      java.lang.Object ref = audioTopic_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        audioTopic_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Description of the content. Eg. "Recordings of federal supreme court
+     * hearings from 2012".
+     * </pre>
+     *
+     * <code>string audio_topic = 10;</code>
+     */
+    public Builder setAudioTopic(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      audioTopic_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Description of the content. Eg. "Recordings of federal supreme court
+     * hearings from 2012".
+     * </pre>
+     *
+     * <code>string audio_topic = 10;</code>
+     */
+    public Builder clearAudioTopic() {
+
+      audioTopic_ = getDefaultInstance().getAudioTopic();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Description of the content. Eg. "Recordings of federal supreme court
+     * hearings from 2012".
+     * </pre>
+     *
+     * <code>string audio_topic = 10;</code>
+     */
+    public Builder setAudioTopicBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      audioTopic_ = value;
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+    // @@protoc_insertion_point(builder_scope:google.cloud.speech.v1.RecognitionMetadata)
+  }
+
+  // @@protoc_insertion_point(class_scope:google.cloud.speech.v1.RecognitionMetadata)
+  private static final com.google.cloud.speech.v1.RecognitionMetadata DEFAULT_INSTANCE;
+
+  static {
+    DEFAULT_INSTANCE = new com.google.cloud.speech.v1.RecognitionMetadata();
+  }
+
+  public static com.google.cloud.speech.v1.RecognitionMetadata getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<RecognitionMetadata> PARSER =
+      new com.google.protobuf.AbstractParser<RecognitionMetadata>() {
+        @java.lang.Override
+        public RecognitionMetadata parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          return new RecognitionMetadata(input, extensionRegistry);
+        }
+      };
+
+  public static com.google.protobuf.Parser<RecognitionMetadata> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<RecognitionMetadata> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.cloud.speech.v1.RecognitionMetadata getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+}
diff --git a/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/RecognitionMetadataOrBuilder.java b/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/RecognitionMetadataOrBuilder.java
new file mode 100644
index 000000000000..f8cce0c1bb40
--- /dev/null
+++ b/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/RecognitionMetadataOrBuilder.java
@@ -0,0 +1,191 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/cloud/speech/v1/cloud_speech.proto
+
+package com.google.cloud.speech.v1;
+
+public interface RecognitionMetadataOrBuilder
+    extends
+    // @@protoc_insertion_point(interface_extends:google.cloud.speech.v1.RecognitionMetadata)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   *
+   *
+   * <pre>
+   * The use case most closely describing the audio content to be recognized.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata.InteractionType interaction_type = 1;</code>
+   */
+  int getInteractionTypeValue();
+  /**
+   *
+   *
+   * <pre>
+   * The use case most closely describing the audio content to be recognized.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata.InteractionType interaction_type = 1;</code>
+   */
+  com.google.cloud.speech.v1.RecognitionMetadata.InteractionType getInteractionType();
+
+  /**
+   *
+   *
+   * <pre>
+   * The industry vertical to which this speech recognition request most
+   * closely applies. This is most indicative of the topics contained
+   * in the audio.  Use the 6-digit NAICS code to identify the industry
+   * vertical - see https://www.naics.com/search/.
+   * </pre>
+   *
+   * <code>uint32 industry_naics_code_of_audio = 3;</code>
+   */
+  int getIndustryNaicsCodeOfAudio();
+
+  /**
+   *
+   *
+   * <pre>
+   * The audio type that most closely describes the audio being recognized.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance microphone_distance = 4;
+   * </code>
+   */
+  int getMicrophoneDistanceValue();
+  /**
+   *
+   *
+   * <pre>
+   * The audio type that most closely describes the audio being recognized.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance microphone_distance = 4;
+   * </code>
+   */
+  com.google.cloud.speech.v1.RecognitionMetadata.MicrophoneDistance getMicrophoneDistance();
+
+  /**
+   *
+   *
+   * <pre>
+   * The original media the speech was recorded on.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType original_media_type = 5;
+   * </code>
+   */
+  int getOriginalMediaTypeValue();
+  /**
+   *
+   *
+   * <pre>
+   * The original media the speech was recorded on.
+   * </pre>
+   *
+   * <code>.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType original_media_type = 5;
+   * </code>
+   */
+  com.google.cloud.speech.v1.RecognitionMetadata.OriginalMediaType getOriginalMediaType();
+
+  /**
+   *
+   *
+   * <pre>
+   * The type of device the speech was recorded with.
+   * </pre>
+   *
+   * <code>
+   * .google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType recording_device_type = 6;
+   * </code>
+   */
+  int getRecordingDeviceTypeValue();
+  /**
+   *
+   *
+   * <pre>
+   * The type of device the speech was recorded with.
+   * </pre>
+   *
+   * <code>
+   * .google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType recording_device_type = 6;
+   * </code>
+   */
+  com.google.cloud.speech.v1.RecognitionMetadata.RecordingDeviceType getRecordingDeviceType();
+
+  /**
+   *
+   *
+   * <pre>
+   * The device used to make the recording.  Examples 'Nexus 5X' or
+   * 'Polycom SoundStation IP 6000' or 'POTS' or 'VoIP' or
+   * 'Cardioid Microphone'.
+   * </pre>
+   *
+   * <code>string recording_device_name = 7;</code>
+   */
+  java.lang.String getRecordingDeviceName();
+  /**
+   *
+   *
+   * <pre>
+   * The device used to make the recording.  Examples 'Nexus 5X' or
+   * 'Polycom SoundStation IP 6000' or 'POTS' or 'VoIP' or
+   * 'Cardioid Microphone'.
+   * </pre>
+   *
+   * <code>string recording_device_name = 7;</code>
+   */
+  com.google.protobuf.ByteString getRecordingDeviceNameBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * Mime type of the original audio file.  For example `audio/m4a`,
+   * `audio/x-alaw-basic`, `audio/mp3`, `audio/3gpp`.
+   * A list of possible audio mime types is maintained at
+   * http://www.iana.org/assignments/media-types/media-types.xhtml#audio
+   * </pre>
+   *
+   * <code>string original_mime_type = 8;</code>
+   */
+  java.lang.String getOriginalMimeType();
+  /**
+   *
+   *
+   * <pre>
+   * Mime type of the original audio file.  For example `audio/m4a`,
+   * `audio/x-alaw-basic`, `audio/mp3`, `audio/3gpp`.
+   * A list of possible audio mime types is maintained at
+   * http://www.iana.org/assignments/media-types/media-types.xhtml#audio
+   * </pre>
+   *
+   * <code>string original_mime_type = 8;</code>
+   */
+  com.google.protobuf.ByteString getOriginalMimeTypeBytes();
+
+  /**
+   *
+   *
+   * <pre>
+   * Description of the content. Eg. "Recordings of federal supreme court
+   * hearings from 2012".
+   * </pre>
+   *
+   * <code>string audio_topic = 10;</code>
+   */
+  java.lang.String getAudioTopic();
+  /**
+   *
+   *
+   * <pre>
+   * Description of the content. Eg. "Recordings of federal supreme court
+   * hearings from 2012".
+   * </pre>
+   *
+   * <code>string audio_topic = 10;</code>
+   */
+  com.google.protobuf.ByteString getAudioTopicBytes();
+}
diff --git a/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/SpeechProto.java b/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/SpeechProto.java
index 73fe98c9ee00..6c5d47f403a4 100644
--- a/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/SpeechProto.java
+++ b/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/SpeechProto.java
@@ -32,6 +32,10 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r
       internal_static_google_cloud_speech_v1_RecognitionConfig_descriptor;
   static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_google_cloud_speech_v1_RecognitionConfig_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_cloud_speech_v1_RecognitionMetadata_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_cloud_speech_v1_RecognitionMetadata_fieldAccessorTable;
   static final com.google.protobuf.Descriptors.Descriptor
       internal_static_google_cloud_speech_v1_SpeechContext_descriptor;
   static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
@@ -84,86 +88,114 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
       "\n)google/cloud/speech/v1/cloud_speech.pr"
           + "oto\022\026google.cloud.speech.v1\032\034google/api/"
           + "annotations.proto\032#google/longrunning/op"
-          + "erations.proto\032\031google/protobuf/any.prot"
-          + "o\032\036google/protobuf/duration.proto\032\033googl"
-          + "e/protobuf/empty.proto\032\037google/protobuf/"
-          + "timestamp.proto\032\027google/rpc/status.proto"
-          + "\"\206\001\n\020RecognizeRequest\0229\n\006config\030\001 \001(\0132)."
-          + "google.cloud.speech.v1.RecognitionConfig"
-          + "\0227\n\005audio\030\002 \001(\0132(.google.cloud.speech.v1"
-          + ".RecognitionAudio\"\221\001\n\033LongRunningRecogni"
-          + "zeRequest\0229\n\006config\030\001 \001(\0132).google.cloud"
-          + ".speech.v1.RecognitionConfig\0227\n\005audio\030\002 "
-          + "\001(\0132(.google.cloud.speech.v1.Recognition"
-          + "Audio\"\231\001\n\031StreamingRecognizeRequest\022N\n\020s"
-          + "treaming_config\030\001 \001(\01322.google.cloud.spe"
-          + "ech.v1.StreamingRecognitionConfigH\000\022\027\n\ra"
-          + "udio_content\030\002 \001(\014H\000B\023\n\021streaming_reques"
-          + "t\"\212\001\n\032StreamingRecognitionConfig\0229\n\006conf"
-          + "ig\030\001 \001(\0132).google.cloud.speech.v1.Recogn"
-          + "itionConfig\022\030\n\020single_utterance\030\002 \001(\010\022\027\n"
-          + "\017interim_results\030\003 \001(\010\"\315\004\n\021RecognitionCo"
-          + "nfig\022I\n\010encoding\030\001 \001(\01627.google.cloud.sp"
-          + "eech.v1.RecognitionConfig.AudioEncoding\022"
-          + "\031\n\021sample_rate_hertz\030\002 \001(\005\022\033\n\023audio_chan"
-          + "nel_count\030\007 \001(\005\022/\n\'enable_separate_recog"
-          + "nition_per_channel\030\014 \001(\010\022\025\n\rlanguage_cod"
-          + "e\030\003 \001(\t\022\030\n\020max_alternatives\030\004 \001(\005\022\030\n\020pro"
-          + "fanity_filter\030\005 \001(\010\022>\n\017speech_contexts\030\006"
-          + " \003(\0132%.google.cloud.speech.v1.SpeechCont"
-          + "ext\022 \n\030enable_word_time_offsets\030\010 \001(\010\022$\n"
-          + "\034enable_automatic_punctuation\030\013 \001(\010\022\r\n\005m"
-          + "odel\030\r \001(\t\022\024\n\014use_enhanced\030\016 \001(\010\"\213\001\n\rAud"
-          + "ioEncoding\022\030\n\024ENCODING_UNSPECIFIED\020\000\022\014\n\010"
-          + "LINEAR16\020\001\022\010\n\004FLAC\020\002\022\t\n\005MULAW\020\003\022\007\n\003AMR\020\004"
-          + "\022\n\n\006AMR_WB\020\005\022\014\n\010OGG_OPUS\020\006\022\032\n\026SPEEX_WITH"
-          + "_HEADER_BYTE\020\007\" \n\rSpeechContext\022\017\n\007phras"
-          + "es\030\001 \003(\t\"D\n\020RecognitionAudio\022\021\n\007content\030"
-          + "\001 \001(\014H\000\022\r\n\003uri\030\002 \001(\tH\000B\016\n\014audio_source\"U"
-          + "\n\021RecognizeResponse\022@\n\007results\030\002 \003(\0132/.g"
-          + "oogle.cloud.speech.v1.SpeechRecognitionR"
-          + "esult\"`\n\034LongRunningRecognizeResponse\022@\n"
-          + "\007results\030\002 \003(\0132/.google.cloud.speech.v1."
-          + "SpeechRecognitionResult\"\236\001\n\034LongRunningR"
-          + "ecognizeMetadata\022\030\n\020progress_percent\030\001 \001"
-          + "(\005\022.\n\nstart_time\030\002 \001(\0132\032.google.protobuf"
-          + ".Timestamp\0224\n\020last_update_time\030\003 \001(\0132\032.g"
-          + "oogle.protobuf.Timestamp\"\261\002\n\032StreamingRe"
-          + "cognizeResponse\022!\n\005error\030\001 \001(\0132\022.google."
-          + "rpc.Status\022C\n\007results\030\002 \003(\01322.google.clo"
-          + "ud.speech.v1.StreamingRecognitionResult\022"
-          + "]\n\021speech_event_type\030\004 \001(\0162B.google.clou"
-          + "d.speech.v1.StreamingRecognizeResponse.S"
-          + "peechEventType\"L\n\017SpeechEventType\022\034\n\030SPE"
-          + "ECH_EVENT_UNSPECIFIED\020\000\022\033\n\027END_OF_SINGLE"
-          + "_UTTERANCE\020\001\"\242\001\n\032StreamingRecognitionRes"
-          + "ult\022J\n\014alternatives\030\001 \003(\01324.google.cloud"
-          + ".speech.v1.SpeechRecognitionAlternative\022"
-          + "\020\n\010is_final\030\002 \001(\010\022\021\n\tstability\030\003 \001(\002\022\023\n\013"
-          + "channel_tag\030\005 \001(\005\"z\n\027SpeechRecognitionRe"
-          + "sult\022J\n\014alternatives\030\001 \003(\01324.google.clou"
-          + "d.speech.v1.SpeechRecognitionAlternative"
-          + "\022\023\n\013channel_tag\030\002 \001(\005\"w\n\034SpeechRecogniti"
-          + "onAlternative\022\022\n\ntranscript\030\001 \001(\t\022\022\n\ncon"
-          + "fidence\030\002 \001(\002\022/\n\005words\030\003 \003(\0132 .google.cl"
-          + "oud.speech.v1.WordInfo\"t\n\010WordInfo\022-\n\nst"
-          + "art_time\030\001 \001(\0132\031.google.protobuf.Duratio"
-          + "n\022+\n\010end_time\030\002 \001(\0132\031.google.protobuf.Du"
-          + "ration\022\014\n\004word\030\003 \001(\t2\251\003\n\006Speech\022\201\001\n\tReco"
-          + "gnize\022(.google.cloud.speech.v1.Recognize"
-          + "Request\032).google.cloud.speech.v1.Recogni"
-          + "zeResponse\"\037\202\323\344\223\002\031\"\024/v1/speech:recognize"
-          + ":\001*\022\226\001\n\024LongRunningRecognize\0223.google.cl"
-          + "oud.speech.v1.LongRunningRecognizeReques"
-          + "t\032\035.google.longrunning.Operation\"*\202\323\344\223\002$"
-          + "\"\037/v1/speech:longrunningrecognize:\001*\022\201\001\n"
-          + "\022StreamingRecognize\0221.google.cloud.speec"
-          + "h.v1.StreamingRecognizeRequest\0322.google."
-          + "cloud.speech.v1.StreamingRecognizeRespon"
-          + "se\"\000(\0010\001Bl\n\032com.google.cloud.speech.v1B\013"
-          + "SpeechProtoP\001Z<google.golang.org/genprot"
-          + "o/googleapis/cloud/speech/v1;speech\370\001\001b\006"
-          + "proto3"
+          + "erations.proto\032\036google/protobuf/duration"
+          + ".proto\032\037google/protobuf/timestamp.proto\032"
+          + "\027google/rpc/status.proto\"\206\001\n\020RecognizeRe"
+          + "quest\0229\n\006config\030\001 \001(\0132).google.cloud.spe"
+          + "ech.v1.RecognitionConfig\0227\n\005audio\030\002 \001(\0132"
+          + "(.google.cloud.speech.v1.RecognitionAudi"
+          + "o\"\221\001\n\033LongRunningRecognizeRequest\0229\n\006con"
+          + "fig\030\001 \001(\0132).google.cloud.speech.v1.Recog"
+          + "nitionConfig\0227\n\005audio\030\002 \001(\0132(.google.clo"
+          + "ud.speech.v1.RecognitionAudio\"\231\001\n\031Stream"
+          + "ingRecognizeRequest\022N\n\020streaming_config\030"
+          + "\001 \001(\01322.google.cloud.speech.v1.Streaming"
+          + "RecognitionConfigH\000\022\027\n\raudio_content\030\002 \001"
+          + "(\014H\000B\023\n\021streaming_request\"\212\001\n\032StreamingR"
+          + "ecognitionConfig\0229\n\006config\030\001 \001(\0132).googl"
+          + "e.cloud.speech.v1.RecognitionConfig\022\030\n\020s"
+          + "ingle_utterance\030\002 \001(\010\022\027\n\017interim_results"
+          + "\030\003 \001(\010\"\214\005\n\021RecognitionConfig\022I\n\010encoding"
+          + "\030\001 \001(\01627.google.cloud.speech.v1.Recognit"
+          + "ionConfig.AudioEncoding\022\031\n\021sample_rate_h"
+          + "ertz\030\002 \001(\005\022\033\n\023audio_channel_count\030\007 \001(\005\022"
+          + "/\n\'enable_separate_recognition_per_chann"
+          + "el\030\014 \001(\010\022\025\n\rlanguage_code\030\003 \001(\t\022\030\n\020max_a"
+          + "lternatives\030\004 \001(\005\022\030\n\020profanity_filter\030\005 "
+          + "\001(\010\022>\n\017speech_contexts\030\006 \003(\0132%.google.cl"
+          + "oud.speech.v1.SpeechContext\022 \n\030enable_wo"
+          + "rd_time_offsets\030\010 \001(\010\022$\n\034enable_automati"
+          + "c_punctuation\030\013 \001(\010\022=\n\010metadata\030\t \001(\0132+."
+          + "google.cloud.speech.v1.RecognitionMetada"
+          + "ta\022\r\n\005model\030\r \001(\t\022\024\n\014use_enhanced\030\016 \001(\010\""
+          + "\213\001\n\rAudioEncoding\022\030\n\024ENCODING_UNSPECIFIE"
+          + "D\020\000\022\014\n\010LINEAR16\020\001\022\010\n\004FLAC\020\002\022\t\n\005MULAW\020\003\022\007"
+          + "\n\003AMR\020\004\022\n\n\006AMR_WB\020\005\022\014\n\010OGG_OPUS\020\006\022\032\n\026SPE"
+          + "EX_WITH_HEADER_BYTE\020\007\"\240\010\n\023RecognitionMet"
+          + "adata\022U\n\020interaction_type\030\001 \001(\0162;.google"
+          + ".cloud.speech.v1.RecognitionMetadata.Int"
+          + "eractionType\022$\n\034industry_naics_code_of_a"
+          + "udio\030\003 \001(\r\022[\n\023microphone_distance\030\004 \001(\0162"
+          + ">.google.cloud.speech.v1.RecognitionMeta"
+          + "data.MicrophoneDistance\022Z\n\023original_medi"
+          + "a_type\030\005 \001(\0162=.google.cloud.speech.v1.Re"
+          + "cognitionMetadata.OriginalMediaType\022^\n\025r"
+          + "ecording_device_type\030\006 \001(\0162?.google.clou"
+          + "d.speech.v1.RecognitionMetadata.Recordin"
+          + "gDeviceType\022\035\n\025recording_device_name\030\007 \001"
+          + "(\t\022\032\n\022original_mime_type\030\010 \001(\t\022\023\n\013audio_"
+          + "topic\030\n \001(\t\"\305\001\n\017InteractionType\022 \n\034INTER"
+          + "ACTION_TYPE_UNSPECIFIED\020\000\022\016\n\nDISCUSSION\020"
+          + "\001\022\020\n\014PRESENTATION\020\002\022\016\n\nPHONE_CALL\020\003\022\r\n\tV"
+          + "OICEMAIL\020\004\022\033\n\027PROFESSIONALLY_PRODUCED\020\005\022"
+          + "\020\n\014VOICE_SEARCH\020\006\022\021\n\rVOICE_COMMAND\020\007\022\r\n\t"
+          + "DICTATION\020\010\"d\n\022MicrophoneDistance\022#\n\037MIC"
+          + "ROPHONE_DISTANCE_UNSPECIFIED\020\000\022\r\n\tNEARFI"
+          + "ELD\020\001\022\014\n\010MIDFIELD\020\002\022\014\n\010FARFIELD\020\003\"N\n\021Ori"
+          + "ginalMediaType\022#\n\037ORIGINAL_MEDIA_TYPE_UN"
+          + "SPECIFIED\020\000\022\t\n\005AUDIO\020\001\022\t\n\005VIDEO\020\002\"\244\001\n\023Re"
+          + "cordingDeviceType\022%\n!RECORDING_DEVICE_TY"
+          + "PE_UNSPECIFIED\020\000\022\016\n\nSMARTPHONE\020\001\022\006\n\002PC\020\002"
+          + "\022\016\n\nPHONE_LINE\020\003\022\013\n\007VEHICLE\020\004\022\030\n\024OTHER_O"
+          + "UTDOOR_DEVICE\020\005\022\027\n\023OTHER_INDOOR_DEVICE\020\006"
+          + "\" \n\rSpeechContext\022\017\n\007phrases\030\001 \003(\t\"D\n\020Re"
+          + "cognitionAudio\022\021\n\007content\030\001 \001(\014H\000\022\r\n\003uri"
+          + "\030\002 \001(\tH\000B\016\n\014audio_source\"U\n\021RecognizeRes"
+          + "ponse\022@\n\007results\030\002 \003(\0132/.google.cloud.sp"
+          + "eech.v1.SpeechRecognitionResult\"`\n\034LongR"
+          + "unningRecognizeResponse\022@\n\007results\030\002 \003(\013"
+          + "2/.google.cloud.speech.v1.SpeechRecognit"
+          + "ionResult\"\236\001\n\034LongRunningRecognizeMetada"
+          + "ta\022\030\n\020progress_percent\030\001 \001(\005\022.\n\nstart_ti"
+          + "me\030\002 \001(\0132\032.google.protobuf.Timestamp\0224\n\020"
+          + "last_update_time\030\003 \001(\0132\032.google.protobuf"
+          + ".Timestamp\"\261\002\n\032StreamingRecognizeRespons"
+          + "e\022!\n\005error\030\001 \001(\0132\022.google.rpc.Status\022C\n\007"
+          + "results\030\002 \003(\01322.google.cloud.speech.v1.S"
+          + "treamingRecognitionResult\022]\n\021speech_even"
+          + "t_type\030\004 \001(\0162B.google.cloud.speech.v1.St"
+          + "reamingRecognizeResponse.SpeechEventType"
+          + "\"L\n\017SpeechEventType\022\034\n\030SPEECH_EVENT_UNSP"
+          + "ECIFIED\020\000\022\033\n\027END_OF_SINGLE_UTTERANCE\020\001\"\355"
+          + "\001\n\032StreamingRecognitionResult\022J\n\014alterna"
+          + "tives\030\001 \003(\01324.google.cloud.speech.v1.Spe"
+          + "echRecognitionAlternative\022\020\n\010is_final\030\002 "
+          + "\001(\010\022\021\n\tstability\030\003 \001(\002\0222\n\017result_end_tim"
+          + "e\030\004 \001(\0132\031.google.protobuf.Duration\022\023\n\013ch"
+          + "annel_tag\030\005 \001(\005\022\025\n\rlanguage_code\030\006 \001(\t\"z"
+          + "\n\027SpeechRecognitionResult\022J\n\014alternative"
+          + "s\030\001 \003(\01324.google.cloud.speech.v1.SpeechR"
+          + "ecognitionAlternative\022\023\n\013channel_tag\030\002 \001"
+          + "(\005\"w\n\034SpeechRecognitionAlternative\022\022\n\ntr"
+          + "anscript\030\001 \001(\t\022\022\n\nconfidence\030\002 \001(\002\022/\n\005wo"
+          + "rds\030\003 \003(\0132 .google.cloud.speech.v1.WordI"
+          + "nfo\"t\n\010WordInfo\022-\n\nstart_time\030\001 \001(\0132\031.go"
+          + "ogle.protobuf.Duration\022+\n\010end_time\030\002 \001(\013"
+          + "2\031.google.protobuf.Duration\022\014\n\004word\030\003 \001("
+          + "\t2\251\003\n\006Speech\022\201\001\n\tRecognize\022(.google.clou"
+          + "d.speech.v1.RecognizeRequest\032).google.cl"
+          + "oud.speech.v1.RecognizeResponse\"\037\202\323\344\223\002\031\""
+          + "\024/v1/speech:recognize:\001*\022\226\001\n\024LongRunning"
+          + "Recognize\0223.google.cloud.speech.v1.LongR"
+          + "unningRecognizeRequest\032\035.google.longrunn"
+          + "ing.Operation\"*\202\323\344\223\002$\"\037/v1/speech:longru"
+          + "nningrecognize:\001*\022\201\001\n\022StreamingRecognize"
+          + "\0221.google.cloud.speech.v1.StreamingRecog"
+          + "nizeRequest\0322.google.cloud.speech.v1.Str"
+          + "eamingRecognizeResponse\"\000(\0010\001Bl\n\032com.goo"
+          + "gle.cloud.speech.v1B\013SpeechProtoP\001Z<goog"
+          + "le.golang.org/genproto/googleapis/cloud/"
+          + "speech/v1;speech\370\001\001b\006proto3"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
         new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -178,9 +210,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
         new com.google.protobuf.Descriptors.FileDescriptor[] {
           com.google.api.AnnotationsProto.getDescriptor(),
           com.google.longrunning.OperationsProto.getDescriptor(),
-          com.google.protobuf.AnyProto.getDescriptor(),
           com.google.protobuf.DurationProto.getDescriptor(),
-          com.google.protobuf.EmptyProto.getDescriptor(),
           com.google.protobuf.TimestampProto.getDescriptor(),
           com.google.rpc.StatusProto.getDescriptor(),
         },
@@ -233,11 +263,27 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               "SpeechContexts",
               "EnableWordTimeOffsets",
               "EnableAutomaticPunctuation",
+              "Metadata",
               "Model",
               "UseEnhanced",
             });
-    internal_static_google_cloud_speech_v1_SpeechContext_descriptor =
+    internal_static_google_cloud_speech_v1_RecognitionMetadata_descriptor =
         getDescriptor().getMessageTypes().get(5);
+    internal_static_google_cloud_speech_v1_RecognitionMetadata_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_cloud_speech_v1_RecognitionMetadata_descriptor,
+            new java.lang.String[] {
+              "InteractionType",
+              "IndustryNaicsCodeOfAudio",
+              "MicrophoneDistance",
+              "OriginalMediaType",
+              "RecordingDeviceType",
+              "RecordingDeviceName",
+              "OriginalMimeType",
+              "AudioTopic",
+            });
+    internal_static_google_cloud_speech_v1_SpeechContext_descriptor =
+        getDescriptor().getMessageTypes().get(6);
     internal_static_google_cloud_speech_v1_SpeechContext_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_cloud_speech_v1_SpeechContext_descriptor,
@@ -245,7 +291,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               "Phrases",
             });
     internal_static_google_cloud_speech_v1_RecognitionAudio_descriptor =
-        getDescriptor().getMessageTypes().get(6);
+        getDescriptor().getMessageTypes().get(7);
     internal_static_google_cloud_speech_v1_RecognitionAudio_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_cloud_speech_v1_RecognitionAudio_descriptor,
@@ -253,7 +299,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               "Content", "Uri", "AudioSource",
             });
     internal_static_google_cloud_speech_v1_RecognizeResponse_descriptor =
-        getDescriptor().getMessageTypes().get(7);
+        getDescriptor().getMessageTypes().get(8);
     internal_static_google_cloud_speech_v1_RecognizeResponse_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_cloud_speech_v1_RecognizeResponse_descriptor,
@@ -261,7 +307,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               "Results",
             });
     internal_static_google_cloud_speech_v1_LongRunningRecognizeResponse_descriptor =
-        getDescriptor().getMessageTypes().get(8);
+        getDescriptor().getMessageTypes().get(9);
     internal_static_google_cloud_speech_v1_LongRunningRecognizeResponse_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_cloud_speech_v1_LongRunningRecognizeResponse_descriptor,
@@ -269,7 +315,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               "Results",
             });
     internal_static_google_cloud_speech_v1_LongRunningRecognizeMetadata_descriptor =
-        getDescriptor().getMessageTypes().get(9);
+        getDescriptor().getMessageTypes().get(10);
     internal_static_google_cloud_speech_v1_LongRunningRecognizeMetadata_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_cloud_speech_v1_LongRunningRecognizeMetadata_descriptor,
@@ -277,7 +323,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               "ProgressPercent", "StartTime", "LastUpdateTime",
             });
     internal_static_google_cloud_speech_v1_StreamingRecognizeResponse_descriptor =
-        getDescriptor().getMessageTypes().get(10);
+        getDescriptor().getMessageTypes().get(11);
     internal_static_google_cloud_speech_v1_StreamingRecognizeResponse_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_cloud_speech_v1_StreamingRecognizeResponse_descriptor,
@@ -285,15 +331,15 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               "Error", "Results", "SpeechEventType",
             });
     internal_static_google_cloud_speech_v1_StreamingRecognitionResult_descriptor =
-        getDescriptor().getMessageTypes().get(11);
+        getDescriptor().getMessageTypes().get(12);
     internal_static_google_cloud_speech_v1_StreamingRecognitionResult_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_cloud_speech_v1_StreamingRecognitionResult_descriptor,
             new java.lang.String[] {
-              "Alternatives", "IsFinal", "Stability", "ChannelTag",
+              "Alternatives", "IsFinal", "Stability", "ResultEndTime", "ChannelTag", "LanguageCode",
             });
     internal_static_google_cloud_speech_v1_SpeechRecognitionResult_descriptor =
-        getDescriptor().getMessageTypes().get(12);
+        getDescriptor().getMessageTypes().get(13);
     internal_static_google_cloud_speech_v1_SpeechRecognitionResult_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_cloud_speech_v1_SpeechRecognitionResult_descriptor,
@@ -301,7 +347,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               "Alternatives", "ChannelTag",
             });
     internal_static_google_cloud_speech_v1_SpeechRecognitionAlternative_descriptor =
-        getDescriptor().getMessageTypes().get(13);
+        getDescriptor().getMessageTypes().get(14);
     internal_static_google_cloud_speech_v1_SpeechRecognitionAlternative_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_cloud_speech_v1_SpeechRecognitionAlternative_descriptor,
@@ -309,7 +355,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               "Transcript", "Confidence", "Words",
             });
     internal_static_google_cloud_speech_v1_WordInfo_descriptor =
-        getDescriptor().getMessageTypes().get(14);
+        getDescriptor().getMessageTypes().get(15);
     internal_static_google_cloud_speech_v1_WordInfo_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_cloud_speech_v1_WordInfo_descriptor,
@@ -323,9 +369,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
         descriptor, registry);
     com.google.api.AnnotationsProto.getDescriptor();
     com.google.longrunning.OperationsProto.getDescriptor();
-    com.google.protobuf.AnyProto.getDescriptor();
     com.google.protobuf.DurationProto.getDescriptor();
-    com.google.protobuf.EmptyProto.getDescriptor();
     com.google.protobuf.TimestampProto.getDescriptor();
     com.google.rpc.StatusProto.getDescriptor();
   }
diff --git a/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/StreamingRecognitionResult.java b/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/StreamingRecognitionResult.java
index 4bc6375e5b92..10ee6dd17ef0 100644
--- a/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/StreamingRecognitionResult.java
+++ b/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/StreamingRecognitionResult.java
@@ -25,6 +25,7 @@ private StreamingRecognitionResult(com.google.protobuf.GeneratedMessageV3.Builde
 
   private StreamingRecognitionResult() {
     alternatives_ = java.util.Collections.emptyList();
+    languageCode_ = "";
   }
 
   @java.lang.Override
@@ -73,6 +74,21 @@ private StreamingRecognitionResult(
           case 29:
             {
               stability_ = input.readFloat();
+              break;
+            }
+          case 34:
+            {
+              com.google.protobuf.Duration.Builder subBuilder = null;
+              if (resultEndTime_ != null) {
+                subBuilder = resultEndTime_.toBuilder();
+              }
+              resultEndTime_ =
+                  input.readMessage(com.google.protobuf.Duration.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(resultEndTime_);
+                resultEndTime_ = subBuilder.buildPartial();
+              }
+
               break;
             }
           case 40:
@@ -80,6 +96,13 @@ private StreamingRecognitionResult(
               channelTag_ = input.readInt32();
               break;
             }
+          case 50:
+            {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              languageCode_ = s;
+              break;
+            }
           default:
             {
               if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) {
@@ -237,6 +260,50 @@ public float getStability() {
     return stability_;
   }
 
+  public static final int RESULT_END_TIME_FIELD_NUMBER = 4;
+  private com.google.protobuf.Duration resultEndTime_;
+  /**
+   *
+   *
+   * <pre>
+   * Output only. Time offset of the end of this result relative to the
+   * beginning of the audio.
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration result_end_time = 4;</code>
+   */
+  public boolean hasResultEndTime() {
+    return resultEndTime_ != null;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Output only. Time offset of the end of this result relative to the
+   * beginning of the audio.
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration result_end_time = 4;</code>
+   */
+  public com.google.protobuf.Duration getResultEndTime() {
+    return resultEndTime_ == null
+        ? com.google.protobuf.Duration.getDefaultInstance()
+        : resultEndTime_;
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Output only. Time offset of the end of this result relative to the
+   * beginning of the audio.
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration result_end_time = 4;</code>
+   */
+  public com.google.protobuf.DurationOrBuilder getResultEndTimeOrBuilder() {
+    return getResultEndTime();
+  }
+
   public static final int CHANNEL_TAG_FIELD_NUMBER = 5;
   private int channelTag_;
   /**
@@ -254,6 +321,55 @@ public int getChannelTag() {
     return channelTag_;
   }
 
+  public static final int LANGUAGE_CODE_FIELD_NUMBER = 6;
+  private volatile java.lang.Object languageCode_;
+  /**
+   *
+   *
+   * <pre>
+   * Output only. The
+   * [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the
+   * language in this result. This language code was detected to have the most
+   * likelihood of being spoken in the audio.
+   * </pre>
+   *
+   * <code>string language_code = 6;</code>
+   */
+  public java.lang.String getLanguageCode() {
+    java.lang.Object ref = languageCode_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      languageCode_ = s;
+      return s;
+    }
+  }
+  /**
+   *
+   *
+   * <pre>
+   * Output only. The
+   * [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the
+   * language in this result. This language code was detected to have the most
+   * likelihood of being spoken in the audio.
+   * </pre>
+   *
+   * <code>string language_code = 6;</code>
+   */
+  public com.google.protobuf.ByteString getLanguageCodeBytes() {
+    java.lang.Object ref = languageCode_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b =
+          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+      languageCode_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
   private byte memoizedIsInitialized = -1;
 
   @java.lang.Override
@@ -277,9 +393,15 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io
     if (stability_ != 0F) {
       output.writeFloat(3, stability_);
     }
+    if (resultEndTime_ != null) {
+      output.writeMessage(4, getResultEndTime());
+    }
     if (channelTag_ != 0) {
       output.writeInt32(5, channelTag_);
     }
+    if (!getLanguageCodeBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 6, languageCode_);
+    }
     unknownFields.writeTo(output);
   }
 
@@ -298,9 +420,15 @@ public int getSerializedSize() {
     if (stability_ != 0F) {
       size += com.google.protobuf.CodedOutputStream.computeFloatSize(3, stability_);
     }
+    if (resultEndTime_ != null) {
+      size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getResultEndTime());
+    }
     if (channelTag_ != 0) {
       size += com.google.protobuf.CodedOutputStream.computeInt32Size(5, channelTag_);
     }
+    if (!getLanguageCodeBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, languageCode_);
+    }
     size += unknownFields.getSerializedSize();
     memoizedSize = size;
     return size;
@@ -321,7 +449,12 @@ public boolean equals(final java.lang.Object obj) {
     if (getIsFinal() != other.getIsFinal()) return false;
     if (java.lang.Float.floatToIntBits(getStability())
         != java.lang.Float.floatToIntBits(other.getStability())) return false;
+    if (hasResultEndTime() != other.hasResultEndTime()) return false;
+    if (hasResultEndTime()) {
+      if (!getResultEndTime().equals(other.getResultEndTime())) return false;
+    }
     if (getChannelTag() != other.getChannelTag()) return false;
+    if (!getLanguageCode().equals(other.getLanguageCode())) return false;
     if (!unknownFields.equals(other.unknownFields)) return false;
     return true;
   }
@@ -341,8 +474,14 @@ public int hashCode() {
     hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getIsFinal());
     hash = (37 * hash) + STABILITY_FIELD_NUMBER;
     hash = (53 * hash) + java.lang.Float.floatToIntBits(getStability());
+    if (hasResultEndTime()) {
+      hash = (37 * hash) + RESULT_END_TIME_FIELD_NUMBER;
+      hash = (53 * hash) + getResultEndTime().hashCode();
+    }
     hash = (37 * hash) + CHANNEL_TAG_FIELD_NUMBER;
     hash = (53 * hash) + getChannelTag();
+    hash = (37 * hash) + LANGUAGE_CODE_FIELD_NUMBER;
+    hash = (53 * hash) + getLanguageCode().hashCode();
     hash = (29 * hash) + unknownFields.hashCode();
     memoizedHashCode = hash;
     return hash;
@@ -502,8 +641,16 @@ public Builder clear() {
 
       stability_ = 0F;
 
+      if (resultEndTimeBuilder_ == null) {
+        resultEndTime_ = null;
+      } else {
+        resultEndTime_ = null;
+        resultEndTimeBuilder_ = null;
+      }
       channelTag_ = 0;
 
+      languageCode_ = "";
+
       return this;
     }
 
@@ -544,7 +691,13 @@ public com.google.cloud.speech.v1.StreamingRecognitionResult buildPartial() {
       }
       result.isFinal_ = isFinal_;
       result.stability_ = stability_;
+      if (resultEndTimeBuilder_ == null) {
+        result.resultEndTime_ = resultEndTime_;
+      } else {
+        result.resultEndTime_ = resultEndTimeBuilder_.build();
+      }
       result.channelTag_ = channelTag_;
+      result.languageCode_ = languageCode_;
       result.bitField0_ = to_bitField0_;
       onBuilt();
       return result;
@@ -629,9 +782,16 @@ public Builder mergeFrom(com.google.cloud.speech.v1.StreamingRecognitionResult o
       if (other.getStability() != 0F) {
         setStability(other.getStability());
       }
+      if (other.hasResultEndTime()) {
+        mergeResultEndTime(other.getResultEndTime());
+      }
       if (other.getChannelTag() != 0) {
         setChannelTag(other.getChannelTag());
       }
+      if (!other.getLanguageCode().isEmpty()) {
+        languageCode_ = other.languageCode_;
+        onChanged();
+      }
       this.mergeUnknownFields(other.unknownFields);
       onChanged();
       return this;
@@ -1194,6 +1354,196 @@ public Builder clearStability() {
       return this;
     }
 
+    private com.google.protobuf.Duration resultEndTime_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Duration,
+            com.google.protobuf.Duration.Builder,
+            com.google.protobuf.DurationOrBuilder>
+        resultEndTimeBuilder_;
+    /**
+     *
+     *
+     * <pre>
+     * Output only. Time offset of the end of this result relative to the
+     * beginning of the audio.
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration result_end_time = 4;</code>
+     */
+    public boolean hasResultEndTime() {
+      return resultEndTimeBuilder_ != null || resultEndTime_ != null;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output only. Time offset of the end of this result relative to the
+     * beginning of the audio.
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration result_end_time = 4;</code>
+     */
+    public com.google.protobuf.Duration getResultEndTime() {
+      if (resultEndTimeBuilder_ == null) {
+        return resultEndTime_ == null
+            ? com.google.protobuf.Duration.getDefaultInstance()
+            : resultEndTime_;
+      } else {
+        return resultEndTimeBuilder_.getMessage();
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output only. Time offset of the end of this result relative to the
+     * beginning of the audio.
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration result_end_time = 4;</code>
+     */
+    public Builder setResultEndTime(com.google.protobuf.Duration value) {
+      if (resultEndTimeBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        resultEndTime_ = value;
+        onChanged();
+      } else {
+        resultEndTimeBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output only. Time offset of the end of this result relative to the
+     * beginning of the audio.
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration result_end_time = 4;</code>
+     */
+    public Builder setResultEndTime(com.google.protobuf.Duration.Builder builderForValue) {
+      if (resultEndTimeBuilder_ == null) {
+        resultEndTime_ = builderForValue.build();
+        onChanged();
+      } else {
+        resultEndTimeBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output only. Time offset of the end of this result relative to the
+     * beginning of the audio.
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration result_end_time = 4;</code>
+     */
+    public Builder mergeResultEndTime(com.google.protobuf.Duration value) {
+      if (resultEndTimeBuilder_ == null) {
+        if (resultEndTime_ != null) {
+          resultEndTime_ =
+              com.google.protobuf.Duration.newBuilder(resultEndTime_)
+                  .mergeFrom(value)
+                  .buildPartial();
+        } else {
+          resultEndTime_ = value;
+        }
+        onChanged();
+      } else {
+        resultEndTimeBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output only. Time offset of the end of this result relative to the
+     * beginning of the audio.
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration result_end_time = 4;</code>
+     */
+    public Builder clearResultEndTime() {
+      if (resultEndTimeBuilder_ == null) {
+        resultEndTime_ = null;
+        onChanged();
+      } else {
+        resultEndTime_ = null;
+        resultEndTimeBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output only. Time offset of the end of this result relative to the
+     * beginning of the audio.
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration result_end_time = 4;</code>
+     */
+    public com.google.protobuf.Duration.Builder getResultEndTimeBuilder() {
+
+      onChanged();
+      return getResultEndTimeFieldBuilder().getBuilder();
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output only. Time offset of the end of this result relative to the
+     * beginning of the audio.
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration result_end_time = 4;</code>
+     */
+    public com.google.protobuf.DurationOrBuilder getResultEndTimeOrBuilder() {
+      if (resultEndTimeBuilder_ != null) {
+        return resultEndTimeBuilder_.getMessageOrBuilder();
+      } else {
+        return resultEndTime_ == null
+            ? com.google.protobuf.Duration.getDefaultInstance()
+            : resultEndTime_;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output only. Time offset of the end of this result relative to the
+     * beginning of the audio.
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration result_end_time = 4;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Duration,
+            com.google.protobuf.Duration.Builder,
+            com.google.protobuf.DurationOrBuilder>
+        getResultEndTimeFieldBuilder() {
+      if (resultEndTimeBuilder_ == null) {
+        resultEndTimeBuilder_ =
+            new com.google.protobuf.SingleFieldBuilderV3<
+                com.google.protobuf.Duration,
+                com.google.protobuf.Duration.Builder,
+                com.google.protobuf.DurationOrBuilder>(
+                getResultEndTime(), getParentForChildren(), isClean());
+        resultEndTime_ = null;
+      }
+      return resultEndTimeBuilder_;
+    }
+
     private int channelTag_;
     /**
      *
@@ -1244,6 +1594,115 @@ public Builder clearChannelTag() {
       return this;
     }
 
+    private java.lang.Object languageCode_ = "";
+    /**
+     *
+     *
+     * <pre>
+     * Output only. The
+     * [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the
+     * language in this result. This language code was detected to have the most
+     * likelihood of being spoken in the audio.
+     * </pre>
+     *
+     * <code>string language_code = 6;</code>
+     */
+    public java.lang.String getLanguageCode() {
+      java.lang.Object ref = languageCode_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        languageCode_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output only. The
+     * [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the
+     * language in this result. This language code was detected to have the most
+     * likelihood of being spoken in the audio.
+     * </pre>
+     *
+     * <code>string language_code = 6;</code>
+     */
+    public com.google.protobuf.ByteString getLanguageCodeBytes() {
+      java.lang.Object ref = languageCode_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+        languageCode_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output only. The
+     * [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the
+     * language in this result. This language code was detected to have the most
+     * likelihood of being spoken in the audio.
+     * </pre>
+     *
+     * <code>string language_code = 6;</code>
+     */
+    public Builder setLanguageCode(java.lang.String value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+
+      languageCode_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output only. The
+     * [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the
+     * language in this result. This language code was detected to have the most
+     * likelihood of being spoken in the audio.
+     * </pre>
+     *
+     * <code>string language_code = 6;</code>
+     */
+    public Builder clearLanguageCode() {
+
+      languageCode_ = getDefaultInstance().getLanguageCode();
+      onChanged();
+      return this;
+    }
+    /**
+     *
+     *
+     * <pre>
+     * Output only. The
+     * [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the
+     * language in this result. This language code was detected to have the most
+     * likelihood of being spoken in the audio.
+     * </pre>
+     *
+     * <code>string language_code = 6;</code>
+     */
+    public Builder setLanguageCodeBytes(com.google.protobuf.ByteString value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      checkByteStringIsUtf8(value);
+
+      languageCode_ = value;
+      onChanged();
+      return this;
+    }
+
     @java.lang.Override
     public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
       return super.setUnknownFields(unknownFields);
diff --git a/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/StreamingRecognitionResultOrBuilder.java b/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/StreamingRecognitionResultOrBuilder.java
index ed6952d4bfb6..e87b23339561 100644
--- a/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/StreamingRecognitionResultOrBuilder.java
+++ b/google-api-grpc/proto-google-cloud-speech-v1/src/main/java/com/google/cloud/speech/v1/StreamingRecognitionResultOrBuilder.java
@@ -106,6 +106,40 @@ com.google.cloud.speech.v1.SpeechRecognitionAlternativeOrBuilder getAlternatives
    */
   float getStability();
 
+  /**
+   *
+   *
+   * <pre>
+   * Output only. Time offset of the end of this result relative to the
+   * beginning of the audio.
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration result_end_time = 4;</code>
+   */
+  boolean hasResultEndTime();
+  /**
+   *
+   *
+   * <pre>
+   * Output only. Time offset of the end of this result relative to the
+   * beginning of the audio.
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration result_end_time = 4;</code>
+   */
+  com.google.protobuf.Duration getResultEndTime();
+  /**
+   *
+   *
+   * <pre>
+   * Output only. Time offset of the end of this result relative to the
+   * beginning of the audio.
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration result_end_time = 4;</code>
+   */
+  com.google.protobuf.DurationOrBuilder getResultEndTimeOrBuilder();
+
   /**
    *
    *
@@ -118,4 +152,31 @@ com.google.cloud.speech.v1.SpeechRecognitionAlternativeOrBuilder getAlternatives
    * <code>int32 channel_tag = 5;</code>
    */
   int getChannelTag();
+
+  /**
+   *
+   *
+   * <pre>
+   * Output only. The
+   * [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the
+   * language in this result. This language code was detected to have the most
+   * likelihood of being spoken in the audio.
+   * </pre>
+   *
+   * <code>string language_code = 6;</code>
+   */
+  java.lang.String getLanguageCode();
+  /**
+   *
+   *
+   * <pre>
+   * Output only. The
+   * [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the
+   * language in this result. This language code was detected to have the most
+   * likelihood of being spoken in the audio.
+   * </pre>
+   *
+   * <code>string language_code = 6;</code>
+   */
+  com.google.protobuf.ByteString getLanguageCodeBytes();
 }
diff --git a/google-api-grpc/proto-google-cloud-speech-v1/src/main/proto/google/cloud/speech/v1/cloud_speech.proto b/google-api-grpc/proto-google-cloud-speech-v1/src/main/proto/google/cloud/speech/v1/cloud_speech.proto
index 11bd981b8cd4..0966c11c3a54 100644
--- a/google-api-grpc/proto-google-cloud-speech-v1/src/main/proto/google/cloud/speech/v1/cloud_speech.proto
+++ b/google-api-grpc/proto-google-cloud-speech-v1/src/main/proto/google/cloud/speech/v1/cloud_speech.proto
@@ -19,9 +19,7 @@ package google.cloud.speech.v1;
 
 import "google/api/annotations.proto";
 import "google/longrunning/operations.proto";
-import "google/protobuf/any.proto";
 import "google/protobuf/duration.proto";
-import "google/protobuf/empty.proto";
 import "google/protobuf/timestamp.proto";
 import "google/rpc/status.proto";
 
@@ -278,6 +276,9 @@ message RecognitionConfig {
   // premium feature.
   bool enable_automatic_punctuation = 11;
 
+  // *Optional* Metadata regarding this request.
+  RecognitionMetadata metadata = 9;
+
   // *Optional* Which model to select for the given request. Select the model
   // best suited to your domain to get best results. If a model is not
   // explicitly specified, then we auto-select a model based on the parameters
@@ -330,6 +331,133 @@ message RecognitionConfig {
   bool use_enhanced = 14;
 }
 
+// Description of audio data to be recognized.
+message RecognitionMetadata {
+  // Use case categories that the audio recognition request can be described
+  // by.
+  enum InteractionType {
+    // Use case is either unknown or is something other than one of the other
+    // values below.
+    INTERACTION_TYPE_UNSPECIFIED = 0;
+
+    // Multiple people in a conversation or discussion. For example in a
+    // meeting with two or more people actively participating. Typically
+    // all the primary people speaking would be in the same room (if not,
+    // see PHONE_CALL)
+    DISCUSSION = 1;
+
+    // One or more persons lecturing or presenting to others, mostly
+    // uninterrupted.
+    PRESENTATION = 2;
+
+    // A phone-call or video-conference in which two or more people, who are
+    // not in the same room, are actively participating.
+    PHONE_CALL = 3;
+
+    // A recorded message intended for another person to listen to.
+    VOICEMAIL = 4;
+
+    // Professionally produced audio (eg. TV Show, Podcast).
+    PROFESSIONALLY_PRODUCED = 5;
+
+    // Transcribe spoken questions and queries into text.
+    VOICE_SEARCH = 6;
+
+    // Transcribe voice commands, such as for controlling a device.
+    VOICE_COMMAND = 7;
+
+    // Transcribe speech to text to create a written document, such as a
+    // text-message, email or report.
+    DICTATION = 8;
+  }
+
+  // The use case most closely describing the audio content to be recognized.
+  InteractionType interaction_type = 1;
+
+  // The industry vertical to which this speech recognition request most
+  // closely applies. This is most indicative of the topics contained
+  // in the audio.  Use the 6-digit NAICS code to identify the industry
+  // vertical - see https://www.naics.com/search/.
+  uint32 industry_naics_code_of_audio = 3;
+
+  // Enumerates the types of capture settings describing an audio file.
+  enum MicrophoneDistance {
+    // Audio type is not known.
+    MICROPHONE_DISTANCE_UNSPECIFIED = 0;
+
+    // The audio was captured from a closely placed microphone. Eg. phone,
+    // dictaphone, or handheld microphone. Generally if there speaker is within
+    // 1 meter of the microphone.
+    NEARFIELD = 1;
+
+    // The speaker if within 3 meters of the microphone.
+    MIDFIELD = 2;
+
+    // The speaker is more than 3 meters away from the microphone.
+    FARFIELD = 3;
+  }
+
+  // The audio type that most closely describes the audio being recognized.
+  MicrophoneDistance microphone_distance = 4;
+
+  // The original media the speech was recorded on.
+  enum OriginalMediaType {
+    // Unknown original media type.
+    ORIGINAL_MEDIA_TYPE_UNSPECIFIED = 0;
+
+    // The speech data is an audio recording.
+    AUDIO = 1;
+
+    // The speech data originally recorded on a video.
+    VIDEO = 2;
+  }
+
+  // The original media the speech was recorded on.
+  OriginalMediaType original_media_type = 5;
+
+  // The type of device the speech was recorded with.
+  enum RecordingDeviceType {
+    // The recording device is unknown.
+    RECORDING_DEVICE_TYPE_UNSPECIFIED = 0;
+
+    // Speech was recorded on a smartphone.
+    SMARTPHONE = 1;
+
+    // Speech was recorded using a personal computer or tablet.
+    PC = 2;
+
+    // Speech was recorded over a phone line.
+    PHONE_LINE = 3;
+
+    // Speech was recorded in a vehicle.
+    VEHICLE = 4;
+
+    // Speech was recorded outdoors.
+    OTHER_OUTDOOR_DEVICE = 5;
+
+    // Speech was recorded indoors.
+    OTHER_INDOOR_DEVICE = 6;
+  }
+
+  // The type of device the speech was recorded with.
+  RecordingDeviceType recording_device_type = 6;
+
+  // The device used to make the recording.  Examples 'Nexus 5X' or
+  // 'Polycom SoundStation IP 6000' or 'POTS' or 'VoIP' or
+  // 'Cardioid Microphone'.
+  string recording_device_name = 7;
+
+  // Mime type of the original audio file.  For example `audio/m4a`,
+  // `audio/x-alaw-basic`, `audio/mp3`, `audio/3gpp`.
+  // A list of possible audio mime types is maintained at
+  // http://www.iana.org/assignments/media-types/media-types.xhtml#audio
+  string original_mime_type = 8;
+
+  // Description of the content. Eg. "Recordings of federal supreme court
+  // hearings from 2012".
+  string audio_topic = 10;
+}
+
 // Provides "hints" to the speech recognizer to favor specific words and phrases
 // in the results.
 message SpeechContext {
@@ -504,10 +632,20 @@ message StreamingRecognitionResult {
   // The default of 0.0 is a sentinel value indicating `stability` was not set.
   float stability = 3;
 
+  // Output only. Time offset of the end of this result relative to the
+  // beginning of the audio.
+  google.protobuf.Duration result_end_time = 4;
+
   // For multi-channel audio, this is the channel number corresponding to the
   // recognized result for the audio from that channel.
   // For audio_channel_count = N, its output values can range from '1' to 'N'.
   int32 channel_tag = 5;
+
+  // Output only. The
+  // [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the
+  // language in this result. This language code was detected to have the most
+  // likelihood of being spoken in the audio.
+  string language_code = 6;
 }
 
 // A speech recognition result corresponding to a portion of the audio.
diff --git a/google-cloud-clients/google-cloud-speech/synth.metadata b/google-cloud-clients/google-cloud-speech/synth.metadata
index e8b44b0d2183..dc6c15fe6114 100644
--- a/google-cloud-clients/google-cloud-speech/synth.metadata
+++ b/google-cloud-clients/google-cloud-speech/synth.metadata
@@ -1,19 +1,19 @@
 {
-  "updateTime": "2019-04-02T07:56:40.440991Z",
+  "updateTime": "2019-05-14T07:54:00.870285Z",
   "sources": [
     {
       "generator": {
         "name": "artman",
-        "version": "0.16.22",
-        "dockerImage": "googleapis/artman@sha256:e7f9554322a8aa1416c122c918fdc4cdec8cfe816f027fc948dec0be7edef320"
+        "version": "0.19.0",
+        "dockerImage": "googleapis/artman@sha256:d3df563538225ac6caac45d8ad86499500211d1bcb2536955a6dbda15e1b368e"
       }
     },
     {
       "git": {
         "name": "googleapis",
         "remote": "https://github.com/googleapis/googleapis.git",
-        "sha": "6c48ab5aef47dc14e02e2dc718d232a28067129d",
-        "internalRef": "241437588"
+        "sha": "ffa256646fb15c4a6c720f0ed8f984a0ea513416",
+        "internalRef": "248066377"
       }
     }
   ],
