0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Amazon Pollyに英語のスクリプトを読み上げてもらう

Posted at

TL;DR

  • Amazon Pollyを使うと流暢にスクリプトを読み上げてくれる。休みを入れたりとか細かい制御もSSML (Speech Synthesis Markup Language) を使って制御できる。ただ細かい単語を期待通りに一発で読んでくれないこともあるので試行錯誤ができるように変換スクリプトを用意しておくと便利でした。

やり方

  1. Amazon Pollyに話してほしいスクリプトを作成
  2. Amazon Pollyにスクリプトを音声に変換してもらう
    これだけ

Amazon Pollyに話してほしいスクリプトを作成

SSML (Speech Synthesis Markup Language) でタグを付けてあげると細かい制御ができます。
全然難しくなくて単なるxmlです。

polly.xml
<?xml version="1.0"?>
<speak version="1.1"
  xmlns="http://www.w3.org/2001/10/synthesis"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US">
  <prosody rate="80%">
  This is sample
    <break time="0.5s" />
  You may edit the code <w role="amazon:NN">V</w><w role="amazon:NN">I</w> or <w role="amazon:NN">VIM</w> 
  </prosody>
</speak>

よく使ったタグ

  • prosody rate:デフォルトだと読み上げスピードが早かったので少し遅くするために使った。ただあんまり遅くしすぎるとゆっくりになりすぎてしまうので80%くらいまでが限界
  • break time:休みを意識的に入れたいときに使用した。ピリオドでも少し休みをいれてくれるが、意味の区切りでは少し長めに休みを入れたかったので使用
  • w role="amazon:NN":名詞として読ませたかった場合に使用した特に大変だったのがviと読ませること<w role="amazon:NN">V</w><w role="amazon:NN">I</w>にしてVとIを一文字づつ読ませることでなんとか読んでくれるようになった

Amazon Pollyにスクリプトを音声に変換してもらう

Pollyに変換してもらうxmlファイルが完成したら実際に変換をします。AWSコンソールから変換できるのですが変換ファイルが増えてくると大変なのでスクリプト化しておきました

build.sh
#!/bin/bash

set -e

COMMAND=$1
TARGET_FILE=$2
start=`date +%s`

current_directory=`pwd`
script_dir=$(cd $(dirname $0); pwd)
cd $script_dir
voice=Matthew

convert() {
    _create_dir
    echo ${voice}
    input_file=${TARGET_FILE}
    file_name=${TARGET_FILE%%.*}
    echo ${file_name}
    _to_audio_file ${voice} ${input_file} ${file_name}
    return 0
}

convert_all_files() {
    _create_dir
    echo ${voice}
    for input_file in *_*.xml
    do
        file_name=${input_file%%.*}
        echo ${file_name}
        _to_audio_file ${voice} ${input_file} ${file_name}
    done
    return 0
}

_to_audio_file() {
    voice=$1
    input_file=$2
    file_name=$3
    aws polly synthesize-speech \
        --text file://${input_file} \
        --voice-id ${voice} \
        --output-format mp3 \
        --text-type ssml \
        "../audio/${voice}/${file_name}.mp3"
    return 0
}

_create_dir() {
    mkdir -p ../audio/${voice}
    return 0
}

case $COMMAND in
    "--all" ) convert_all_files ;;
    "--target" ) convert ;;
    * ) echo "Usage: $0 --all | --target <TARGET_FILE_NAME>" 1>&2
        exit 1 ;;
esac

end=`date +%s`
echo Time elapsed: $((end-start)) seconds
cd $current_directory

exit 0

スクリプト化しておくことで変換が大分楽になりました。
build.shと同じディレクトリにある全ファイルを変換

./build.sh --all

build.shと同じディレクトリにある特定のファイルを変換

./build.sh --target <TARGET_FILE_NAME>

./build.sh --target 1_sample.xml

音声の読み上げをターミナルから実施する

Macでコマンドラインから音楽を再生する。
で紹介されていたafplayコマンドを使ってました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?