緑のボタンを押せ! Press the green button

緑のボタンを押せ! Press the green button

PR

×

Keyword Search

▼キーワード検索

Archives

2026.10
2026.09
2026.08
2026.07
2026.06

Comments

effelpist@ kilovermek.es effelpist &lt;a href=&quot; <small> <a href="http…
Jun@ Re:「いっちゅう」さんのiEPG用ソフト入れてみた(09/15) TVdeIEPG Ver.1.2.1.0がリンク切れしてい…
スター@ Re:hauppauge HD PVR 速報(08/25) スタービーチ <small> <a href="http://c…
ASOBO@ Re:hauppauge HD PVR 速報 ASOBO攻略 <small> <a href="http:/…
ハッピーメール@ Re:hauppauge HD PVR 速報 ハッピーメール <small> <a href="http:/…

Freepage List

Favorite Blog

まだ登録されていません
2009.05.29
XML
テーマ: 私のPC生活(7590)
カテゴリ: PVR

チャンネル設定と、 キャプチャ用の外部コマンドをキックする部分です。基本的には、 外部プログラムを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しときましたが、 中身をちゃんと見たわけではないので、 今回の目的にあっているかどうかは知りません。


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






お気に入りの記事を「いいね!」で応援しよう

Last updated  2009.05.30 04:53:33
コメント(0) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: