Dies Aliquanti

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

チャンネル設定とキャプチャコマンド RubyでPVRを作ろう!その14

チャンネル設定と、キャプチャ用の外部コマンドをキックする部分です。基本的には、外部プログラムをsystem()関数で呼ぶだけ。どうも、Windows用のActiveRubyはspawn系が使えないみたいなので、systemで我慢。バックグラウンドでコマンドを起動するには、startコマンドを使えば良いでしょう(多分)。

ちょっとコードはわかりにくいが、system()で呼び出すコマンドのパラメーターをhDBというハッシュ変数で指定しています。 @hDB["%1]~@hDB["%9"]はパラメーターの仮引数で、iEPGD#to_s()を用いて一度評価しています。このとき、Windowsでファイル名に使えない文字を全角に変換、半角スペースも'_'に変換しています(to_WInFileName関数)。その上で、system()関数で実際に外部のコマンドを呼び出しています。

 今回のプログラムでは、チューナーとキャプチャは別のプログラムで制御してもよいようにしていますが、キャプチャプログラムによっては、キャプチャ開始後にチューナーのチャンネル切り替えが起きるとコケる場合がある一方で、この問題がなければ同時にスタートさせた方が録画の頭が切れてしまう可能性が減ります。そこで、チューナーの制御をシーケンシャルに行うか、別スレッドで並行して行うかを選択できるようにしました。まあ、これも、startコマンドを使えばよいのですが...   

 なお、Windowsでspawnするプログラムhttp://www.longtail.co.jp/pck/
とかを発見しました。一応linkしときましたが、中身をちゃんと見たわけではないので、今回の目的にあっているかどうかは知りません。


で、肝心のtunerクラスと、VideoRecorderクラスだけれども、ほとんど同じコードになってしまっている。なんか、だっさいな~...こういう時どうするのが、ruby風なんだろ??

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



コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://diesaliquanti.blog.fc2.com/tb.php/657-d0784def
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

まとめ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。