2011年9月26日月曜日

Bitrate?

foobar2000質問スレ Part20
http://hibari.2ch.net/test/read.cgi/software/1315878738/

350 :名無しさん@お腹いっぱい。 [↓] :2011/09/25(日) 10:06:28.72 ID:eDwWgtsy0 (1/5) [PC]
皆さんはFLACでエンコした後、ビットレートは固定で表示されてますか?
ステースバ―の%bitrate% kbpsを眺めるのが好きなもので
もし出来るのであれば可変で表示したいのですが、何か方法はありますでしょうか?

今はfoobarデフォのFLACエンコを使っていて
圧縮レベルを0~8試しましたら全て固定表示のようでした。
ALACの場合には可変で表示されています。

FLACの仕様が固定ビットレートなのかなあ?とも想像したのですが
FLACスレでこちらに誘導して頂いたのと、今までALACしか使った事がなく
無知なもので質問をさせて頂きました。どうかよろしくお願いします。

 

PCオーディオの話をすると必ずと言っていいほど出てくるこの言葉、いったい何なんだろうな?

 

1.ストレージIOの読み込みbitrate

これを取得するのにProcMonitor(http://technet.microsoft.com/ja-jp/sysinternals/bb842062)を利用した。

なんか再生して、フィルタを掛けてReadFileアクションのもののみを抽出、CSVに出力後加工して得られたのが下の図。

 

う~ん、まあこんな感じだよなあ。面白くない。

 

2.Processを監視して得られるストレージIO+スワップなどへのアクセス状況

初代スクリプト

   1:  var wbemFlagReturnImmediately = 0x10;
   2:  var wbemFlagForwardOnly = 0x20;
   3:  var objWMIService = GetObject("winmgmts:\\\\.\\root\\CIMV2");
   4:   
   5:  //<中略>
   6:   
   7:  function on_playback_time(time) {
   8:      if (Math.round(time/5)*5==time){
   9:          var colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfProc_Process", "WQL",wbemFlagReturnImmediately|wbemFlagForwardOnly);
  10:          var enumItems = new Enumerator(colItems);
  11:          var fooproc = "";
  12:          for (; !enumItems.atEnd(); enumItems.moveNext()){
  13:              var objItem = enumItems.item();
  14:              if(objItem.Name=="foobar2000"){
  15:                  fooproc = "\n◆foobar2000proc情報◆";
  16:                  fooproc += "\nIOReadBytesPersec: " + objItem.IOReadBytesPersec+"bytes";
  17:              }
  18:          }
  19:          fb.trace(fooproc);
  20:      }
  21:  }

 

ハッキリ言って全然ダメ、使い物にならない。

それもそのはずで、ストレージIOへのアクセスがたかが音楽再生だけでいっぱいいっぱいになるはずもなく、当然メモリにストックしたりスワップしたりするだろう、これでは測れない。

しかし、見方を変えれば、IOへのアクセスのBitrateは取得できているということになる。まさにBytesPersecだからね。

初代というかそれ以降色々試してみたけど結局ダメ。

 

参考サイト

[WMI] Win32_PerfFormattedData_PerfProc_Process クラス - WMI Library
http://www.wmifun.net/library/win32_perfformatteddata_perfproc_process.html

 

結局はだよ

結局、圧縮されたメディアファイル→デコーダ→展開されたメディアファイル

でこのメディアファイルのサイズのbitrateのことなんだろうなと勝手に思っている。

どうやって測ろうか?

 

AVIならM$の便利なAPI使えるんだけどね。



0 件のコメント:

コメントを投稿