Re: ゲームパッドの振動の強さが変わる ( No.1 ) |
- 名前:管理人 日時:2019/04/14 23:51
ご報告ありがとうございます
すみません、手元にある Xbox360, XboxOne コントローラ以外の振動機能付きコントローラが
悉く Windows7 くらいまでしか対応していない製品だったため確認できませんでした
Windows10 に対応しているゲームパッドを私も購入して確認してみますので、数日程お待ちください m(_ _;m
|
Re: ゲームパッドの振動の強さが変わる ( No.2 ) |
- 名前:sereparu(解決) 日時:2019/04/15 22:09
管理人さん
迅速なご回答、誠にありがとうございます。
こちらでも DirectInput 形式で振動機能があるゲームパッドを
もう一つ購入して確認したところ、今度は上記の現象が発生しませんでした。
なので、やっぱり製品側の不具合の可能性が高いです。
今回の確認で使用した製品は「iBUFFALO BSGP1601BK」という
DirectInput のみ対応の有線のゲームパッドです。
先述の現象が発生したゲームパッド「ELECOM JC-U4113SWH」は
XInput、DirectInput の切替ができる無線のゲームパッドでした。
なので、現象が発生する可能性としては
・XInput、DirectInput の切替ができるゲームパッドで発生する?
・無線のゲームパッドで発生する?
・特定のメーカーの製品で発生する?
というような可能性が残っていますが
これらのことを管理人さんにご確認いただくとなると
大変なご負担をお掛けすることになってしまうので
今回の件は一旦解決とさせてください。
こちらの確認不足で、早まった報告をしてしまい申し訳ありません。
また何か気付いた点があった場合は、改めて報告いたします。
以上です。ありがとうございました。
|
Re: ゲームパッドの振動の強さが変わる ( No.3 ) |
- 名前:管理人(解決) 日時:2019/04/16 00:46
なるほど、単純な現象ではないかもしれないのですね…
ご確認ありがとうございます
何かありましたらご連絡ください m(_ _)m
|
Re: ゲームパッドの振動の強さが変わる ( No.4 ) |
- 名前:通貨 日時:2019/04/16 20:30
dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4511&p=1
のスレッドで使用したゲームパッドが似たようなものなので試してみました。
エレコム 有線 JC-U4013S DInputとXInputが手動で切り替えられる
⇒このパッドはOS標準ドライバでも動きますが、メーカーのドライバを入れないと
DInputでは振動しませんんのでご注意ください。また、時々ドライバを入れ直さないと振動しないことがあります。
XInputですが、sereparuさんが書かれているように変化(問題)はありませんでした。
DInputはやはり変化があります。ただ、振幅が弱くなるというより、振動の周期が長くなるので
そう感じる、といったところでしょうか?
ぶぶぶぶぶぶぶ… という連続振動から、おぎゃーおぎゃー…という感じ(伝わりますでしょうか? 汗)
DxLibのソースで
NS_StartJoypadVibration( InputType, SetPower, Time, DINPUTPAD_MOTOR_LEFT ) ;
NS_StartJoypadVibration( InputType, SetPower, Time, DINPUTPAD_MOTOR_RIGHT ) ;
の片方ずつをコメントアウトしてやってみましたがLもRも変化しているようです。(どっちかだけおかしい、ではない)
WinMain側で
StartJoypadVibration(DX_INPUT_PAD1, 1000, -1);
WaitTimer(5000);
ReSetupJoypad();
StartJoypadVibration(DX_INPUT_PAD1, 1000, -1);
WaitTimer(5000);
ReSetupJoypad();
StartJoypadVibration(DX_INPUT_PAD1, 1000, -1);
とか
ChangeWindowMode(TRUE);
DxLib_Init();
StartJoypadVibration(DX_INPUT_PAD1, 1000, -1);
WaitTimer(5000);
DxLib_End();
ChangeWindowMode(TRUE);
DxLib_Init();
StartJoypadVibration(DX_INPUT_PAD1, 1000, -1);
でも同じでした。後者は完全リセットを期待したのですが、やはり変化がありました。
※前者とは周期は違うようですが、よくわかりません。
 |
Re: ゲームパッドの振動の強さが変わる ( No.5 ) |
- 名前:管理人 日時:2019/04/17 23:01
> 通貨さん
ご情報ありがとうございます
Windows10でも DirectInput の振動機能が使えるゲームパッドを一つは
無いとまずいと思い JC-U4013 を私も購入して確認してみましたところ、
通貨さんの遭遇された現象と同じ現象が発生しました
少し調べてみた結果ですが… Sereparuさんが疑われているように
製品側の不具合、恐らく ELECOM の製品のドライバの不具合だと思います
というのも、DirectInput の最低限の初期化・終了処理を繰り返すだけでも
現象が発生してしまい、5回目の初期化以降は一切振動しなくなってしまうからです
DirectInputDevice 取得
振動処理初期化
振動処理後始末
DirectInputDevice 削除
DirectInputDevice 取得
振動処理初期化
振動処理後始末
DirectInputDevice 削除
DirectInputDevice 取得
振動処理初期化
振動処理後始末
DirectInputDevice 削除
DirectInputDevice 取得
振動処理初期化
振動処理後始末
DirectInputDevice 削除
DirectInputDevice 取得
振動処理初期化
↓
振動しなくなる
そして、『振動処理初期化』『振動処理後始末』の部分を最後の回まで行わない
以下の処理の場合は5回目の初期化でも正常に振動します
DirectInputDevice 取得
DirectInputDevice 削除
DirectInputDevice 取得
DirectInputDevice 削除
DirectInputDevice 取得
DirectInputDevice 削除
DirectInputDevice 取得
DirectInputDevice 削除
DirectInputDevice 取得
振動処理初期化
↓
正常に振動する
なので、振動処理の初期化・後始末を行った上での DirectInputDevice の削除処理に
ついてドライバになんらかのバグがあるのだと思います
・ELECOM のゲームパッドでは無線でも有線でも発生する
・BUFFALO のゲームパッドでは発生しない
と、情報が二つになったので、これで更に他のメーカー製のゲームパッドでも
正常に動作した場合はほぼ『ELECOM のゲームパッドのドライバにバグがある』という
結論で良いような気がします
 |
Re: ゲームパッドの振動の強さが変わる ( No.6 ) |
- 名前:通貨 日時:2019/04/17 23:28
このゲームパッドはコメント4に書いたスレッドの時に買ったものですが、それ以降使っていませんでした。
で、今回の検証で使おうとしたら、最初まず振動しなくて焦りました。(CreateEffectsで未実装?か
なんかが返ってきて失敗している)
コンパネで振動テストをすると普通に振動するのですが、アプリだと振動しない。
仕方ないのでもう一度インストールすると、アプリでも振動するようになりました。
それで、ようやくコメント4のテストを実施した、という経緯です。
このように、インストール後もイマイチ挙動が怪しい気がしますが、
1つ気になるのは「アプリを起動し直すと普通に振動するようになる」点くらいでしょうか。
ともあれ、DInput/XInput両対応なので、「両対応の場合、XInputを使ってください」とアプリ側で
明示した方がいいかもしれませんね。
|
Re: ゲームパッドの振動の強さが変わる ( No.7 ) |
- 名前:sereparu 日時:2019/04/18 00:10
> 管理人さん、通貨さん
色々とご確認いただき、誠にありがとうございます。
通貨さんのおっしゃる通り、言われてみれば振動の強さというよりは
振動の周期が長くなったようにも思えます。
「ELECOM JC-U4113SWH」のドライバを入れ直してみましたが
結果は変わらず、振動が変化しました。
こちらでも ReSetupJoypad を何度も繰り返すテストをしてみましたが
ReSetupJoypad を呼び出すたびに振動が弱くなり
5回目の呼び出しで、ほぼ振動を感じられなくなりました。
振動機能以外の、ボタンやジョイスティックなどの入力機能は
ReSetupJoypad を何度呼び出しても特に問題ありませんでした。
現象が発生しない「iBUFFALO BSGP1601BK」については
10回以上 ReSetupJoypad を呼び出しても、振動の強さは変わりませんでした。
ただ、「iBUFFALO BSGP1601BK」は「ELECOM JC-U4113SWH」に比べて
全体的に振動が強め(強さが「10」でも「1000」でもかなり強く振動する)なので
比較対象としてはあまり適切ではなかったかもしれません。
メーカーによって振動の強さの定義も異なるみたいですね。
以上のことから、やっぱり特定のメーカー(今のところELECOM)の製品特有の
不具合の可能性が濃厚になってきました。
製品の不具合だとプログラム側で回避するのは難しいと思いますが
何か方法がないか、時間があるときに色々試してみたいと思います。
|
Re: ゲームパッドの振動の強さが変わる ( No.8 ) |
- 名前:sereparu 日時:2019/04/29 01:41
今回のゲームパッドの振動の強さが変わる現象について、まだ回避策は見つかっていませんが
新たな発見がありましたので報告いたします。
前回、振動の強さが変わる現象が ELECOM 製品特有の不具合の可能性が高いとお伝えしましたが
どうやら ELECOM 以外の製品でも同様の不具合が発生するようです。
今回の確認に使用した製品は「Logicool Rumble Gamepad F510」です。
この製品は XInput、DirectInput の切替ができる有線のゲームパッドですが
DirectInput モードで ReSetupJoypad を何度も実行するテストをしたところ、徐々に振動が弱まる現象が発生しました。
ただ、前回現象を確認した「ELECOM JC-U4113SWH」が5回の ReSetupJoypad の実行で振動が止まったのに対して
「Logicool Rumble Gamepad F510」は、振動の弱まり方が緩やか(ほんの少しずつ弱まる感じ)で
振動の強さを最大(1000)の強さから始めた場合、30回目の ReSetupJoypad の実行で
ようやく振動がほぼ感じられなくなるぐらいになりました。
また、この製品もやっぱり XInput モードでは現象は発生しませんでした。
前回、ReSetupJoypad を20回実行しても振動が弱まらなかった「iBUFFALO BSGP1601BK」も
もしかしたら振動の弱まり方が小さかっただけなのではないかと思い
念を入れて ReSetupJoypad を100回実行するテストをしてみましたが
やっぱり振動は弱まりませんでした。
以上のことから、今回の現象は、ELECOM 製品特有の問題ではなく
DirectInput 全体の問題である可能性が出てきました。
さらに言えば、DirectInput しか使えないゲームパッドでは現象が発生しなかったので
XInput、DirectInput の切替ができるゲームパッドでのみ発生する不具合の可能性が高いです。
また、ReSetupJoypad 実行時のログを確認したところ
現象が発生しない「iBUFFALO BSGP1601BK」では、「ジョイパッドの初期化... 」というログと
「ジョイパッドの追加は正常に終了しました」というログの直前に
「スレッド 0x1b68 はコード 0 (0x0) で終了しました。」というようなログが必ず出るのに対して
現象が発生するゲームパッドでは、そのようなログが出ていないようです。
このスレッドのログがどういうものか、あまり詳しくありませんが、何か関係するものでしょうか?
■「ELECOM JC-U4113SWH」のログ
5687:ジョイパッドの初期化...
5723:入力装置を見つけました
5723: Device Instance Name : JC-U4113S DirectInput Mode
5724: Device Product Name : JC-U4113S DirectInput Mode
5740:ジョイパッドの追加は正常に終了しました
5753:ジョイパッドの初期化は正常に終了しました
■「Logicool Rumble Gamepad F510」のログ
4826:ジョイパッドの初期化...
4851:入力装置を見つけました
4852: Device Instance Name : Logicool Rumblepad 2 USB
4853: Device Product Name : Logicool Rumblepad 2 USB
4868:ジョイパッドの追加は正常に終了しました
4868:ジョイパッドの初期化は正常に終了しました
■「iBUFFALO BSGP1601BK」のログ
15755:ジョイパッドの初期化...
スレッド 0x1b68 はコード 0 (0x0) で終了しました。
15782:入力装置を見つけました
15783: Device Instance Name : BUFFALO BSGP1601 Series
15783: Device Product Name : BUFFALO BSGP1601 Series
スレッド 0x2f44 はコード 0 (0x0) で終了しました。
スレッド 0x3350 はコード 0 (0x0) で終了しました。
16003:ジョイパッドの追加は正常に終了しました
16004:ジョイパッドの初期化は正常に終了しました
現象発生ケースの列挙ばかりで申し訳ありませんが
何かお気づきの点がございましたら、ご教授願います。
 |
Re: ゲームパッドの振動の強さが変わる ( No.9 ) |
- 名前:通貨 日時:2019/04/29 20:57
管理人様
「プログラム中で初期化・後始末を繰り返すと振動しなくなる」が
「アプリを起動し直すと復活する」ということから、DxLibの後始末に問題があるのでは?
と考えトレースしてやってみました。
DxInputWin.cpp の
int TerminateJoypad_PF( void ) にある
for( j = 0 ; j < DINPUTPAD_MOTOR_NUM ; j ++ )
{
if( pad->Effect[ j ].PF.DIEffect != NULL )
{
pad->Effect[ j ].PF.DIEffect->Stop() ;
pad->Effect[ j ].PF.DIEffect->Unload() ;
pad->Effect[ j ].PF.DIEffect = NULL ;
}
}
の部分ですが、
for( j = 0 ; j < DINPUTPAD_MOTOR_NUM ; j ++ )
{
if( pad->Effect[ j ].PF.DIEffect != NULL )
{
pad->Effect[ j ].PF.DIEffect->Stop() ;
pad->Effect[ j ].PF.DIEffect->Unload() ;
pad->Effect[ j ].PF.DIEffect->Release(); // <--- ここ
pad->Effect[ j ].PF.DIEffect = NULL ;
}
}
のように、一行追加したらうまくいったように思うのですが…
|
Re: ゲームパッドの振動の強さが変わる ( No.10 ) |
- 名前:管理人 日時:2019/05/01 02:14
 |
Re: ゲームパッドの振動の強さが変わる ( No.11 ) |
- 名前:sereparu(解決) 日時:2019/05/01 20:43
管理人さん、通貨さん
ご対応ありがとうございます。
修正版でテストしてみたところ、ReSetupJoypad を実行しても
DirectInput のゲームパッドの振動の強さが変わらないことを確認しました。
本当にありがとうございました。
今後もよろしくお願いいたします。
|