はじめに
今回は Amazon Pollyの音声合成を試します。
今回作成したAmazon Polly の音声合成機能を試すページ
準備
[Lambda , API Gatewayの準備をします。]
(https://qiita.com/tanaka_takurou/items/3f93295de6cff060ec09)
[S3の準備をします。]
(https://qiita.com/tanaka_takurou/items/de897b0906087cec1a86)
[Amazon Pollyの資料]
Amazon Polly を使用した日本語テキスト読み上げの最適化
Amazon Pollyを触ってみたよ by PHP
WEBページ・API作成
GO言語のAWS Lambda関数ハンドラー aws-lambda-go を使用してHTMLやJSONを返す処理を作成します。
また、Polly を使用するため aws-sdk-go を利用します。
[参考資料]
AWS SDK for Go API Reference
音声合成を利用するには SynthesizeSpeech を使う。
func synthesizeSpeech(message string)(string, error) {
t := time.Now()
svc := polly.New(session.New(), &aws.Config{
Region: aws.String("ap-northeast-1"),
})
voiceId := "Takumi"
input := &polly.SynthesizeSpeechInput{
Text: aws.String(message),
TextType: aws.String("text"),
VoiceId: aws.String(voiceId),
LanguageCode: aws.String(languageCode),
OutputFormat: aws.String(outputFormat),
}
res, err := svc.SynthesizeSpeech(input)
if err != nil {
return "", err
}
buf := new(bytes.Buffer)
io.Copy(buf, res.AudioStream)
data := buf.Bytes()
contentType := "audio/mp3"
filename := t.Format(layout2) + ".mp3"
sess, _ := session.NewSession(&aws.Config{
Region: aws.String(bucketRegion)},
)
uploader := s3manager.NewUploader(sess)
_, err = uploader.Upload(&s3manager.UploadInput{
ACL: aws.String("public-read"),
Bucket: aws.String(bucketName),
Key: aws.String(filename),
Body: bytes.NewReader(data),
ContentType: aws.String(contentType),
})
if err != nil {
return "", err
}
url := "https://" + bucketName + ".s3-" + bucketRegion + ".amazonaws.com/" + filename
return url, nil
}
作成された音声ファイルをS3にアップロードし、そのURLを指定することでWebページ上で再生する方法をとりました。
終わりに
今回はAmazon Pollyの音声合成機能を試しました。
他の機能として、発話スタイルを指定した音声を合成ができます。現在は米国英語限定です。