import boto3
import contextlib
import pprint
import time
import uuid
TEXT = """\
こんにちは!
"""
FILE_NAME_OF_MP3 = 'q1_out.mp3'
S3_BUCKET_NAME = 's3.bucket.name'
def translate(txt):
"""引数の日本語テキストを英語に翻訳します。
"""
t_obj = boto3.client('translate')
t_out = t_obj.translate_text(
Text=txt,
SourceLanguageCode='ja',
TargetLanguageCode='en'
)
return t_out
def exec_polly(txt):
"""英文テキストを音声合成します。
音声ファイルはカレントディレクトリに「q1_out.mp3」として出力します。"""
f_out = FILE_NAME_OF_MP3
p_obj = boto3.client('polly')
p_out = p_obj.synthesize_speech(
Text = txt,
OutputFormat = 'mp3',
VoiceId='Joanna'
)
with contextlib.closing(p_out['AudioStream']) as a_stream:
with open(f_out, 'wb') as file:
file.write(a_stream.read())
def exec_upload_s3(f_name, b_name, k_name):
"""S3へファイルをアップロードします。
"""
s3_obj = boto3.client('s3')
s3_obj.upload_file(f_name, b_name, k_name)
def exec_transcribe(b_name, k_name):
"""S3に格納された英語音声ファイルを文字起こしします。
"""
t_obj = boto3.client('transcribe', 'ap-northeast-1')
jobID = str(uuid.uuid1())
t_out = t_obj.start_transcription_job(
TranscriptionJobName=jobID,
Media={'MediaFileUri': 's3://' + b_name + '/' + k_name},
MediaFormat='mp3',
LanguageCode='en-US'
)
pprint.pprint(t_out)
while True:
t_out = t_obj.get_transcription_job(TranscriptionJobName=jobID)
status = t_out['TranscriptionJob']['TranscriptionJobStatus']
if status != 'IN_PROGRESS':
break
time.sleep(5)
print(status)
pprint.pprint(t_out)
if __name__ == '__main__':
t_out = translate(TEXT)
exec_polly(t_out.get('TranslatedText'))
exec_upload_s3('./' + FILE_NAME_OF_MP3,\
S3_BUCKET_NAME, FILE_NAME_OF_MP3)
exec_transcribe(S3_BUCKET_NAME, FILE_NAME_OF_MP3)