いや~、朝晩だんだん寒くなってきて、布団からなかなか出られなくなってきました。にゃんこ達はあさごはんが遅くなってしまい、死にそうな声でせがんだりしてます(笑)。
(2009/10/29 追記) スクリプトはちょっとバグってたので修正しました。
それはともかく、arecord直では自動運転するのにすこし不便なので、一枚皮をかぶせるためにrubyでスクリプトをさくっと書いてみました。
ruby arecord_suga.rb [-D デバイス名] [-F 保存フォルダ] [-s] ファイル名
-s は録音ストップの指定
みたいに使います。
ソースはこんな感じ
#!/usr/bin/ruby -wKu
# (c) 2009 BO
# usage
# arecord-sugar [-D device] [-F FolderToSave] [filename]
# arecord-sugar -s
# History
# 2009/10/29
# fix
# (1) way to identify PID of the running arecord
# (2) snding kill SIGTERM to arecord correctly
#
#tested on
# ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
require 'optparse'
opt = OptionParser.new
Config = Hash.new
#default config
Config[:folder] = '.'
Config[:stop] = false
Config[:device] = 'hw:1,0'
opt.on('-F FOLDER', '--folder=FOLDER') {|v| Config[:folder] = v.to_s }
opt.on('-D DEVICE', '--device=DEVICE') {|v| Config[:device] = v.to_s }
opt.on('-s', '--stop') {|v| Config[:stop] = true }
opt.parse!(ARGV)
previous_run = `ps -C arecord h`
reg = / *(\d*).*arecord .*-D +#{Config[:device]}/m
# if previus one exists, kill it
if reg =~ previous_run
p $1
`kill #{$1}`
end
#check if STOP mode
if Config[:stop]
exit( 0 )
end
if ARGV[0]
basename = ARGV[0]
else
basename = Time.now.strftime('%Y_%m_%d__%H_%M_%S')
end
filename= "#{Config[:folder]}/#{basename}.wav"
num=0
while( File.exist?( filename ) )
num = num +1
filename= "#{Config[:folder]}/#{basename}_#{num}.wav"
end
cmd = "arecord -t wav -f dat -D #{Config[:device]} #{filename} & "
system( cmd )