TwitterのIDをsayコマンドでしゃべらせるときのコツ

先日のTwitterのタイムラインを監視してキーワードにマッチしたらGrowlするRubyスクリプト(2) - 今日覚えたことでやったように、Twitterのタイムラインを監視して条件にマッチしたときに投稿者のIDをMacのsayコマンドでしゃべらせるのが意外と面白い。Growlと組み合わせて普通に常用している。

これはRubyのコードで

`say #{screen_name}`

ってやって実装してる。単純にscreen_nameをsayコマンドで読み上げてるだけだ。

たとえば自分のIDはnacookanなので、以下のように読み上げられる。

Download

変な感じに読み上げることがある

ところが、IDによってはちょっと変な感じに読み上げられてしまうことがあるのがわかった。

たとえば「foo_bar」っていう文字を読み上げると、

Download

「ふぅ......ばぁ」

のように、アンダースコア("_")のところで長いタメができてしまって不自然になる。

あと、「foobar1」のようにアルファベットと数字がくっついた文字を読ませると、

Download

「えふおぅおぅびーえーあーるわん」

のように、もはや単語として読み上げるのをあきらめて、1文字ずつ読んでしまうことがある。

スペースで解決

調べたところ、「foo_bar」は「foo bar」、「foobar1」は「foobar 1」のようにすると、うまく読んでくれるようだ。

Download
Download

つまり何でもかんでもスペースで区切ってしまえば良いということらしい。

そこで、先日のコードのsayの部分(この記事の冒頭に書いた部分)を、以下のように変えた。

`say #{screen_name.gsub(/_/, ' ').gsub(/([a-zA-Z]+|[0-9]+)/){$1 + ' '}}`

アンダースコアはスペースに変換し、あと英語と数字の間にもスペースをあけるようにしただけ。わりと簡単。これでいろんなIDを読ませてみたら、なかなか良い感じに読んでくれるようになった。

もちろん、もともと読めないようなIDではうまく行かないけど、それはそれで味があって良い。

ってことで先日の日記も更新しておいた。