Win7(x64)での発音遅延が激しい
Windows7 での DirectSound はすべてソフトウェアで処理されるように変更されたため、たとえ非常に高速で高価な石を積んでいるボードであっても、ハードウェアアクセラレータは全く使用されません。
基本的に、その遅延は <0.1s だと言われています。
この遅延時間は、CPU の処理速度などには関係なく、内部で確保しているバッファの容量(調整不可)に依存します。
また、もっとも高速なカーネルストリーム転送もソフトウェア処理になってしまいましたので、たくさんの音が同時に鳴ると、必然的に遅延が発声します。
ハードウェアが行っていた周波数変換やビット変換もCPUで行うようになったため、周波数やビット数の異なるサウンドがたくさん鳴った場合に、とくに遅延が顕著になります。
あと、SoundBlaster 系であれば、初期状態でいくつかのエフェクト(音声加工機能)が ON になっている可能性があります。
これらはどれ1つとっても致命的な遅延を生み出しますので、必ずすべてを OFF にして下さい。
さらに、VSyncWait が ON になっている場合、0.016s 程度の発声遅延が生じます(判定にはこの遅延は生じません)。
気になる場合は、これも OFF にしてみて下さい。
……今のところ思いつくのは、このくらいかなぁ。
yyagiさんに誘導されて来ましたnyaです、fromさんお久しぶりです. ご返答ありがとうございます、更に返答が遅れまして申し訳ありません. 会社で40時間程缶詰になっていたモノで(涙)他の会社の方と合同で、こっそりネットできませんでした(笑)
遅延の件ですが、Vista以降完全ソフトウェア化されてしまったんですね、残念です. グラフィックは動画のエンコードやデコードができるまで進化したのに、サウンドは退化だなんてあんまりです. もともとゲームの為に開発されたDirectXで0.1秒の判定しかできないなんて、需要がなかったんでしょうか? せめて、バッファのサイズぐらい自分で調整できればよかったですよね.
演奏前に、チップ音を最低限聴ける音質まで下げてサイズを小さく変換し、転送の負荷を軽減するモードを付けるとか… あ、これはデータの方をいじれば自前でデキますよね.
前回の書き込みの後も色々試してみましたが、SoundBlasterAudgy(SBA)はダメだと再認識する結果に(涙) 3Dなんちゃらサウンドとかエフェクトは、あらかじめ切ってテストしたのですが、 SBA内臓のMIDIを使っても遅延時間は変わりませんでした…PCIの方がUSBより反応は良さそうなんですけどね. PCI-Eの製品なら違う(内臓音源ぐらいにはなる)のかしら…処理が遅いのであれば後の利点は音質ですが、 ノイズ問題ならUSB音源に軍配があがりますよね.
後一応、Aeroをオフにしたり、3Dグラフィックドライバーのフレーム遅延問題の解決方法も、 試してみましたが、MIDI-INのスピードアップには全然つながりませんでした.
>さらに、VSyncWait が ON になっている場合、0.016s 程度の発声遅延が生じます(判定にはこの遅延は生じません)。 >気になる場合は、これも OFF にしてみて下さい。
有益な情報ありがとうございます.0.016sは結構なアドバンテージになりますね. 今ある環境で遅延問題を追求するのであれば、最近実装して頂いたアジャスト機能で判定を遅らせて、 ドラム音はDTXからの生音でプレイする…ですかね? 自分は0.036sまでの遅延であれば、ストレス無くプレイできます.
PS.チケット発行してもらえばよかったんですね(涙)
あ、勘違いしていましたが、遅延と言うのは…
①ドラム(DTX)をヒットしてからDTXManiaが判定するまでに発生: ②DTXManiaにDTXのヒット情報が到達してから音が鳴るまでに発生:
②の事をさしていた訳ですね.自分てっきり①の状態だとばかり思っていたので. ならDTXの生音そのままでゲームをすれば、遅延は少ない訳ですね…それでも 曲毎にかわるドラムの音色も捨てきれませんね
ちょっと時間ができましたので、SBAをPCから抜き取り、VSyncWaitオフを試してみました.その前に、Windows7(64bit 1920x1080)でコンフィグメニューからVSyncWaitの設定を変更すると、DTXManiaがおちてしまいました…一応報告までに(再現性有り).INIファイルを手動で変更して、いつものように計測してみた所、0.047~0.052sとバラつきがあり、数値的にもあまり変化は見られませんでした.XPの方も計測しましたが、こちらはVSyncWaitオフにすると0.036~0.040になり、若干ですが、パフォーマンスが落ちた感じになりました.計測方法ですが、スネア、ハイタム、ロータムだけの短いデータを作成し、リザルト画面で計測しました(いつもこの方法で計測しています)本当は、7の端末にXPをインストールして計測できれば、サウンド機能の差なのか、OSの差なのかが判別できるんですけどね;
すみません。GT5が無事発売されたので、DTXManiaは放置で、
しばらくそっちにかかり切りになります(笑)
やってる人には分かる私の現状: TopGearのエリーゼがシルバー止まり、くそっ。
VSyncWait変更で落ちる件、DTXManiaLog.txtには何か記録が残っていませんか? 残っていたらコピペいただけますでしょうか。
あと、リザルト画面で計測されているそうですが、一度演奏中の画面で ヒットと同時にレーンが光るところがどれくらいずれているかを感覚的に ご確認いただけないでしょうか。それで入力遅延が感覚的に分かります。 キーボードで演奏を試して、レーンは直ちに光るけれども音は遅れて出てくる、 というようでしたら間違いなく再生の遅延ですけれども、レーンが光るのが遅れるのでしたら 入力の遅延と言うことになりますので。
・・・さて、ここまで書いていて思ったのですが、一度入力・出力の遅延を測定する汎用的なユーティリティを作った方がいいかもですね。
こんにちは、フェイストラッキングするのに30分ぐらい悩んだnyaです(笑)VSyncでこける件に関しては、ログは出てないようです(再現できるので、新たにLOGを吐き出して見ました)
2010/11/30 23:48:53.395 INFO 起動所要時間: 00:00:01.1950684 2010/11/30 23:48:53.412 INFO 起動ステージを非活性化します。 2010/11/30 23:48:53.415 INFO 起動ステージの非活性化を完了しました。 2010/11/30 23:48:53.415 INFO ---------------------- 2010/11/30 23:48:53.415 INFO ■ タイトル 2010/11/30 23:48:53.416 INFO タイトルステージを活性化します。 2010/11/30 23:48:53.446 INFO タイトルステージの活性化を完了しました。 2010/11/30 23:48:58.609 INFO タイトルステージを非活性化します。 2010/11/30 23:48:58.609 INFO タイトルステージの非活性化を完了しました。 2010/11/30 23:48:58.626 INFO ---------------------- 2010/11/30 23:48:58.626 INFO ■ コンフィグ 2010/11/30 23:48:58.626 INFO コンフィグステージを活性化します。 2010/11/30 23:48:58.791 INFO コンフィグステージの活性化を完了しました。 2010/11/30 23:49:14.509 INFO ---------------------- 2010/11/30 23:49:14.509 INFO ■ アプリケーションの終了 2010/11/30 23:49:14.509 INFO 現在のステージを終了します。
一度演奏中の画面でヒットと同時にレーンが光るところがどれくらいずれているかを感覚的にご確認いただけないでしょうか
こちらに関しては0.1sぐらいであれば感覚で分かるのですが、0.01sともなると見切る自信がちょっとないです.叩いていたときに感じたのも、ハイハットを連打していたときに違和感を感じたぐらいだったので… 多分、単発で判断するのは(私には)難しいと思います;;それを踏まえた上で、キーボードでバスとスネアだけでプレーした感じは、光も音も、そんなに遅れた感じは、しませんでした.強いて言えば、音が若干遅れてるような…
P.S.CR-Zがカッコイイです
ログ、出てないですね・・・。086で出るようになったはずなのですが・・・。
お使いのDTXManiaのバージョンを教えていただけますか。もし086でしたら、084も試していただけないでしょうか。
(ウインドウのリサイズ対応の関係で、086にてVSyncWait変更時の処理を若干変更しているのです)
# 以上、最小限の連絡ですみません。
風邪を引いてしまいました(涙)インフルエンザではないのですが、なかなか治らないです. DTXManiaのバージョンですが、085でしたので、最新版を落としてLOGとって来ました
SlimDX.Direct3D9.Direct3D9Exception: D3DERR_INVALIDCALL: Invalid call (-2005530516)
こんな感じでした
ログありがとうございました。どうぞお体をお大事に。
発音遅延の話から随分離れてしまいましたので、 新たに #23842 (VSyncWaitを変更するとアプリケーションエラー) というチケットを起こしました。 VSyncWaitの話はそちらで行うこととさせてください。
で、こちらは元の発音遅延の話に戻します。(といっても直近でのネタがないですけれど・・・)
お久しぶりです、実は年明けにPCの中身を一新しまして ネタ的に、再度同じ計測方法で実験してみました
Windows7(64bit) CPU:Intel I7-2600@3.4GHz M/B:MSI P67A-GD55 RAM:DDR3 4Gx2 GRP:GF460-1G MIDI-IF:YAMAHA UX-16(Driver:um3042x64)
音源はマザーボード内蔵の音源です
処理速度は上がっていると思うのですが 0.100~0.110sぐらいと、遅延が酷くなってしまいました 若干遅延が減少するんじゃないかって期待していたんですけどね… スレッドが増えると遅くなったりして(笑)
取り合えず、DTXManiaはXPの端末を残して、 そちらで遊んでおります.
年末の大掃除で、バスドラをしまっていたダンボールが、 汚くなっていたので、久しぶりに出して設置してみました. 8年振りぐらいに、バスドラとハットのペダルがそろいました. 昔はウマく踏めなかったバスのペダルが、 しっかりと踏み込めるようになっていてビックリです(笑)
あらら、かえって遅延が大きくなってしまいましたか。0.1秒はでかすぎですね・・・。
改善方法を見つけてくださることを期待しております :-)
WASAPI/ASIO対応で本件解決できていると思われますので、本チケットはクローズさせていただきます。
問題があれば、再オープン下さいませ。
以下、某所でnyaさんから2010.11.19にいただいたコメントの転載です。遅延を小さくする方法についてみなさんにご提案いただけると幸いです。
最近久しぶりにDTXを出しまして、DTXManiaを遊ばさせて頂いております. Windows7(64bit)に昔のデータを移して遊んでいたら、何やら違和感を感じたので色々試してみました.DTXの生音をLチャンネル、PCを通して鳴るドラム音をRチャンネルにして、XPの端末で録音してみたのです. それをSoundEngineと言うソフトでRLのアタックの時間差を見た所、0.088sも開きがありました(勿論生音が先に鳴ります)
7の端末にはSoundBlasterAudgyが入っており、DTXに繋いだMIDIポートは3番目になっていましたので、コンフィグでM2を指定して鳴らしていました(SoundBlasterAudgyにはMIDIポートが2セットあるんです(涙)) で、このSBAをデバイスマネージャで無効化し、内蔵音源をBIOSでオンにしてそちらで時間差を計測した所、0.050sまで縮まりました.このときはMIDIポートは1番目になるので、DTXManiaの設定はデフォルトで動作しました.
これでも前より若干遅延を感じたので、XPで試し、7で録音した所0.036sでした.取り合えず、SBAはアウトだと言う事が分かりました(涙) 7用ドライバーのせいかも知れませんが…XPで遅延が少なくなるのはOSのせいなのか、マザーボードの音源のせいなのかは不明ですが、面白い結果だったので報告までに.
簡単なスペックです
Windows7(64bit)端末
CPU:Intel Q6600
M/B:GIGABYTE P35-DS3R
RAM:6G
GRP:GF460-1G
MIDI-IF:YAMAHA UX-16(Driver:um3042x64)
WindowsXP(32bit)端末
CPU:Intel E2160
M/B:MSI 945GCM5-F V2
RAM:2G
GRP:チップセット内蔵
MIDI-IF:YAMAHA UX-16
7 SBA:0.088s
7 :0.050s
XP :0.036s
Windows7は割り込みにHPET64を使用しています…関係ありますかね? 時間で見ると、たかだか10/100秒なのですが、耳で聞くとドドッって感じで結構わかります.自分の感覚では、0.036sなら結構快適にプレーできました.