LoginSignup
14
0

More than 5 years have passed since last update.

Amazon PollyでHappy FizzBuzzオーディオライフ

Last updated at Posted at 2016-12-17

Happy FizzBuzz!!

今年はこのあいさつを流行らせていきたいと思います。
残り少ないですがよろしくお願いします。

この記事はリブセンスアドベントカレンダー2016 18日目 B面です。
A面 無限FizzBuzzリストでHappy FizzBuzzライフ
C面 oF製ビジュアライザでHappy FizzBuzzビジュアライズライフ
もあわせてご覧ください。

FizzBuzzオーディオ

さて、みなさんは私生活の中で

  • 今度ドライブでかけるFizzBuzz何にしようかな
  • たまにはお風呂の中でFizzBuzz聞きたいな
  • でも自分の声で録音するのも恥ずかしい…///

ということが多々あります。

そう、そんなときに役立つのがAmazon Pollyです。

まずはFizzBuzz配列を用意する

今回は同僚が作った「時をかけるFizzBuzz」の改造版を利用します。

t = Time.new
fb = []
(1..100).each do |n|
  a = 20; b = 12
  fb << case (t + n * a + n * b).sec
  when t.sec; "FizzBuzz"
  when (t + n * a).sec; "Fizz"
  when (t + n * b).sec; "Buzz"
  else; n
  end
end

Timeインスタンスのsecが60の剰余になっていることを利用した技アリの作品で、
「除算と剰余禁止縛りFizzBuzz」の中でも珠玉の逸品だと思っています。

Amazon Pollyで音声に変換

さて、準備はできました。
これをAmazon Pollyに依頼してMP3に変換します。

require 'aws-sdk'
require 'yaml'

creds = YAML.load(File.read('./secrets'))
polly = Aws::Polly::Client.new(
  access_key_id: creds['access_key_id'],
  secret_access_key: creds['secret_access_key'],
  region: creds['region']
)

t = Time.new
fb = []
(1..100).each do |n|
  a = 20; b = 12
  fb << case (t + n * a + n * b).sec
  when t.sec; "FizzBuzz"
  when (t + n * a).sec; "Fizz"
  when (t + n * b).sec; "Buzz"
  else; n
  end
end

polly.synthesize_speech(
    response_target: './fizzbuzz.mp3',
    output_format: 'mp3',
    text: fb.join(" "),
    text_type: 'text',
    voice_id: 'Mizuki'
)

そして叩いてみると……

~/src/fizzbuzz/polly$ bundle exec ruby polly.rb
~/src/fizzbuzz/polly$ afplay fizzbuzz.mp3

流れました!
実際の音声は
https://soundcloud.com/daisuke-katsura/mizukifizzbuzz
からぜひお聞きください。

英語でも聞ける。そう、Pollyならね。

同じFizzBuzzばかりではやはり飽きが来てしまう。
そんなわがままFizzBuzzリスナーもPollyなら満足していただけるかと思います。

上のコードのvoice_idを他の名前に変えるだけで、
英語、ポルトガル語、ロシア語などなどなんと24言語、
そして同じ言語でも男性女性色んな人の声があります。

たとえばJoanna(英語・女性)。

さすが、リズミカルです。

みなさまも、Amazon Polliyを使って、
HappyなFizzBuzzオーディオライフをお送りください。

14
0
1

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
14
0