PCSX2のキーボードマニアをMIDIキーボードでプレイする方法
PCSX2 v2.3.39上のKEYBOARDMANIA II 2ndMIX&3rdMIXをMIDIキーボード KORG microKEY-25でプレイする方法について。
PCSX2 コントローラ設定
PCSX2のUSBポート1の設定にキーボードマニアという項目がありますが、MIDIキーボードの鍵盤を割り当てることはできませんでした。
なので、まず以下のようにPCキーボードのキーを割り当てます。(.SGHJQRは使えなかったので未使用)

MIDIキーボードのキーをPCのキーに変換
MIDIキーボードのキーをPCのキーボードのキーに変換するアプリについて。
最初midiToKeyというアプリを使ってみたのですがmicroKEY-25のジョイスティックの上下(コントロールチェンジ)をホイールのキーに変換することが出来ませんでした。
次にmidikey2keyというアプリを試したところ変換出来たのですが、スティックを上下に傾けている間キーを押しっぱなしにするという動作ができませんでした。
色々ググっていたところ
で使っているAutoHotKeyのスクリプトmidi.ahkを使うとMIDIイベントを受け取れることが分かったので、自前でMIDIイベントをハンドリングしてキーイベントを送信することにしました。
AutoHotKey v1をインストールする。
AHK-MIDI-Trransformerをダウンロードする。(Download ZIPをクリックする)

3. 適当なフォルダに展開する。
4. Midi.ahkと同じフォルダにkeyboardmania.ahkという名前のファイルを作成し、以下の内容を貼り付けて保存する。
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
Global settingFilePath := A_ScriptDir . "\keyboardmania.ini"
; このファイルと同じ階層にある Midi.ahk を読み込む
#include %A_LineFile%\..\Midi.ahk
Global midi := new Midi()
OnExit, ExitSub
midi.LoadIOSetting(settingFilePath)
global ccArray := Object()
Return
ExitSub:
midi.SaveIOSetting(settingFilePath)
ExitApp
getKeyNameByNoteName(noteName) {
;.SGHJQRは未使用
;.はホットキーに割り当てられていた。
;また何故かSGHJQRも使用できなかった。(割り当ててもも反応しない)
switch noteName {
case "C2": return "z"
case "C#2": return "x"
case "D2": return "c"
case "D#2": return "v"
case "E2": return "b"
case "F2": return "n"
case "F#2": return "m"
case "G2": return ","
case "G#2": return "/"
case "A2": return "\"
case "A#2": return "a"
case "B2": return "d"
case "C3": return "f"
case "C#3": return "k"
case "D3": return "l"
case "D#3": return ";"
case "E3": return ":"
case "F3": return "]"
case "F#3": return "w"
case "G3": return "e"
case "G#3": return "t"
case "A3": return "y"
case "A#3": return "u"
case "B3": return "i"
}
return ""
}
getKeyNameByCC(cc) {
switch cc {
case 1: return "@" ;KORG microKEY-25のジョイスティック↑
case 2: return "[" ;KORG microKEY-25のジョイスティック↓
}
return ""
}
midiNoteOnOff() {
event := midi.MidiIn()
keyName := getKeyNameByNoteName(event.noteName)
if (event.status == "NoteOn" && event.velocity > 0)
param2 := "down"
else
param2 := "up"
if (StrLen(keyName) > 0) {
Send, % "{" keyName " " param2 "}"
}
}
MidiNoteOn:
midiNoteOnOff()
Return
MidiNoteOff:
midiNoteOnOff()
Return
MidiControlChange:
event := midi.MidiIn()
cc := event.controller
keyName := getKeyNameByCC(cc)
if (StrLen(keyName) > 0) {
if ccArray[cc] is not number
ccArray[cc] := false
if ( !ccArray[cc] && event.value > 0) {
Send, % "{" keyName " down}"
ccArray[cc] := true
}
else if (ccArray[cc] && event.value == 0) {
Send, % "{" keyName " up}"
ccArray[cc] := false
}
}
Return
;KORG microKEY-25のジョイスティックを完全に左に倒すとpitch=0、右に倒すと16383
;MidiPitchWheel:
; OutputDebug, % Format("MIDI: PitchWheel {1}", midi.MidiIn().pitch)
; Return
keyboardmania.ahkを実行するとタスクトレイにAutoHotKeyのアイコンが表示されるので、右クリックメニューにあるMIDI Input Devicesで接続しているMIDIキーボードを選択する。

以上でPCSX2上のキーボードマニアでMIDIキーボードを使用できるようになります。
microKEY-25以外を使用する場合は、キーボード左端の白鍵のオクターブ番号が異なっていたり、ホイール扱いにするイベントが異なっている可能性があるので、各自編集していただければと思います。
自分が所有しているMIDIキーボードの左端の白鍵のノート名、コントロール番号が知りたい場合、AHK-MIDI-Transformer.ahkを実行して、設定ウインドウを表示(タスクトレイのスクリプトアイコンの右クリックメニューにSettingがあるのでクリック)すると下端に押した鍵盤のノート番号、ノート名、コントロール番号が表示されます。
Midi.ahkを見た感じAftertouch, ProgramChange, ChannelPressure, Sysexのイベントもあるようですが、それらについては表示されないようです。
