Amazon PollyをAWS CLIから使ってみる #reinvent

eyecatch_polly

はじめに

Amazon Pollyのリリースについて、以下のブログでお知らせしました。

サービスリリースに合わせてAWS CLIもアップデートされています。Amazon PollyをAWS CLIから使ってみました。

やってみた

最新のAWS CLIのインストール

現時点でAmazon LinuxのyumリポジトリにあるAWS CLIはバージョンが古いです。

$ aws --version
aws-cli/1.6.5 Python/2.6.9 Linux/4.1.13-19.30.amzn1.x86_64

そこで最新のAWS CLIのZipファイルを取得して展開します。

$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
$ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

確認。バージョンが1.11.23になっています。

$ /usr/local/aws/bin/aws --version
aws-cli/1.11.23 Python/2.6.9 Linux/4.1.13-19.30.amzn1.x86_64 botocore/1.4.80

aws configureでAmazon Pollyが使えるリージョンを指定しておきます。

$ aws configure
AWS Access Key ID [********************]:
AWS Secret Access Key [********************]:
Default region name [us-east-1]:
Default output format [None]:

describe-voices

ボイスの種類を取得します。

$ /usr/local/aws/bin/aws polly describe-voices
{
    "Voices": [
        {
            "Gender": "Female",
            "Name": "Joanna",
            "LanguageName": "US English",
            "Id": "Joanna",
            "LanguageCode": "en-US"
        },
        {
            "Gender": "Female",
            "Name": "Mizuki",
            "LanguageName": "Japanese",
            "Id": "Mizuki",
            "LanguageCode": "ja-JP"
        },
<...snip...>

list-lexicons

発音辞書であるlexiconをリスト取得します。事前に登録しておいた、smokeymonkeyというlexiconが表示されています。

$ /usr/local/aws/bin/aws polly list-lexicons
{
    "Lexicons": [
        {
            "Attributes": {
                "LanguageCode": "en-US",
                "LastModified": 1480547800.2980001,
                "Alphabet": "ipa",
                "LexemesCount": 1,
                "LexiconArn": "arn:aws:polly:us-east-1:XXXXXXXXXXXX:lexicon/smokeymonkey",
                "Size": 481
            },
            "Name": "smokeymonkey"
        }
    ]
}

get-lexicon

lexiconの詳細情報を取得します。

$ /usr/local/aws/bin/aws polly get-lexicon --name smokeymonkey
{
    "Lexicon": {
        "Content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<lexicon version=\"1.0\" \n      xmlns=\"http://www.w3.org/2005/01/pronunciation-lexicon\"\n      xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n      xsi:schemaLocation=\"http://www.w3.org/2005/01/pronunciation-lexicon \n        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd\"\n      alphabet=\"ipa\" \n      xml:lang=\"en-US\">\n  <lexeme>\n    <grapheme>sasaki</grapheme>\n    <alias>smokeymonkey</alias>\n  </lexeme>\n</lexicon>",
        "Name": "smokeymonkey"
    },
    "LexiconAttributes": {
        "LanguageCode": "en-US",
        "LastModified": 1480547800.2980001,
        "Alphabet": "ipa",
        "LexemesCount": 1,
        "LexiconArn": "arn:aws:polly:us-east-1:XXXXXXXXXXXX:lexicon/smokeymonkey",
        "Size": 481
    }
}

put-lexicon

新たにlexiconを登録します。指定したファイルをPUTします。

$ /usr/local/aws/bin/aws polly put-lexicon --name test --content file://test.xml

確認。testというlexiconが増えています。

$ /usr/local/aws/bin/aws polly list-lexicons
{
    "Lexicons": [
        {
            "Attributes": {
                "LanguageCode": "en-US",
                "LastModified": 1480547800.2980001,
                "Alphabet": "ipa",
                "LexemesCount": 1,
                "LexiconArn": "arn:aws:polly:us-east-1:XXXXXXXXXXXX:lexicon/smokeymonkey",
                "Size": 481
            },
            "Name": "smokeymonkey"
        },
        {
            "Attributes": {
                "LanguageCode": "en-US",
                "LastModified": 1480552210.5350001,
                "Alphabet": "ipa",
                "LexemesCount": 1,
                "LexiconArn": "arn:aws:polly:us-east-1:XXXXXXXXXXXX:lexicon/test",
                "Size": 486
            },
            "Name": "test"
        }
    ]
}

delete-lexicon

lexiconを削除します。

$ /usr/local/aws/bin/aws polly delete-lexicon --name test

確認。testというlexiconが無くなっています。

$ /usr/local/aws/bin/aws polly list-lexicons
{
    "Lexicons": [
        {
            "Attributes": {
                "LanguageCode": "en-US",
                "LastModified": 1480547800.2980001,
                "Alphabet": "ipa",
                "LexemesCount": 1,
                "LexiconArn": "arn:aws:polly:us-east-1:XXXXXXXXXXXX:lexicon/smokeymonkey",
                "Size": 481
            },
            "Name": "smokeymonkey"
        }
    ]
}

synthesize-speech

メインで使う機能ですね。文章読み上げです。ここではoutputをmp3とし、mp3ファイルで保存しています。

$ /usr/local/aws/bin/aws polly synthesize-speech --text "Classmethod is blog company." --voice-id Joanna --output-format mp3 speech.mp3
{
    "ContentType": "audio/mpeg",
    "RequestCharacters": "27"
}

保存されたファイルの確認。ちゃんと保存されています。

$ ls -alF speech.mp3
-rw-rw-r-- 1 ec2-user ec2-user 11957 12月  1 09:32 speech.mp3

さいごに

次はSDKにもチャレンジしたいです!