diff --git a/generated/googleapis/test/texttospeech/v1_test.dart b/generated/googleapis/test/texttospeech/v1_test.dart
index fa2e593..59d770c 100644
--- a/generated/googleapis/test/texttospeech/v1_test.dart
+++ b/generated/googleapis/test/texttospeech/v1_test.dart
@@ -50,12 +50,26 @@
   return new http.StreamedResponse(stream, status, headers: headers);
 }
 
+buildUnnamed3032() {
+  var o = new core.List<core.String>();
+  o.add("foo");
+  o.add("foo");
+  return o;
+}
+
+checkUnnamed3032(core.List<core.String> o) {
+  unittest.expect(o, unittest.hasLength(2));
+  unittest.expect(o[0], unittest.equals('foo'));
+  unittest.expect(o[1], unittest.equals('foo'));
+}
+
 core.int buildCounterAudioConfig = 0;
 buildAudioConfig() {
   var o = new api.AudioConfig();
   buildCounterAudioConfig++;
   if (buildCounterAudioConfig < 3) {
     o.audioEncoding = "foo";
+    o.effectsProfileId = buildUnnamed3032();
     o.pitch = 42.0;
     o.sampleRateHertz = 42;
     o.speakingRate = 42.0;
@@ -69,6 +83,7 @@
   buildCounterAudioConfig++;
   if (buildCounterAudioConfig < 3) {
     unittest.expect(o.audioEncoding, unittest.equals('foo'));
+    checkUnnamed3032(o.effectsProfileId);
     unittest.expect(o.pitch, unittest.equals(42.0));
     unittest.expect(o.sampleRateHertz, unittest.equals(42));
     unittest.expect(o.speakingRate, unittest.equals(42.0));
@@ -77,14 +92,14 @@
   buildCounterAudioConfig--;
 }
 
-buildUnnamed3675() {
+buildUnnamed3033() {
   var o = new core.List<api.Voice>();
   o.add(buildVoice());
   o.add(buildVoice());
   return o;
 }
 
-checkUnnamed3675(core.List<api.Voice> o) {
+checkUnnamed3033(core.List<api.Voice> o) {
   unittest.expect(o, unittest.hasLength(2));
   checkVoice(o[0]);
   checkVoice(o[1]);
@@ -95,7 +110,7 @@
   var o = new api.ListVoicesResponse();
   buildCounterListVoicesResponse++;
   if (buildCounterListVoicesResponse < 3) {
-    o.voices = buildUnnamed3675();
+    o.voices = buildUnnamed3033();
   }
   buildCounterListVoicesResponse--;
   return o;
@@ -104,7 +119,7 @@
 checkListVoicesResponse(api.ListVoicesResponse o) {
   buildCounterListVoicesResponse++;
   if (buildCounterListVoicesResponse < 3) {
-    checkUnnamed3675(o.voices);
+    checkUnnamed3033(o.voices);
   }
   buildCounterListVoicesResponse--;
 }
@@ -172,14 +187,14 @@
   buildCounterSynthesizeSpeechResponse--;
 }
 
-buildUnnamed3676() {
+buildUnnamed3034() {
   var o = new core.List<core.String>();
   o.add("foo");
   o.add("foo");
   return o;
 }
 
-checkUnnamed3676(core.List<core.String> o) {
+checkUnnamed3034(core.List<core.String> o) {
   unittest.expect(o, unittest.hasLength(2));
   unittest.expect(o[0], unittest.equals('foo'));
   unittest.expect(o[1], unittest.equals('foo'));
@@ -190,7 +205,7 @@
   var o = new api.Voice();
   buildCounterVoice++;
   if (buildCounterVoice < 3) {
-    o.languageCodes = buildUnnamed3676();
+    o.languageCodes = buildUnnamed3034();
     o.name = "foo";
     o.naturalSampleRateHertz = 42;
     o.ssmlGender = "foo";
@@ -202,7 +217,7 @@
 checkVoice(api.Voice o) {
   buildCounterVoice++;
   if (buildCounterVoice < 3) {
-    checkUnnamed3676(o.languageCodes);
+    checkUnnamed3034(o.languageCodes);
     unittest.expect(o.name, unittest.equals('foo'));
     unittest.expect(o.naturalSampleRateHertz, unittest.equals(42));
     unittest.expect(o.ssmlGender, unittest.equals('foo'));
