VoiceText Web APIを使ってTwitterのhome_timelineを読み上げる
はじめに
今日のお題は、夏休みの自由研究的なものです。
昨日、VoiceText Web API (β版)というサービスが公開されました。こちらはHOYAサービス株式会社様の音声合成ソフトウェア「VoiceText」を、Web API経由で使えるというものになります。こちらが良く出来ていて、読み上げの精度も高いし、元となる声や感情を複数種類から選べるし、声のピッチやスピードも変えられるし、なかなか面白いです。
このサービスを使ってちょっと遊んでみようと思い、Twitterの自分のホームタイムラインを読み上げさせるスクリプトを書いてみました。
材料
- Ruby (2.0.0p353)
- The Twitter Ruby Gem
- VoiceText Web API
- VoiceTextApi (ex. VoiceText Web APIで遊ぶ - ただのにっき(2014-07-09))
- SoX...VoiceTextApiが返したWAVEバイナリデータを再生する為に使ってます。
- Open3...SoXに標準入力を渡しています。
できたもの
[Ruby]
require 'twitter' require 'voice_text_api' require 'open3'
CONSUMER_KEY = 'your_consumer_key' CONSUMER_SECRET = 'your_consumer_secret' OAUTH_TOKEN = 'your_oauth_token' OAUTH_TOKEN_SECRET = 'your_token_secret' API_KEY = 'your_api_key'
SPEAKER = ["haruka", "hikari", "takeru"] begin twcli = Twitter::REST::Client.new do |config| config.consumer_key = CONSUMER_KEY config.consumer_secret = CONSUMER_SECRET config.access_token = OAUTH_TOKEN config.access_token_secret = OAUTH_TOKEN_SECRET end vt = VoiceTextAPI.new(API_KEY)
twcli.home_timeline({"count"=>200}).each do |tweet| speaker = SPEAKER[rand(3)] text = "#{tweet.text}"
if /[!!]/ =~ text then emolevel = "2" else emolevel = "1" end
if /[喜嬉楽幸]/ =~ text then emotion = "happiness" elsif /[悲辛苦]/ =~ text then emotion = "sadness" elsif /[怒]/ =~ text then emotion = "anger" else emotion = nil end
if emotion == nil then wav = vt.tts(text, :"#{speaker}") else wav = vt.tts(text, :"#{speaker}",emotion: :"#{emotion}", emotion_level: "#{emolevel}") end Open3.capture3("/Users/sasakidaisuke/sox/play -", :stdin_data=>wav) end
rescue print "RuntimeError: ", $!, "\n"; end
[/Ruby]
まとめ
オフィスの中でPCの音量を最大にして実行したところ、オフィスが爆笑に包まれました...
VoiceText Web APIはもっと活用方法がありそうなので、今後面白いサービスが生まれてくるのでは無いでしょうか。楽しみです!