Windows Vistaを極限まで高速化するスレ 第壱号機
音飛びの第3の解決方法が見えた
まだ実験段階なので、テストしたい人は自己責任でよろしく
既知の対策その1
以下のレジストリを変更する
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile]
"SystemResponsiveness"=dword:0000000a
"NetworkThrottlingIndex"=dword:fffffffe
"SystemResponsiveness"はマルチメディア系の処理中に、どれだけ低優先度の処理を融通するか、と言う項目
当然あまり融通しないほうがマルチメディア系の処理に有利となる
最低10%であり、それ以下には設定できない
"NetworkThrottlingIndex"=は同上の処理中のネットワーク処理の融通度で、この%を下げると通信速度が低下する
可能な限り処理を割く事によって通信速度が低下し辛くなるが、CPUのパワー次第では割合を下げる必要がある
>>295 まぁプライオリティ上げてもUSB音源は全滅ですけどね
VistaではUSB音源は事実上使えません
既知の対策その2
以下のレジストリを変更する
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile\Tasks\Audio]
"Scheduling Category"="High"
"SFIO Priority"="High"
"Background Only"="False"
"Priority"=dword:00000001
"Clock Rate"=dword:00002710
"GPU Priority"=dword:00000001
"Affinity"=dword:00000000
"BackgroundPriority"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile\Tasks\Pro Audio]
"Scheduling Category"="High"
"SFIO Priority"="High"
"Background Only"="False"
"Priority"=dword:00000001
"Clock Rate"=dword:00002710
"GPU Priority"=dword:00000001
"Affinity"=dword:00000000
"BackgroundPriority"=dword:00000001
一部未対応の項目もあるが、優先度を最高に設定する
音関係の処理を最高優先度とし、第1の設定で最高優先度の処理を最大に保つ事で音飛びを減少させる
逆にこの設定で優先度を下げる場合、既知の対策その1の低優先度の処理への配分を増加させる事で音飛びが改善する
音系統の各種フィルター処理はこの設定に関わらず高優先度とはならないため、フィルター処理の遅延がある場合は後者が有利となる場合が多い
音に関する処理を高優先度として高優先度優遇処理にするか、低優先度として低優先度優遇処理とするかの差だが
前者は音関係以外の処理も高速になるがフィルターや音飛びへの影響が大きく、後者は他の処理もやや低速になるがフィルターや音飛びへの影響は小さい
CPU能力が高ければ前者、低ければ後者が有利だと思われる
未知の対策その3
以下のレジストリを変更し、該当サービスを再起動する
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Audiosrv\Parameters]
"ServiceDllUnloadOnStop"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AudioEndpointBuilder\Parameters]
"ServiceDllUnloadOnStop"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MMCSS\Parameters]
"ServiceDllUnloadOnStop"=dword:00000000
表記した順番で影響力が高い
通常は一番上だけを変更すれば音飛びは無くなると思われる
この設定により、ペンティアムIIIでもCPUのリソース消費と引き換えに音飛びが皆無となる
※100%に張り付くまでは音飛びが発生しない
また、画面の再描画、HDDへのアクセス、ネットワーク使用率に関わらず音飛びはしなくなるが、それらの処理は重くなる
ただしCPU性能が高い場合はそれらへの影響は体感できない
注意点として、フィルター系の処理は向上しないため、重いフィルターを使用している場合は悪影響もある
特に処理能力の低いCPUを使用している場合、映像と音声がずれる事が多い
これは他のサービスのトラブルシューティングに登場する"ServiceDllUnloadOnStop"の数値を変更するテクニックの応用であり、サービスの処理方法を変更する設定である
3や2や1に比べて0の効率が最も高く、他を無視してでも安定性を保とうとする処理に移行する(意訳)
ただし、未だ不明な点は多い
未知の対策その3は、言わば「一点豪華主義」的な対策であり、バランスと言う観念からはかなり離れている
P3では音飛びが無くなる事と引き換えにすべての処理が非常に重くなり、音が鳴ってる間は作業効率は低下してしまう
ただし、ブラウザを50個、オフィス関連全て、その他アプリを大量に起動しても音飛びはしない
常に一定量の処理能力を割かれると言う感じなので、処理能力の総量の大きい最近のCPUでは無視できるほどの処理能力しか奪われない
処理内容の意訳
通常は他のスレッドやタスクの切替時に一部アンロードされるサービス関連のDLLを全くアンロードさせないようにする
他の処理中も常にDLLへのアクセスを優先的に保つ事で、細かな切り替えタイミングを無視し、結果的にサービスの処理が遅延しない
言わば、通常発生するはずの割り込みを事実上無視または大幅に軽減する事により、見掛け上の処理時間を最大に保つ
重い処理中にも効果が高い反面、その他の処理から均等に処理時間を奪うため、実行されているタスクやスレッドの数次第では他の処理をかなり圧迫する
追記
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Executive]
"AdditionalCriticalWorkerThreads"=dword:00000016
"AdditionalDelayedWorkerThreads"=dword:00000016
※上記は推奨設定ではなく参考
VISTAの最大設定値は16(10進数で22)である
前述の高優先度優遇処理の場合は"AdditionalDelayedWorkerThreads"の数値を増やすと悪影響が発生しやすい
これは、低優先度処理割合(10%)に詰め込まれる低優先スレッドが多くなると、全体の処理時間を圧迫し始めるからである
その為、高優先度優遇処理の際は"AdditionalDelayedWorkerThreads"の数値は低い事が望ましい
逆に低優先度優遇処理の場合は"AdditionalCriticalWorkerThreads"の数値を低く設定する事が望ましい
高優先度のスレッド処理数は自動的に増減されるため、低く設定したとしても必ずしも少なくはならないが、低〜中負荷時の音飛びへの影響が緩和できる
また"AdditionalDelayedWorkerThreads"の数値を増やし、低優先度のスレッドが処理落ちしないようにする必要がある