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イベントをハンドリングしてキーイベントを送信することにしました。

  1. AutoHotKey v1をインストールする。

  2. 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のイベントもあるようですが、それらについては表示されないようです。

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