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オーディオライフをお送りください。