サウンドカードいじりの続き
前回のサウンドカードいじりの続きです。
結局のところ、前回の方法では解決しませんでした。
そもそも、音とびといっても他の方に起こっている問題と違うんじゃないかということで、状況の整理から。
・foobar2000やWinampなどで音楽を再生中に、同時起動しているゲームの効果音が鳴ると音飛びする
・音楽を再生している状態で、ゲーム以外での高負荷時には音とびしない
・kakaku.comのクチコミにあったような、NICが悪さしてるということでもなかった(症状変わらず)
1点目と2点目の違いは、音を鳴らそうとしてるかどうかの違いです。たぶん。
ミキシングの部分で何か悪さしてるんじゃないかと思い、そこから思い当たったのは、再生してる音楽(以下foobarと記載)と効果音のサンプリングレートの違いです(ちょっと飛躍してますが)。
foobar側は44.1kHzのmp3、ゲームの効果音は48kHzでした。サウンドカード側の出力設定はサンプリングレートを44.1kHz固定にして出力するようにしています(48kHzで出したくないから)。
もしかしたら、効果音を鳴らそうとするタイミングで44.1kHzへのリサンプリングが入り、それから出力しようとするので、一瞬出力が止まるのかなぁと。
(どこでリサンプリングが入ったりするのかもわかりませんが、チップじゃなくてOS側?)
試しに44.1kHzのソースと48kHzのソースを別々のプレーヤでかけてみて、音とびするかどうかやってみました。
■プレーヤ1での再生中に、プレーヤ2で再生開始
・プレーヤ1=44.1kHz、プレーヤ2=44.1kHz → 問題なし
・プレーヤ1=44.1kHz、プレーヤ2=48kHz → 再生開始時に音とび、その後問題なし
何度か試しましたが、どうやらこれのようです。
うちの環境では、「違うサンプリングレートのソースを鳴らそうとしたタイミングで音が飛ぶ」という結果。
ハードウェアミキサーが付いてないとはいえ、こういうのってどうにかできないもんなんだろうか……。
ゲームやってる最中に音とびさせたくないなら、サウンドカード出力を48kHz固定にして、foobar側でも48kHzリサンプリングを事前にやっておけば、効果音が鳴るタイミングでも音とびしなくなりました。
とはいえ、48kHzで使うなら別にLive!+kXドライバでもよかったくらいなんで、結局音とびを我慢して44.1kHz固定で使うことにしました。
一応解決というか、原因は分かったわけだけど……うーん。
環境は以前書いたように、ONKYOのSE-150PCI(Envy24HTチップ搭載)で、ドライバはVIAのドライバ5.20bです。DirectXは9.0c(August2007版)。
この環境で、DirectSound出力にしたプレーヤ2つを使って音楽を再生させた場合、ミキシングそしてリサンプリングはどこで行われるのか?
・DirectSoundでミキシング(orリサンプリング)
・Envy24HTのドライバでミキシング(orリサンプリング)
・Windowsのカーネルミキサーでミキシング(orリサンプリング)
・Envy24HTチップでミキシング(orリサンプリング)
こういう仕組みが解説されてるサイトってないかなー。
MMEとWDMの違いもいまいちよく理解できません。MMEがOS側でWDMがドライバ側?
結局のところ、前回の方法では解決しませんでした。
そもそも、音とびといっても他の方に起こっている問題と違うんじゃないかということで、状況の整理から。
・foobar2000やWinampなどで音楽を再生中に、同時起動しているゲームの効果音が鳴ると音飛びする
・音楽を再生している状態で、ゲーム以外での高負荷時には音とびしない
・kakaku.comのクチコミにあったような、NICが悪さしてるということでもなかった(症状変わらず)
1点目と2点目の違いは、音を鳴らそうとしてるかどうかの違いです。たぶん。
ミキシングの部分で何か悪さしてるんじゃないかと思い、そこから思い当たったのは、再生してる音楽(以下foobarと記載)と効果音のサンプリングレートの違いです(ちょっと飛躍してますが)。
foobar側は44.1kHzのmp3、ゲームの効果音は48kHzでした。サウンドカード側の出力設定はサンプリングレートを44.1kHz固定にして出力するようにしています(48kHzで出したくないから)。
もしかしたら、効果音を鳴らそうとするタイミングで44.1kHzへのリサンプリングが入り、それから出力しようとするので、一瞬出力が止まるのかなぁと。
(どこでリサンプリングが入ったりするのかもわかりませんが、チップじゃなくてOS側?)
試しに44.1kHzのソースと48kHzのソースを別々のプレーヤでかけてみて、音とびするかどうかやってみました。
■プレーヤ1での再生中に、プレーヤ2で再生開始
・プレーヤ1=44.1kHz、プレーヤ2=44.1kHz → 問題なし
・プレーヤ1=44.1kHz、プレーヤ2=48kHz → 再生開始時に音とび、その後問題なし
何度か試しましたが、どうやらこれのようです。
うちの環境では、「違うサンプリングレートのソースを鳴らそうとしたタイミングで音が飛ぶ」という結果。
ハードウェアミキサーが付いてないとはいえ、こういうのってどうにかできないもんなんだろうか……。
ゲームやってる最中に音とびさせたくないなら、サウンドカード出力を48kHz固定にして、foobar側でも48kHzリサンプリングを事前にやっておけば、効果音が鳴るタイミングでも音とびしなくなりました。
とはいえ、48kHzで使うなら別にLive!+kXドライバでもよかったくらいなんで、結局音とびを我慢して44.1kHz固定で使うことにしました。
一応解決というか、原因は分かったわけだけど……うーん。
環境は以前書いたように、ONKYOのSE-150PCI(Envy24HTチップ搭載)で、ドライバはVIAのドライバ5.20bです。DirectXは9.0c(August2007版)。
この環境で、DirectSound出力にしたプレーヤ2つを使って音楽を再生させた場合、ミキシングそしてリサンプリングはどこで行われるのか?
・DirectSoundでミキシング(orリサンプリング)
・Envy24HTのドライバでミキシング(orリサンプリング)
・Windowsのカーネルミキサーでミキシング(orリサンプリング)
・Envy24HTチップでミキシング(orリサンプリング)
こういう仕組みが解説されてるサイトってないかなー。
MMEとWDMの違いもいまいちよく理解できません。MMEがOS側でWDMがドライバ側?
サウンドカードの音とび対策をいろいろと
うちのサウンドカードはONKYOのSE-150PCI(Envy24HT)なんですが、こいつがドライバのせいなのかどうなのか、オンラインゲームをプレイしてるとよく音とびするんです。
主に負荷の高そうなときと、ちょうど効果音が鳴るタイミングで。
もう1枚のサウンドカード(SB Live!)では何の問題もなし。
ただ、こいつは出力48kHz縛りがあるので、できれば150PCIが使いたい。
Envy24で調べてみたら、同じように音とびしてる事例がちらほらと出てきますね。
とりあえず書かれてたPCI Latency Timerの調整をやってみました。
PCI Latency Timerの調整方法には
・BIOSで設定
・PCI Latency Toolで設定
があり、PCI Latency Toolを使ったほうがデバイス個別に設定ができるし、効果が大きかったとのことで、こちらを使用しました。
PCI Latency Toolの最新は3.1v2でしたが、最新版ではAGPグラフィックカードのLatencyを変更できないので、今回は3.0b3を使用。でもできるなら最新版を使ったほうがよさそうです。
設定方法は、
・リストから該当するものを選んで右クリック→メニュー「Change Setting(s)...」を選択
・Latencyを入力するダイアログが出るので、設定したい値を入力してOK(New Latency欄に、入力した値が表示される)
・適用するためにメニュー「Settings」→「Apply」を選択(Latency欄に変更値が反映される)
・最後に、メニュー「Settings」→「Save」を選択して保存しておく
次回起動時にも自動で設定を反映させたければ、メニュー「Settings」→「Apply on Startup」にチェックを入れておく。
やろうとしていることは、
・AGPカード(GeForce6800LE)のLatencyを下げる (248→128)
・サウンドカード(SE-150PCI)のLatencyを上げる (64→128)
うちの環境では、BIOS設定値の64が各デバイスに振られていて、AGPのGF6800LEだけ248に設定されていました。
このグラフィックカードのLatencyを下げてやることで占有時間を減らし、サウンドカードにも十分な処理時間をあててやることで音とびを解消できる(かもしれない)らしい?
サウンドカード自体のLatencyを上げてやることでも同じ効果が期待できるそうです。今回はSE-150PCI自体もLatencyを上げてみます。
適用すると↓のような感じ。

これでうまくいくかなーと思った矢先。
foobar2000とかで音楽再生したら、サウンドカード(Envy24なんたらかんたらのところ)だけ、Latencyが64に戻ってしまいます……。
※実際には「戻る」ではなく「64になる」だけど

何故かサウンドカードだけ書き換わります。
挙動からしてEnvy24のドライバが何かやってそうにも思えます。
BIOSで全デバイス128に設定しようが、再生すると64に書き換えられてしまうので。BIOS設定値に戻るならまだしも、64固定とかむちゃくちゃだ。
仕方ないので、Latencyはサウンドカードは64、AGPは128で使うことにして、別の設定をいじることに。
tuneappでプライオリティコントロールのところをいじります。
切り替え間隔:短い、フォアグラウンド優先:3倍となってましたが、フォアグラウンド優先の方を等倍に変更。

これで大分改善されたような気がしないでもない……けど気のせいかもしれない。しばらく様子見。
Envy24のドライバがもう少しマシになってくれればこんなことしなくてもいいのに。
EnMixCPL.iniのコメントが誤字だらけなのも何かの対策なのか、それとも素なのかわかんないし。これは別にどうでもいいことですね。
追記:
様子見たけどやっぱり飛ぶ。
裏でfoobar2000使ってBGM流しつつ、効果音がなるタイミングで飛ぶので、ミキシングが悪いのかなんなのか。
試しに効果音切ってみたら一切音とびしないし。むしろゲーム側が悪いのか?
6800LEのLatencyを64まで下げてサウンドカードと同じ値にしてみると飛びにくかった(ような気もする)ので、サウンドカードの値をいじれればよさそうなんだけど……うーん。
(6800LEを下げすぎると今度はゲームの描画がたまにひっかかるような感じになってたので、やりたくない)
あと試してないのはDirectSoundを無効にするのと、デバイス設定のとこのハードウェアアクセラレータなし。
どちらもどういう効果(または弊害)が出てくるのかよくわからんのでほったらかしです。
主に負荷の高そうなときと、ちょうど効果音が鳴るタイミングで。
もう1枚のサウンドカード(SB Live!)では何の問題もなし。
ただ、こいつは出力48kHz縛りがあるので、できれば150PCIが使いたい。
Envy24で調べてみたら、同じように音とびしてる事例がちらほらと出てきますね。
とりあえず書かれてたPCI Latency Timerの調整をやってみました。
PCI Latency Timerの調整方法には
・BIOSで設定
・PCI Latency Toolで設定
があり、PCI Latency Toolを使ったほうがデバイス個別に設定ができるし、効果が大きかったとのことで、こちらを使用しました。
PCI Latency Toolの最新は3.1v2でしたが、最新版ではAGPグラフィックカードのLatencyを変更できないので、今回は3.0b3を使用。でもできるなら最新版を使ったほうがよさそうです。
設定方法は、
・リストから該当するものを選んで右クリック→メニュー「Change Setting(s)...」を選択
・Latencyを入力するダイアログが出るので、設定したい値を入力してOK(New Latency欄に、入力した値が表示される)
・適用するためにメニュー「Settings」→「Apply」を選択(Latency欄に変更値が反映される)
・最後に、メニュー「Settings」→「Save」を選択して保存しておく
次回起動時にも自動で設定を反映させたければ、メニュー「Settings」→「Apply on Startup」にチェックを入れておく。
やろうとしていることは、
・AGPカード(GeForce6800LE)のLatencyを下げる (248→128)
・サウンドカード(SE-150PCI)のLatencyを上げる (64→128)
うちの環境では、BIOS設定値の64が各デバイスに振られていて、AGPのGF6800LEだけ248に設定されていました。
このグラフィックカードのLatencyを下げてやることで占有時間を減らし、サウンドカードにも十分な処理時間をあててやることで音とびを解消できる(かもしれない)らしい?
サウンドカード自体のLatencyを上げてやることでも同じ効果が期待できるそうです。今回はSE-150PCI自体もLatencyを上げてみます。
適用すると↓のような感じ。

これでうまくいくかなーと思った矢先。
foobar2000とかで音楽再生したら、サウンドカード(Envy24なんたらかんたらのところ)だけ、Latencyが64に戻ってしまいます……。
※実際には「戻る」ではなく「64になる」だけど

何故かサウンドカードだけ書き換わります。
挙動からしてEnvy24のドライバが何かやってそうにも思えます。
BIOSで全デバイス128に設定しようが、再生すると64に書き換えられてしまうので。BIOS設定値に戻るならまだしも、64固定とかむちゃくちゃだ。
仕方ないので、Latencyはサウンドカードは64、AGPは128で使うことにして、別の設定をいじることに。
tuneappでプライオリティコントロールのところをいじります。
切り替え間隔:短い、フォアグラウンド優先:3倍となってましたが、フォアグラウンド優先の方を等倍に変更。

これで大分改善されたような気がしないでもない……けど気のせいかもしれない。しばらく様子見。
Envy24のドライバがもう少しマシになってくれればこんなことしなくてもいいのに。
EnMixCPL.iniのコメントが誤字だらけなのも何かの対策なのか、それとも素なのかわかんないし。これは別にどうでもいいことですね。
追記:
様子見たけどやっぱり飛ぶ。
裏でfoobar2000使ってBGM流しつつ、効果音がなるタイミングで飛ぶので、ミキシングが悪いのかなんなのか。
試しに効果音切ってみたら一切音とびしないし。むしろゲーム側が悪いのか?
6800LEのLatencyを64まで下げてサウンドカードと同じ値にしてみると飛びにくかった(ような気もする)ので、サウンドカードの値をいじれればよさそうなんだけど……うーん。
(6800LEを下げすぎると今度はゲームの描画がたまにひっかかるような感じになってたので、やりたくない)
あと試してないのはDirectSoundを無効にするのと、デバイス設定のとこのハードウェアアクセラレータなし。
どちらもどういう効果(または弊害)が出てくるのかよくわからんのでほったらかしです。
Dynabook SS3410へのWindows2000クリーンインストール
更新久しぶりだ(;´Д`)といっても特に内容がありません。
CDブートに対応してないうちのノートPC。
以前にチャレンジしたときはDOSでCDROMドライブ認識するようにドライバとってきたりconfig.sys書いてみたりと、とってもまどろっこしいことをして失敗。それからほっぽりだしてたわけですが、最近またチャレンジ。
構成は、
・Dynabook SS3410/1A8
・IODATA CDP-AX24TP
今回は普通に、
・別のPCでW2Kセットアップ起動ディスクを作成(フロッピー3〜4枚)
・フロッピーからW2Kセットアップ起動
・セットアップ途中の3rdParty製ドライバ追加でCDROMドライブのドライバ追加
(ドライバはIOのサポートページからサポートソフトをDownload)
・インストール開始
という手順で。
結果、何も問題なくセットアップ完了。
え……今までの苦労は……?みたいな。余計なこと考えずに、最初から最短コース辿っとけということですね⊂⌒~⊃。Д。)⊃
CDブートに対応してないうちのノートPC。
以前にチャレンジしたときはDOSでCDROMドライブ認識するようにドライバとってきたりconfig.sys書いてみたりと、とってもまどろっこしいことをして失敗。それからほっぽりだしてたわけですが、最近またチャレンジ。
構成は、
・Dynabook SS3410/1A8
・IODATA CDP-AX24TP
今回は普通に、
・別のPCでW2Kセットアップ起動ディスクを作成(フロッピー3〜4枚)
・フロッピーからW2Kセットアップ起動
・セットアップ途中の3rdParty製ドライバ追加でCDROMドライブのドライバ追加
(ドライバはIOのサポートページからサポートソフトをDownload)
・インストール開始
という手順で。
結果、何も問題なくセットアップ完了。
え……今までの苦労は……?みたいな。余計なこと考えずに、最初から最短コース辿っとけということですね⊂⌒~⊃。Д。)⊃
ForceWareの自分用設定
90台や160台では効かない?らしいけど80台ドライバの調整用に。
あと自分の家での調整用なので万人向けではありません。videoborderくらい?
以下、FW84.43で動作確認。
■テレビ出力のサイズ調整(デバイス調整を保存されるようにする)
デバイス調整にてサイズ調整をしてもすぐ戻ってしまう場合、以下のエントリをいじることで保存される。
○該当キー
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{XXXX}\0000
※キーの位置はOSによって若干違うらしい?
※XXXXはGUID。
{XXXX}\Video にある「Service」エントリの値が「nv」のものが該当。
※HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO\Device\Video0
にGUIDが記載されているらしい?
○調整するエントリ
NV36ZORAN.525@60Hz.videoborder (エントリがなければ REG_BINARY で作成)
→ 「00 00 00 00」から「01 00 00 00」へ変更。
○ついでに他のエントリも
"NV36ZORAN.525@60Hz.videoborder"=hex:01,00,00,00
"NV36ZORAN.525@60Hz.hue"=hex:00,00,00,00
"NV36ZORAN.525@60Hz.contrast"=hex:00,00,00,00
"NV36ZORAN.525@60Hz.brightness"=hex:00,00,00,00
"NV36ZORAN.525@60Hz.saturation"=hex:a6,00,00,00
"NV36ZORAN.525@60Hz.overscan"=hex:0b,00,00,00
"NV36ZORAN.525@60Hz.0800x0600.flickerfilter"=hex:2b,00,00,00
"NV36ZORAN.525@60Hz.0800x0600.xoffset"=hex:01,00,00,00
"NV36ZORAN.525@60Hz.0800x0600.yoffset"=hex:02,00,00,00
"NV36ZORAN.525@60Hz.0720x0480.flickerfilter"=hex:2b,00,00,00
"NV36ZORAN.525@60Hz.0720x0480.xoffset"=hex:00,00,00,00
"NV36ZORAN.525@60Hz.0720x0480.yoffset"=hex:01,00,00,00
○YC伸張
"VMRCCCSStatus"=dword:00000003
1 = standard:YUV 0-255
3 = extended:YUV 16-235
---------------------------------------------------------------------
■自分用プライマリディスプレイ側(デスクトップ)設定
ビデオオーバーレイ設定:
・色相 0%
・彩度 100%
カラー補正(オーバーレイ/VMR):
・明るさ 120%
・コントラスト 100%
---------------------------------------------------------------------
■自分用セカンダリディスプレイ側(テレビ/S端子出力)設定
解像度の変更:
・物理モードのパン解像度のみを表示する にチェック
・画面解像度 800 x 600
画面調整(デバイスの調整/TV出力)
・フィルタのフリッカ ゲージ左から1/4程度
・画面の位置調整 画面がはみ出さないように拡大(or縮小)
あと自分の家での調整用なので万人向けではありません。videoborderくらい?
以下、FW84.43で動作確認。
■テレビ出力のサイズ調整(デバイス調整を保存されるようにする)
デバイス調整にてサイズ調整をしてもすぐ戻ってしまう場合、以下のエントリをいじることで保存される。
○該当キー
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{XXXX}\0000
※キーの位置はOSによって若干違うらしい?
※XXXXはGUID。
{XXXX}\Video にある「Service」エントリの値が「nv」のものが該当。
※HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO\Device\Video0
にGUIDが記載されているらしい?
○調整するエントリ
NV36ZORAN.525@60Hz.videoborder (エントリがなければ REG_BINARY で作成)
→ 「00 00 00 00」から「01 00 00 00」へ変更。
○ついでに他のエントリも
"NV36ZORAN.525@60Hz.videoborder"=hex:01,00,00,00
"NV36ZORAN.525@60Hz.hue"=hex:00,00,00,00
"NV36ZORAN.525@60Hz.contrast"=hex:00,00,00,00
"NV36ZORAN.525@60Hz.brightness"=hex:00,00,00,00
"NV36ZORAN.525@60Hz.saturation"=hex:a6,00,00,00
"NV36ZORAN.525@60Hz.overscan"=hex:0b,00,00,00
"NV36ZORAN.525@60Hz.0800x0600.flickerfilter"=hex:2b,00,00,00
"NV36ZORAN.525@60Hz.0800x0600.xoffset"=hex:01,00,00,00
"NV36ZORAN.525@60Hz.0800x0600.yoffset"=hex:02,00,00,00
"NV36ZORAN.525@60Hz.0720x0480.flickerfilter"=hex:2b,00,00,00
"NV36ZORAN.525@60Hz.0720x0480.xoffset"=hex:00,00,00,00
"NV36ZORAN.525@60Hz.0720x0480.yoffset"=hex:01,00,00,00
○YC伸張
"VMRCCCSStatus"=dword:00000003
1 = standard:YUV 0-255
3 = extended:YUV 16-235
---------------------------------------------------------------------
■自分用プライマリディスプレイ側(デスクトップ)設定
ビデオオーバーレイ設定:
・色相 0%
・彩度 100%
カラー補正(オーバーレイ/VMR):
・明るさ 120%
・コントラスト 100%
---------------------------------------------------------------------
■自分用セカンダリディスプレイ側(テレビ/S端子出力)設定
解像度の変更:
・物理モードのパン解像度のみを表示する にチェック
・画面解像度 800 x 600
画面調整(デバイスの調整/TV出力)
・フィルタのフリッカ ゲージ左から1/4程度
・画面の位置調整 画面がはみ出さないように拡大(or縮小)
ポートの予約
下の記事のタイトルだと機械直訳でさっぱりよくわかりませんが、ようは一時Portとして使わせたくないPortの予約方法です。
■ポートの予約
参考:登録済みポートを一時ポートとして使用させない方法
Windows TCP/IP の短命で、予約され、ブロックされたポートの動作
■ポートの予約
ポートの予約により、アプリケーションはワイルドカード バインド中にポートの範囲が割り当てられることを防ぐことができます。しかし、ポートの範囲を予約しても、アプリケーションが予約された範囲内で特定のバインド (特定のポートの使用についてのリクエスト) を実行することを防ぎません。ポートの範囲を予約する時、1025 から MaxUserPort 設定の値 (既定で 5000) または 49152 から 65535 までの連続的な範囲のポート番号を選択する必要があります。
1. [スタート] をクリックし、[ファイル名を指定して実行] をクリックし、regedit.exeと入力し、次に [OK] をクリックします。
2. 次のレジストリ サブキーを見つけ、クリックします。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
3. [編集] メニューで、[New] をポイントし、次に [複数行文字列値] をクリックします。
4. ReservedPorts と入力し、次に ENTER を押します。
5. ReservedPorts 値をダブルクリックし、構文: x-y を使用してポートの範囲を入力します。
単一のポートを指定するためには、x および y について同じ値を使用します。たとえば、ポート 4000 を指定するためには、4000-4000 と入力します。
6. [OK] をクリックします。
7. レジストリ エディタを終了します。
参考:登録済みポートを一時ポートとして使用させない方法



