AWS PollyをLaravelで利用したよ


はじめに

Amazon PollyはAWSが提供する深層学習を利用してリアルな音声に変換できるサービスです。

ブラウザの読み上げ機能よりクオリティの高い音声を実現したいなどテキストから音声ファイル(mp3)に変換したい時に活躍するのではないでしょうか。

そんな、AWS Pollyをハッカソンで利用したので備忘録的な感じで書いていきます。Pythonでの記事はたくさん見かけたのですがPHPはあまり見つからなかったので参考になればと思います。

AWSのサンプルコードがありますのでしておきます。PHP Code sample for Amazon Polly

※もし、利用方法などに間違いなどがあればコメントください。

実装

今回はAPIを利用し、下記の工程の流れとなります。
1.テキストをPollyに対してリクエストを送る
2.Pollyで作成したmp3ファイルをAWS S3に保存する。
3.S3に保存されたmp3ファイルのファイルパスをLaravelで取得する。
4.取得した、ファイルパスを保存する。

パッケージをインストールする

必要なパッケージをインストールする

composer require aws/aws-sdk-php
<?php
use Aws\Exception\AwsException;
use Aws\Sdk;
use Aws\Polly\PollyClient;
use App\Models\s3_file_path;

public function index(){
    $config = [
        'version' => 'latest',
        'region' => 'ap-northeast-1',
        'credentials' => [
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY')
        ]
    ];
    try {
       $client = new PollyClient($config);                    
       $result = $client->startSpeechSynthesisTask([
           'Text' => '再生するテキストです。',
           'OutputFormat' => 'mp3',
           'OutputS3BucketName' => 'bucket-name',
           'VoiceId' => 'Mizuki',
       ]);
       $s3_file_path = $result['SynthesisTask']['TaskId'];
       s3_file_path::create([
           's3_file_path'=>$s3_file_path
       ]);
     }catch (AwsException $e) {
        echo $e->getMessage();
        echo "\n";
     }
}

簡単なプログラムの解説

$client = new PollyClient($config);                    
$result = $client->startSpeechSynthesisTask([
    'Text' => '再生するテキストです。',
    'OutputFormat' => 'mp3',
    'OutputS3BucketName' => 'bucket-name',
    'VoiceId' => 'Mizuki',
]);
$s3_file_path = $result['SynthesisTask']['TaskId'];
s3_file_path::create([
    's3_file_path'=>$s3_file_path
]);

1.new PollyClientにてインスタンスを生成する。
2.テキストや、アウトプット形式、保存するバケット、読み上げる声優を指定する。
3.$result['SynthesisTask']['TaskId']にS3のファイルパスが保存されているので受け取る。
4.DBにファイルパスを保存する。

補足

パブリックにアクセスを受け付ける場合はS3の設定にてパブリックに公開の状態にすること。
現在の日本語の声優はMizukiさんとtakumiさんが存在するようです。