SVX日記
2009-03-12(Thu) この小ささが、既にしゃべりだしとったんじゃッ!!
ちょっと前、ラジオをバラして、裏のコネクタ経由で、USBから給電できるようにしたのだが、実は、1ヶ月ほど前から、NHKラジオの語学番組を自動録音し(あくまで私用に)Podcast配信するスクリプトを稼働していたのである。
その際、ディスプレイのないmp3プレイヤの弱点を「声で補う」ために、曲の冒頭に番組名をナレーションするという機能も実装していたのである。もちろん、オイラの肉声ではなく、Linuxに載っている「festival」という音声合成エンジンを使った人工音声で、である。
#!/usr/bin/env ruby
require 'time'
now = Time.now
sdate = now.strftime('%Y-%m-%d')
#-------------------------------------------------------------------------------
#
# 録音
#
time = 900
wavdir = 'wav/'
mp3dir = 'mp3/'
pname = 'rec_' + sdate
vname = 'voice_' + sdate # ナレーション一時ファイル名
talk = now.strftime('%A %B %d. N.H.K. radio english conversation program.') # ナレーションの内容
system('amixer -c 0 sset Capture,0 50%,50%')
system("arecord -D hw:0,0 -t wav -f cd -d #{time} #{wavdir}#{pname}.wav") # ラジオを録音
system("sox #{wavdir}#{pname}.wav -r 16000 -c 1 #{wavdir}#{pname}_low.wav")
system("echo '#{talk}' | text2wave -o #{wavdir}#{vname}.wav") # ナレーションの発声 → wav
system("sox #{wavdir}#{vname}.wav #{wavdir}#{pname}_low.wav -t wav - | lame -h - #{mp3dir}#{pname}.mp3")
#-------------------------------------------------------------------------------
#
# rss 作成
#
mp3file = pname + '.mp3'
title = sprintf("%d年%2d月%2d日(%s)の放送", now.year, now.month, now.day, \
['日', '月', '火', '水', '木', '金', '土'][now.wday])
author = '遠山 顕, Katie Adler, & Jerry Davidson'
subtitle = ['no-subtitle']
summary = ['no-summary']
open('item_source.txt') {|fh|
fh.each {|l|
if(l =~ /^summary([0-9]+):([-0-9]+):(.+)/)
summary[$1.to_i] = $3 if($2 >= sdate)
elsif(l =~ /^subtitle([0-9]+):([-0-9]+):(.+)/)
subtitle[$1.to_i] = $3 if($2 >= sdate)
end
}
}
url = "http://homepage.example.com/mypage/program1/#{mp3dir}#{mp3file}"
length = File.stat(mp3dir + mp3file).size
pubDate = now.rfc2822
duration = (`mpg321 -t #{mp3dir}#{mp3file} 2>&1` =~ /\[([0-9:]+)\] Decoding/) ? $1 : '15:00'
open('item.rss', 'w') {|fh|
fh.write <<ITEM
<item>
<title>#{title}</title>
<itunes:author>#{author}</itunes:author>
<itunes:subtitle>#{subtitle.join(' 〜 ')}</itunes:subtitle>
<itunes:summary>#{summary.join(' 〜 ')}</itunes:summary>
<enclosure url="#{url}" length="#{length}" type="audio/mpeg" />
<guid>#{url}</guid>
<pubDate>#{pubDate}</pubDate>
<itunes:duration>#{duration}</itunes:duration>
<itunes:keywords>english, conversation</itunes:keywords>
</item>
ITEM
}
system('cat head.rss > rec.rss')
system('cat item.rss >> items.rss')
system('cat items.rss >> rec.rss')
system('cat tail.rss >> rec.rss')
#-------------------------------------------------------------------------------
#
# HTML 作成
#
open('item.html', 'w') {|fh|
fh.write <<ITEM
<A href='#{url}'>#{title}</A><BR>
ITEM
}
system('cat head.html > index.html')
system('cat item.html >> items.html')
system('cat items.html >> index.html')
system('cat tail.html >> index.html')
#-------------------------------------------------------------------------------
#
# FTP
#
open('ftp.scr', 'w', 0600) {|fh|
fh.write <<ITEM
open ftp.example.com
user username password
bin
cd homepage
cd program1
put rec.rss
put index.html
put #{mp3dir}#{mp3file}
quit
ITEM
}
system('ftp -n < ftp.scr')
上記で実装した音声ナレーションの効果は絶大で、容易に目的の日付の番組にたどりつけるようになった。つーわけで「世界初、あなたに話しかけるミュージックプレイヤー。」は「Appleの新・iPod shuffle」ではなく、正真正銘「私の手元のZEN stone(¥1,980)」なのであった。うふん。
しっかし、この「新・iPod shuffle」だが、コストダウンのためだろうが、本体およびリモコンのボタンは最小限であり「リモコン中央のボタンを長押しすると、ボイスオーバーで曲名とアーティスト名を案内。中央ボタン1回クリックで再生/一時停止、2回で次の曲を再生、3回クリックで前の曲を再生」などという極端な操作仕様になっているのには驚いた。なんと、音量調節以外の操作は単一のボタンで行う仕様になっているように思える。これはいくらなんでもダメすぎでは?
先日から新たに「ZEN stone」を使い始めて、一番気になったのが「元祖・iPod shuffle」との微妙な違いであった。ZENでは「前曲/次曲」の操作数がバッファリングされない。3曲先に進めたいとき、連続3回押しても効かないのだ。また「早送り/早戻し」の操作フィーリングも違う。送り中の音声が短く、速度が遅く、ボタンを離してもオーバランするのだ。正直、これは作り込みの違いであり、この点に関しては、さすがはApple、なんだと思っていた。
試しにN810をmp3プレイヤとして使ってみた時に思ったのは「タッチパネルはアカン」という事実であった。通勤途中などで歩きながら曲を聴く場合、多少の手探り(耳探り?)がまどろっこしくても「メクラで操作するほうがラク」なのである。オイラは今までshuffleしか使ったことなかったから、表示画面で選べるのは便利だろうと思いこんでいたが、歩きながらでは不便なこと極まりなかった。だから、安さ以外の意味も込めて、敢えてZEN stoneを選択したのだ。