AWS SDK for Python (boto3)でAmazon Pollyの声を使い分けてみる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

小ネタです。先日Amazon Pollyに待望の日本人男性声であるTakumiが追加されました。

なので、「男性と女性の会話の台本を作って、AWS SDK for Pythonを使ったPythonスクリプトに読み込ませて、MP3ファイルを作る」ということをやってみました。

やってみた

環境

Pythonスクリプトを動かしている環境は以下の通りです。

$ python --version
Python 2.7.10
$ python -m pip freeze | grep boto3
boto3==1.4.4

データ

以下のようなCSVデータを作ります。最初の項目がフラグで、Mが男性、Fが女性です。

$ cat data.txt
M, どうもー、タクミです。
F, ミズキです!
M, 最近台風のニュースが多いね。
F, 多いわねー。天気は良いほうが好き!

スクリプト

こんな感じでスクリプトを作りました。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from boto3 import Session
import os
import csv
import StringIO
from contextlib import closing

## Sessionを作成
session = Session(profile_name="default")
polly = session.client("polly")

## polly.mp3が存在した場合は削除
if os.path.isfile('polly.mp3'):
  os.remove ('polly.mp3')

## data.txtをCSVとして読み込む
f = open('data.txt')
reader = csv.reader(f)

## CSVを1行ずつ読み込む
for line in reader:

  ## CSVの1つめの項目で男女を切り替え
  if line[0] == "M":
    voice="Takumi"
  elif line[0] == "F":
    voice="Mizuki"

  ## 音声データを作成
  response = polly.synthesize_speech(
               Text = line[1].decode("utf-8"),
               OutputFormat = "mp3",
               VoiceId = voice)

  ## polly.mp3に追加書き込み
  if "AudioStream" in response:
    with closing(response["AudioStream"]) as stream:
      data = stream.read()
      fw = open("polly.mp3", "a+")
      fw.write(data)
      fw.close()

f.close()

音声データ

出来上がったデータがこれです。

さいごに

ちょっとした会話音声を簡単に作れるのはAmazon Pollyの魅力だなと思います。