<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 <a href="https
Step1:  Cloud Speech-to-Text API を使ってみよう !
Google Cloud Speech-to-Text では、使いやすい API で高度なニューラル ネットワーク モデルを適用し、音声をテキストに変換できます。
API Discovery Service を利用して Cloud Speech-to-Text API を発見します。 Cloud Speech-to-Text の REST API 仕様は こちら に解説されています。
Step2:  音声データの準備
音声録音のための関数 record_audio を定義しましょう。
Step3:  record_audio を実行して音声を録音しましょう。
Step4:  録音結果を確認しましょう。
Step5:  音声認識の実行
Cloud Speech-to-Text API に入力する情報を定義します.
Step6:  入力する音声データを定義します。
Step7:  RecognitionConfig を定義します。
Step8:  recognize method のリクエストメッセージの body を定義します。
Step9:  recognize method を実行します。
Step10:  recognize method のレスポンスを確認します。
Step11:  単語のタイムスタンプの取得
RecognitionConfig に enableWordTimeOffsets の設定を追加します。
Step12:  recognize method を実行します。
Step13:  recognize method のレスポンスを確認します。
Step14:  演習問題
 1. こちらを参考にして、単語レベルの信頼度を見てみましょう
Cloud Text-to-Speech を使ってみよう !
Cloud Text-to-Speech を使うと、自然な会話音声を合成できます。用意されている声は 30 種類。数多くの言語と方言に対応します。
API Discovery Service を利用して Cloud Text-to-Speech API を発見します。 Cloud Text-to-Speech の REST API 仕様は こちら に解説されています。
Step15:  サポートされているすべての音声の一覧表示
テキスト読み上げ合成のために Cloud Text-to-Speech API で使用できる音声を一覧表示します。なお、 languageCode はこちらを参考にしてください。
Step16:  テキストから音声を合成する
text.synthesize メソッドを使用すると、単語や文を自然な人間の音声の base64 でエンコードされた音声データに変換できます。このメソッドは、入力を生のテキストまたは音声合成マークアップ言語（SSML）として受け入れます。
Step17:  合成した音声を確認しましょう
<ASSISTANT_TASK:>
Python Code:
import getpass
APIKEY = getpass.getpass()
Explanation: <a href="https://colab.research.google.com/github/GoogleCloudPlatform/gcp-getting-started-lab-jp/blob/master/machine_learning/cloud_ai_building_blocks/conversation_ja.ipynb" target="_parent"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/></a>
```
Copyright 2019 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
事前準備
GCP プロジェクト を作成します。
課金設定 を有効にします。
API Key を作成します。
Cloud Speech-to-Text API と Cloud Text-to-Speech API を有効にします。
Google Cloud API の認証情報を入力
Google Cloud API を REST インタフェースから利用するために、 API Key を利用します。 Google Cloud Console から API Key をコピーしましょう。
End of explanation
from googleapiclient.discovery import build
speech_service = build('speech', 'v1p1beta1', developerKey=APIKEY)
Explanation: Cloud Speech-to-Text API を使ってみよう !
Google Cloud Speech-to-Text では、使いやすい API で高度なニューラル ネットワーク モデルを適用し、音声をテキストに変換できます。
API Discovery Service を利用して Cloud Speech-to-Text API を発見します。 Cloud Speech-to-Text の REST API 仕様は こちら に解説されています。
End of explanation
#@title このセルを実行して record_audio を定義
# Install required libraries and packages
!pip install -qq pydub
!apt-get -qq update
!apt-get -qq install -y ffmpeg
# Define record_audio
import base64
import google.colab
import pydub
from io import BytesIO
def record_audio(file_id, framerate=16000, channels=1, file_format='flac'):
  # Record webm file from Colaboratory.
  audio = google.colab._message.blocking_request(
    'user_media',
    {
      'audio': True,
      'video': False,
      'duration': -1
    },
    timeout_sec=600)
  # Convert web file into in_memory file.
  mfile = BytesIO(base64.b64decode(audio[audio.index(',')+1:]))
  # Store webm file locally.
  with open('{0}.webm'.format(file_id), 'wb') as f:
    mfile.seek(0)
    f.write(mfile.read())
  # Open stored web file and save it as wav with sample_rate=16000
  output_file = '{0}.{1}'.format(file_id, file_format)
  _ = pydub.AudioSegment.from_file('{0}.webm'.format(file_id), codec='opus')
  _ = _.set_channels(channels)
  _.set_frame_rate(framerate).export(output_file, format=file_format)
  return output_file
Explanation: 音声データの準備
音声録音のための関数 record_audio を定義しましょう。
End of explanation
audio_filename = record_audio('ja-sample', framerate=16000, channels=1)
Explanation: record_audio を実行して音声を録音しましょう。
End of explanation
from IPython.display import Audio
Audio(audio_filename, rate=16000)
Explanation: 録音結果を確認しましょう。
End of explanation
from base64 import b64encode
from json import dumps
languageCode = 'en-US' #@param ["en-US", "ja-JP", "en-IN"]
model = 'default' #@param ["command_and_search", "phone_call", "video", "default"]
Explanation: 音声認識の実行
Cloud Speech-to-Text API に入力する情報を定義します.
End of explanation
with open(audio_filename, 'rb') as audio_file:
  content = b64encode(audio_file.read()).decode('utf-8')
my_audio = {
  'content': content
}
Explanation: 入力する音声データを定義します。
End of explanation
my_recognition_config = {
  'encoding': 'FLAC',
  'sampleRateHertz': 16000,
  'languageCode': languageCode,
  'model': model
}
Explanation: RecognitionConfig を定義します。
End of explanation
my_request_body={
  'audio': my_audio,
  'config': my_recognition_config,
}
Explanation: recognize method のリクエストメッセージの body を定義します。
End of explanation
response = speech_service.speech().recognize(body=my_request_body).execute()
Explanation: recognize method を実行します。
End of explanation
response
for r in response["results"]:
    print('認識結果: ', r['alternatives'][0]['transcript'])
    print('信頼度: ', r['alternatives'][0]['confidence'])
Explanation: recognize method のレスポンスを確認します。
End of explanation
my_recognition_config = {
  'encoding': 'FLAC',
  'sampleRateHertz': 16000,
  'languageCode': languageCode,
  'model': model,
  'enableWordTimeOffsets': True
}
my_request_body={
  'audio': my_audio,
  'config': my_recognition_config,
}
Explanation: 単語のタイムスタンプの取得
RecognitionConfig に enableWordTimeOffsets の設定を追加します。
End of explanation
response = speech_service.speech().recognize(body=my_request_body).execute()
Explanation: recognize method を実行します。
End of explanation
response
for r in response["results"]:
    print('認識結果: ', r['alternatives'][0]['transcript'])
    print('信頼度: ', r['alternatives'][0]['confidence'], "\n")
for r in response["results"][0]['alternatives'][0]["words"]:
    print("word: ", r["word"])
    print("startTime: ", r["startTime"])
    print("endTime: ", r["endTime"], "\n")
Explanation: recognize method のレスポンスを確認します。
End of explanation
import textwrap
from googleapiclient.discovery import build
service = build('texttospeech', 'v1beta1', developerKey=APIKEY)
Explanation: 演習問題
 1. こちらを参考にして、単語レベルの信頼度を見てみましょう
Cloud Text-to-Speech を使ってみよう !
Cloud Text-to-Speech を使うと、自然な会話音声を合成できます。用意されている声は 30 種類。数多くの言語と方言に対応します。
API Discovery Service を利用して Cloud Text-to-Speech API を発見します。 Cloud Text-to-Speech の REST API 仕様は こちら に解説されています。
End of explanation
response = service.voices().list(
  languageCode="ja_JP",
).execute()
for voice in response['voices']:
  print(voice)
Explanation: サポートされているすべての音声の一覧表示
テキスト読み上げ合成のために Cloud Text-to-Speech API で使用できる音声を一覧表示します。なお、 languageCode はこちらを参考にしてください。
End of explanation
source_language = "ja_JP" #@param {type: "string"}
source_sentence = "Google Cloud Text-to-Speech \u3092\u4F7F\u3046\u3068\u3001\u81EA\u7136\u306A\u4F1A\u8A71\u97F3\u58F0\u3092\u5408\u6210\u3067\u304D\u307E\u3059\u3002" #@param {type:"string"}
audio_encoding = 'OGG_OPUS' #@param ['OGG_OPUS', 'LINEAR16', 'MP3']
voice_gender = 'FEMALE' #@param ['FEMALE', 'MALE', 'NEUTRAL', 'SSML_VOICE_GENDER_UNSPECIFIED']
textwrap.wrap(source_sentence)
voice_name = 'ja-JP-Wavenet-A' #@param {type: "string"}
response = service.text().synthesize(
  body={
    'input': {
      'text': source_sentence,
    },
    'voice': {
      'languageCode': source_language,
      'ssmlGender': voice_gender,
      'name': voice_name,
    },
    'audioConfig': {
      'audioEncoding': audio_encoding,
    },
  }
).execute()
Explanation: テキストから音声を合成する
text.synthesize メソッドを使用すると、単語や文を自然な人間の音声の base64 でエンコードされた音声データに変換できます。このメソッドは、入力を生のテキストまたは音声合成マークアップ言語（SSML）として受け入れます。
End of explanation
import base64
from IPython.display import Audio
Audio(base64.b64decode(response['audioContent']))
Explanation: 合成した音声を確認しましょう
End of explanation
<END_TASK>