読者です 読者をやめる 読者になる 読者になる

once upon a time,

Iris Tradをビール片手に聞くのが好きなエンジニアが、機械学習やRubyにまつわる話を書きます

RubyでAmazon Pollyを使ってWebサイトの読み上げ音声合成してみた

ruby TTS

f:id:chezou:20161201230818p:plain:w200

今日のre:Inventで音声合成サービスのAmazon Pollyが発表されました。

Amazon Polly – 文章から音声へ、47の声と24の言語 | Amazon Web Services ブログ

Pollyが凄いのは、AWS CLIで簡単に音声合成がされるということです。しかも、お値段は月500万字までは無料で、その後も$0.000004/文字と非常に安く、本一冊で$2.4くらいという驚異的な安さです。

$ aws polly synthesize-speech \
  --output-format mp3 --voice-id Joanna \
  --text "Hello my name is Joanna." \
  joanna.mp3

また、サポートしている言語数も2016/12/01現在で、ヨーロッパ言語を中心に以下の24言語をサポートしています。

日本語も聞いていて結構自然に聞こえており、ちょいちょい単語の認識に失敗するときは変なアクセントになりますが、レキシコンで単語を登録すれば自分で改善もできそうです。 サンプル音声はこんな感じです。

http://chezou.tumblr.com/post/153883804175/amazon
chezou.tumblr.com

で、Mediumなんかの記事の中に面白い記事をよく見るのですが、英文だとなかなか途中で挫折するので、音声にすれば聞くんじゃないかと思い、記事を音声に変換するコードをRubyで書いてみました。 以下にコードがあります。

gist.github.com

ポイントとしては、幾つか重要な制約があります。

  • API一回あたりの文字数が1500字*1(なので、catでmp3を結合している)
  • 長い音声は、5分以降が切り捨てられる

詳細は以下を参考にしてください。 docs.aws.amazon.com

実際には、ちょうどHckr newsで見つけた以下の記事の音声を聞いてみました。意外と聞けます。

How the Circle Line rogue train was caught with data

もうちょっと頑張ってRSSを取得すれば、特定のサイトの最新の記事の音声を生成して、Dropboxに保存した音声をモバイルから再生するということもできそうですね。

正直、安くて多言語でそれなりに自然で何よりAPIが使いやすいということで、既存の日本の音声合成を頑張ってきた企業は大変だなぁという気持ちになりますが、いろいろな使い方ができそうで楽しみです。

*1:厳密には、"1500 billed characters (3000 total characters)"と書いてあるけど"billed characters"がわからない