デバックログとビデオキャプチャ編アマレコ・オーディオ・レンダラーやPCのオーディオデバイスに付いてもう少し詳しくお話します。ビデオキャプチャカードに搭載されているオーディオデバイスについてもふれます。アマレコ・オーディオ・レンダラーのデバックログを見ると録音デバイス、再生デバイスの挙動がある程度見えてきます。次のことがわかります。・録音デバイスが何ミリ秒単位で録音処理しているか(実際のアロケータサイズ)・録音デバイスが何ミリ秒間隔でデータを送ってくるか(インターバルタイム)・再生デバイスの実再生レート(再生サンプリングレート)・そのとき再生デバイスにバッファリングされているデータ量(Latency)・アマレコ・オーディオ・レンダラーの可変再生速度により補正された様子1.デバックログのとり方AmaAudioRenderer.iniのiDebugLogを1にするとAmaRecTV.exeまたはAmaMix.exeと同じフォルダに「AmAudioRenderer(日時)[デバイス名].txt」と言ったファイル名でデバックログが作成されます。データを記録した時間です。例ではプレビューを開始してから2分46秒341ミリ秒経過したときに録音デバイスからデータを受け取っています。カッコ内は前のデータからの間隔(インターバルタイム)です。例では41ミリ秒間隔でデータを受け取っています。recvは録音デバイスから受け取ったデータのサンプル数(=アロケータサイズ)。例では1920サンプル(約40ミリ秒分の音声)のデータを受け取りました。writeは再生デバイスの再生バッファへ書き出したデータのサンプル数。例では1901サンプル(約39.6ミリ秒分の音声)のデータを書き出しています。カッコ内は可変再生速度による補正がどのように行われたかを記録しています。100%なら補正を行っていません。99%なら1%再生時間が短くなるよう補正しています。101%なら1%再生時間が長くなるよう補正しています。パーセントの後の+0はさらに細かい制御(マイクロフィードバック制御)情報です。+1か-1になることがあります。それぞれ1サンプル分再生時間を長く(短く)なるよう補正したことを表します。最後に再生デバイスの再生レート(サンプリングレート)の実測値を10秒間の平均値で記録しています。その時点での反応時間です。再生バッファに溜まっているデータ量を1ミリ秒単位で記録しています。カッコ内は設定値の目標反応時間です。この値に近づくよう可変再生速度が働きます。例では目標が20ミリ秒に対し現在の反応速度が29ミリ秒と遅れているため、再生時間を短くし、反応時間が20ミリ秒に近づくよう可変再生速度による補正が行われています。可変再生速度により補正が行われた回数をカウントしています。必要な補正(プレビューの開始直後や途中で設定値が変更された場合)はカウントされません。マイクロフィードバック制御の場合もカウントしません。例では補正が行われていますが、直前に目標反応時間が30から20に変更された事による補正のためカウントされていません。再生デバイスのその時点での再生位置です。48040,0はLatencyの値を計算するのに使う補正値です。補正の様子を#の個数で表示します。100%の時#を10個表示します。99%の時は9個と1%ごとに#が減ります。2011.08.09遅延の実測はステレオ(左右同音)の片チャンネルだけPCのLine入力に接続し、PCのLine出力端子の様子と、PCを通さなかったもう一方のチャンネルの波形を記録します。PCを通さなかった方を基準にしPCを通したチャネルがどれだけ遅れたかを観察します。4:##########アロケータサイズが40msなので本来ならインターバルタイムは40msなりますが、デバックログを見ると所々31ms間隔になっているのがわかります。これは、40ms間隔でデータを送るべきところを僅かに遅れ41ms間隔でデータが送られていて、その遅れが徐々に蓄積し10msの遅れに達したとき30ms間隔にすることでバランスをとるよう録音デバイスが動作しているためです。長い目で見れば遅れた分を取り戻すように動作してるため問題になりませんが、遅延をできるだけ減らそうとした場合は厄介です。結局この録音デバイスはアロケータサイズによる遅延(40ms)と動作タイミングのばらつきによる遅延(10ms)をあわせた50msの遅延が最低でも生じることになります。0:##########アロケータサイズは40msで固定。インターバルタイムも40msで安定しているのでまずまずの性能です。最後にまとめますが遅延の実測値は64msです。一箇所マイクロフィードバック制御が働いています(オレンジ部)が、マイクロフィードバック制御はどのオーディオデバイスでも必ず発生するので問題ありません。0:##########アロケータサイズは50msで固定。インターバルタイムが30msから60msでばらつくため性能は悪いと言えます。アロケータサイズが大きめなことと、インターバルタイムがばらつく分、遅延の実測値も悪く101msです。0:##########アロケータサイズは約32msで固定。見ると受け取るサンプル数(recv)が1536の場合と1535の場合があります。端数の帳尻を合わせるためと思われますが、これは問題ありません。インターバルタイムも安定していて、アロケータサイズも小さ目なため遅延の実測値は58msと良好です。何で32msなんだろうという疑問はあります。アマレコ・オーディオ・レンダラーの設定の最小バッファサイズ(iMinimumBuffSizeMS)が20msなので、その部分で頭打ちされていました。iMinimumBuffSizeMSを0とすることで20ms以下のアロケータサイズのテストができますのでその部分を再テストしました。その結果も合わせて最後にデータをまとめて記します。遅延の実測値には±5ms程度の誤差があります。オンボードLineインのアロケータ40ms、iLatency10msとキャプチャカードのSC500を比べるとアロケータサイズ、Latencyが同じなので遅延の実測値も近くなるはずですが、10msオンボードのほうが遅れています。これはデバックログのところでお話した録音デバイスのインターバルタイムが不安定なためです。同様にLineインのほかの実測値も10ms余計に多くなっているものと推測できます。インターバルタイムが安定していたらアロケータ10ms、iLatency10msで実測遅延34msとなるのかもしれません。ビデオキャプチャカードの方はアロケータサイズの変更ができないためこれ以上遅延を減らすことができません。一歩踏み込んでアロケータサイズの変更に対応してもらえると良いなと思います。ベータ版」で触れたようにアマレコTVがビデオキャプチャカードからデータを受け取る際のタイミングにはばらつきがあります。それを確認するためにAmDeinterlace.axと同じフォルダにある「AmDeinterlace.ini」をメモ帳で開いて「iDebugLog」を”1”にするとアマレコTVがデータを受け取った際の時刻やステータスを記録したログファイルを作成することができます。「iWaitDeliver」は今回のタイミング調整を行うかどうかの設定です。0なら調整を行わない(今まで通りの動作)。1でタイミング調整を行うようになります。タイミング調整はアマレコTVのプレビュー設定でソフトウエアデインターレースを使う場合に限り行われます。デインターレースを行わなかったり、ハードウエアデインターレースを使う場合はタイミング調整は行われません(今のところ必要ないので)。ビデオキャプチャカードのタイミングを観察するときはアマレコTVのタイミング調整が影響してしまうので「iWaitDeliver」を0にしてタイミング調整しない状態で観察してください。2011.08.09PlayStation2本体でPS1のゲーム「雷電プロジェクトの雷電II」を使用。60fps)になります。各行にデータを受け取った時刻とステータスが記録されています。赤枠の部分は一つ前のデータからの経過時間(インターバルタイム)でビデオキャプチャカードのタイミングを観察できます(今回注目する値)。IdleはアマレコTVのデータ処理が終わり次のデータが届くまでの暇な時間(アイドルタイム)。この時間が少ないと遅延している(急いでデータが送られてきている)可能性があります。IdleCountはIdleが小さい時にカウントが増えます。一定値に達すると遅延を回復するため意図的にプレビューの画像をドロップします。Sizeは受け取ったデータ量。2=691,200バイトになります。SP、Pl、DcはDirectShowフィルターのステータス。行の最後にはインターバルタイムを“#”の個数で表示しています。#ひとつが5msです。GV-USB2の場合、擬似NTSCのビデオ信号を秒間30フレームのデータ(インターレースのようにインターリーブされたデータ)として送ってきますので、正常なインターバルタイムは33msとなります。ところどころ約64msになっており33msより大きく遅れているのがわかります。その後、数フレームを33msより早いタイミングで送ることで平均的に見て33msとなるよう動作しています。背景が青くなっている23フレーム分(約0.8秒)が一つのサイクルになっているようです。■SD-USB2CAP4の結果SD-USB2CAP4も秒間30フレームのデータとして送ってきますので正常なインターバルタイムは33msです。GV-USB2の時と同様インターバルタイムが33msより遅くなることがありますが約40msとGV-USB2より遅れは少なくなっています。こちらも青くした6フレーム(約0.2秒)を1サイクルとして平均33msになるよう動作しています。60fps(59.94fps)でキャプチャするため正常なインターバルタイムは16.6msです。テスト結果から約16.7msで安定しているのがわかります。これは、アマレコTVでタイミング調整することなく滑らかなプレビューができるだけでなく遅延も少ない事を意味します。■遅延に付いて遅延に付いて語るのは難しいのですが、今回の結果からビデオキャプチャカードにより生じる遅延の最小値(最低でもこれだけは遅延すると言う値)は次のようになります。この他に、ビデオレンダラーによる遅延とビデオカードによる遅延が生じます(両方あわせて約17ms)。Windows7でデスクトップコンポジションを行う場合はデスクトップコンポジションによる遅延も生じます。タイミングが安定されると良いなと思います。あと擬似NTSCがキャプチャできるだけでも有難いけど、SC500の様に240pでキャプチャできればパソコンの画面を見ながらゲームしやすくなると思うので、そういった商品も今後出てくると良いなと思います。2GV-USB2の色ズレ初代のGV-USBではゲーム機をS-VIDEOで接続したときに縦方向に色がずれていました。そこで、GV-USB2でも同様のズレがあるか調べてみることにしました。1.1.0.93.5■結果GV-USB2では色ズレは起こらないようです。アマレコTVの高度な設定にある「GV-USBで色ズレを補正」は初代GV-USB専用(他のキャプチャカードでは働かない)なので、この設定をONやOFFにしてもGV-USB2の映像に変化はありません。0あまラボへようこそこのブログでは自作ソフトの最新情報やtips、PC動画に関する話題を掲載していきます。各記事へは下にあるカテゴリからアクセスして下さい。