FizzBuzz
AWS
Polly

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

More than 1 year has passed since last update.


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(英語・女性)。

https://soundcloud.com/daisuke-katsura/joannafizzbuzz

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

みなさまも、Amazon Polliyを使って、

HappyなFizzBuzzオーディオライフをお送りください。