目的
Windowsに接続されたMIDI鍵盤からのデータをVRCHAT OSCの入力として扱いたい
オープンベータへの参加
open-beta - Open Betaを選択

画面を閉じる.
更新が走るはず.
VRCHATのOSCが有効になっている確認
R長押しでOptionsを押す.

OSCメニューが出ていることを確認する.

OSC Debugを確認する.

このメッセージが出ればOKです.

OSC was turned off in your settings ~~~が一番最初の行に書いてあるときは..

もう一度OSCの画面を開いて, Enabledが有効になっていることを確認して下さい.(写真は無効の状態)
クリックすれば有効になります.
これでVRCHAT側の設定は一旦終わりです.
VRチャットは消さずに,デバッグの画面を出しておいてください.!
TouchOSCをインストールする
https://hexler.net/touchosc#_

GET TOUCHOSCをクリック

Windowsをクリックしてダウンロード
起動してみる
お金に余裕のある人はライセンスを購入することで,開発者を援助できます.
VRCHATへの接続を設定する
下記の画像のように設定します.(なおHostはlocalhostでは動作しないので127.0.0.1としましょう)

Doneして基本画面に戻る.
コントロールを新規追加する
ここでTouchOSCからVRCHATへボタンのクリックイベントが送信されているかテスト
こんな感じで横につなげて確認するとわかりやすいかもしれないです.

TouchOSCの実行ボタン(▶)を押してボタンをクリックしてみます.

VRCHATにボタンのイベントを送れていることがわかります.
TouchOSCの実行モードの終了は右上に小さい点があるのでそれをクリックします

[本題]MIDI信号をトリガーとしてOSCイベントを発火
TouchOSCにMIDIの入力を設定する
TouchOSCの Edit→Connections→MIDI

Browseを押して出力(Send Port)と受信(Receive) MIDI機器を設定します.

終わったらDoneで完了!
MIDI監視ツールをインストールする
Protokolをインストールする.
https://hexler.net/protokol

MIDIノートを監視
RECEIVE | ENDPOINT(A-Series Keyboard) TYPE(CONTROLCHANGE) CHANNEL(1) DATA1(64) DATA2(79)
は
`受信 | MIDIデバイス名 TYPE(タイプ名) CHANNEL(1) DATA1(コントローラー番号:64) DATA2(ベロシティ:0-127)で取得できます
ここで取得した数字は後でMIDI入力をマッピングする際に使います.
MIDIの入力をOSCのイベントにする
- ボタンをクリックして選択する.
- 右の詳細ビューから
Messages→MIDIのタブを展開する.

Enable:有効化どうか →チェックを付ける
Send:送信トリガー →チェックを外す
Receive:受信トリガー→チェックを付ける
Feedback: わからないけど→とりまチェックつけとく
Connections: 1でOK MIDIの入力番号
Trigger : デフォルトでOK(写真の通り)
Type: 鍵盤ならNOTE_ON, ペダルとかならCONTROL CHANGEで
Channel: CONSTANTを選択して, 上で確認したチャンネル (ここでは1)にする
Note: CONSTANTを選択して, 上で確認したノート (ここでは鍵盤のC1である64)にする
Velocity: デフォでOK(x : VALUE)
Scale:これで入力のベロシティの範囲を指定する(そのままでよければ0-127)
VRCHATのOSC DEBUGが反応するか確認
TouchOSCの実行ボタン(▶)を押します.
以下のアニメーションは右下にMIDIの反応を見るためにProtokolを,裏で動いてるのはVRCHATのORC DEBUG画面, 左下が実行中のOSC DEBUGです.
試しにC1(ド)の鍵盤を押してみたときの動きです!

VRCHATのモーションに割り当てる
VRCHATに無事データを飛ばせたので,VRCHATの機能を割り当てます.
C:\Users\{$USERNAME}\AppData\LocalLow\VRChat\VRChat\OSC\{hogehoge}\Avatars
にアバターごとのjsonがあります.
このJSONにはinputというパラメータがあり,このアドレスに指定された型(今回はInt)を入れてリクエストを送ることで,該当の機能を使えるようになります.
addressに記載されているアドレスをTouchOSCのボタンイベントの送信先に設定することで,OSCからアバターの機能を使用する事ができます.
{
"name": "VRCEmote",
"input": {
"address": "/avatar/parameters/VRCEmote",
"type": "Int"
},
"output": {
"address": "/avatar/parameters/VRCEmote",
"type": "Int"
}
},
今回はVRCのデフォルトのEmote機能(avatar/parameters/VRCEmote)を使うことにします.(WaveとかDieとかあるあれです.)

TouchOSCのボタンをクリックして詳細ビュー,Control→Nameの値をデフォルトのbutton1から

→最初の/は抜く→avatar/parameters/VRCEmoteに変更します.

変更したら再度TouchOSCを実行して(▶)C1(ド)の鍵盤を押します.

1つのパラメータに複数の機能が割り当てられていることがあります.例えばavatar/parameters/VRCEmoteでは与えるInt値によって他のClapやDieなどの機能も使えるようになります.
与えるInt値を変えるにはTouchOSCのボタンをクリック→右側の詳細ビュー→Messages→OSC→Scaleの範囲を変更します.

これを2にすると....

終わりに
VRCHATを初めて2週間ほどですが,たくさんの方に優しくしていただけたコミュニティに感謝しつつ,この記事がVRCHATをさらに楽しもうとしている皆さんの助けになれば幸いです.
参考文献
Special Thanks
@dokkozo VRCHATのモーションに割り当てる セクションの情報提供をしてくれました.
あとアバターが非常に可愛いのでモチベーションになりました.











