PR
Category
Keyword Search
Comments
Freepage List
チャンネル設定と、
ちょっとコードはわかりにくいが、system()で呼び出すコマンドのパラメーターをhDBというハッシュ変数で指定しています。 @hDB["%1]~@hDB["%9"]はパラメーターの仮引数で、iEPGD#to_s()を用いて一度評価しています。このとき、Windowsでファイル名に使えない文字を全角に変換、半角スペースも'_'に変換しています(to_WInFileName関数)。その上で、system()関数で実際に外部のコマンドを呼び出しています。
今回のプログラムでは、チューナーとキャプチャは別のプログラムで制御してもよいようにしていますが、キャプチャプログラムによっては、キャプチャ開始後にチューナーのチャンネル切り替えが起きるとコケる場合がある一方で、この問題がなければ同時にスタートさせた方が録画の頭が切れてしまう可能性が減ります。そこで、チューナーの制御をシーケンシャルに行うか、別スレッドで並行して行うかを選択できるようにしました。まあ、これも、startコマンドを使えばよいのですが...
なお、 Windowsでspawnするプログラム
http://www.longtail.co.jp/pck/
とかを発見しました。一応linkしときましたが、
require( 'IEPGD' )
require( 'to_WinFileName' )
require('thread') class TVTuner
def initialize( hDB , logsw=false )
@hDB = hDB
@logSw = logsw
if @logSw
print( "#{Time.now.to_s} #{__FILE__},#{__LINE__},::initialize()\n" )
end # if
if ( cmd = @hDB[ "init_cmd"]) != ""
system( cmd )
end
end # def initializer( iniFileSpec ) attr_accessor :logSw def tune( iEPGD )
if (cmd = String.new( @hDB["tune_cmd"]) ) != ""
1.upto(9) {|i|
stridx = sprintf("%%%d", i)
param = iEPGD.to_s( @hDB[ stridx ] )
param = to_WinFileName(param )
cmd = cmd.gsub( /#{stridx}/, param )
}
if @logSw
print( "#{Time.now.to_s} #{__FILE__},#{__LINE__},::tune() #{cmd}\n" )
end #if
if @hDB["Concurrent"] == "true"
Thread::start {
system( cmd )
}
else
system( cmd )
end
end
end # tune
end # class TVTuner
「バグ」っすかね、やっぱり 2010.12.15
「いっちゅう」さんのiEPG用ソフト入れて… 2009.09.15 コメント(2)
Teraterm のバグ? 2009.08.23