MIDIキーボードで格闘ゲームを遊べるようにしてみた

https://github.com/yunou111/MIDItoXinput

Arduino Leonardoをコンバーターとすることで、MIDIキーボードでSteamのゲームを遊べるようにしてみました。私は主に格闘ゲームで遊んでいるので、これも格闘ゲーム向けに作っていますが、格闘ゲーム以外でも利用することはできます。

MIDIキーボードの入力をゲームパッドやQWERTYキーボードの入力へ変換するアプリケーションは以前からありました。ですが、Windowsのアプリケーションであるため、オフラインで遊ぶことができなかったり、そもそも動作が不安定で実質的にsteamで利用不可なものがほとんどでした。

今回、作成したものは動作が安定しており、Arduino Leonardo にプログラムを書き込んだものなので、オフライン大会等にも持ち込むことができます。(使用してよいかは要確認)

< コードについて >

私にはプログラミングの知識がありません(超重要)
ですので、このプログラムはChatGPTにすべて作ってもらいました。
本職プログラマーでこのプログラムを修正できる方がおりましたら、ぜひともお願いします。
(2024/11/24追記)
下方向から左斜め上への入力ができない不具合を修正しました。

< コードの内容について >

MIDIキーボードの入力をXinputの入力に変換する際、Dパッドの方向キーに変換すると 1P側の波動コマンド(↓↘→)がなぜか正しく動作しませんでした。いろいろと試行錯誤しましたが、最後まで直せなかったため、移動は左アナログスティックへの変換をしています。

左アナログスティックへの変換となったことで、方向キーの入力が同時に行われた際に、座標値の加減をすることでニュートラルとすることができました。これにより、一部の格闘ゲームのルールに対応したものが作れました。Dパッドの方向キーへの変換では、これも再現できなかったので、これも大変助かりました。

MIDI_to_Xinput.ino の55行目から138行目までが キーコンフィグ になっています。
case (数値)はMIDIキーボードの音階となっています。この数値は使用するMIDIキーボードによって範囲が異なるので、自信の環境に合わせて適宜修正してください。このプログラムは37鍵MIDIキーボード向けに作成しています。
同様に、xinput.press(XInputControl::(ボタンの種類)); も自身が変換したいゲームパッドの入力へと適宜書き直してください。このプログラムは格闘ゲーム用に上方向だけを右側に移しているので、そのままだと使いづらくなります。

< 使用可能なMIDIキーボード >

・YAMAHA PSS-A50
・Akai / MPK mini(初代)
・ARTURIA MICROLAB

私が実際に動作を確認したものは上記となっています。
私が確認したわけではありませんが、Arduino Leonardo と接続した際に、動作しないMIDIキーボードもあるようなので注意してください。
参考:


< 注意事項 >


① このプログラムを書き込んだArduino Leonardoは電力消費が大きいらしく、電力不足関係の不具合で動かなくなることが多いです(グラボを増設したら動かなくなった、タブレットPCでは動かない等)。
動かないなと思ったらUSB3.0のハブ、USB type-C ドッキングステーションのUSBから接続する等をしてみてください。
②MIDIキーボードを接続した状態のArduino LeonardoをPCに接続した際に、正しく動作しないことがあります。動かないと思ったら、Arduino Leonardoのみを接続してPC上でXbox360コントローラーとして認識された後に、Arduino LeonardoにMIDIキーボードを接続してみてください。

< そのほか補足 >

このプログラムは上記URLの「演奏九号」を参考にしています。
「演奏九号」はMIDIキーボードの入力をQWERTYキーボードの入力へ変換するもので、こちらでもSteam上でゲームを遊ぶことができます。私が作ったものよりも安定しているので、オフライン大会等を考えていない方は「演奏九号」を使用することをオススメします。

Arduino Leonardo は 2024年8月現在 Amazonで4500円 となっています。古いもので数が少ないためか最近になって値上がっています。確保は早めにしたほうがよいかもしれません。

USB ホスト シールドについては正規のものは既に市場では出回らなくなっています。現在購入できるものは、価格の高いものを買っても安いものを買ってもピンが明後日の方向を向いているものしかないため、一番安いものを選んで買いましょう。

いいなと思ったら応援しよう!