12
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VRChat OSCを使ってMIDI機器でVRCHATを操作する

Last updated at Posted at 2022-02-18

目的

Windowsに接続されたMIDI鍵盤からのデータをVRCHAT OSCの入力として扱いたい

オープンベータへの参加

Steamを開き,VR Chatのプロパティを開く.
image.png

open-beta - Open Betaを選択
image.png
画面を閉じる.
更新が走るはず.

VRCHATのOSCが有効になっている確認

デスクトップモードでVRCHAT起動する.
image.png

R長押しでOptionsを押す.
image.png
OSCメニューが出ていることを確認する.
image.png
OSC Debugを確認する.
image.png
このメッセージが出ればOKです.
image.png

OSC was turned off in your settings ~~~が一番最初の行に書いてあるときは..
image.png
もう一度OSCの画面を開いて, Enabledが有効になっていることを確認して下さい.(写真は無効の状態)
クリックすれば有効になります.

image.png

これでVRCHAT側の設定は一旦終わりです.
VRチャットは消さずに,デバッグの画面を出しておいてください.!

TouchOSCをインストールする

https://hexler.net/touchosc#_
image.png
GET TOUCHOSCをクリック
image.png
Windowsをクリックしてダウンロード

##起動してみる
image.png

お金に余裕のある人はライセンスを購入することで,開発者を援助できます.

VRCHATへの接続を設定する

TouchOSCのEditConnectionsを選択.
image.png

下記の画像のように設定します.(なおHostはlocalhostでは動作しないので127.0.0.1としましょう)
image.png
Doneして基本画面に戻る.

コントロールを新規追加する

image.png

ここでは試しにボタンを追加します.
image.png

ボタンができます.
image.png

ここでTouchOSCからVRCHATへボタンのクリックイベントが送信されているかテスト

こんな感じで横につなげて確認するとわかりやすいかもしれないです.
image.png

TouchOSCの実行ボタン(▶)を押してボタンをクリックしてみます.
Animation.gif
VRCHATにボタンのイベントを送れていることがわかります.

TouchOSCの実行モードの終了は右上に小さい点があるのでそれをクリックします
image.png

[本題]MIDI信号をトリガーとしてOSCイベントを発火

TouchOSCにMIDIの入力を設定する

TouchOSCの EditConnectionsMIDI
image.png
Browseを押して出力(Send Port)と受信(Receive) MIDI機器を設定します.
image.png
終わったらDoneで完了!

MIDI監視ツールをインストールする

Protokolをインストールする.
https://hexler.net/protokol
image.png

MIDIノートを監視

ノート(鍵盤の白鍵,黒鍵)
image.png
MIDIペダルの例
image.png

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のイベントにする

全体GIF
Animation.gif

  • ボタンをクリックして選択する.
  • 右の詳細ビューからMessagesMIDIのタブを展開する.

image.png
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(ド)の鍵盤を押してみたときの動きです!
Animation.gif

VRCHATのモーションに割り当てる

VRCHATに無事データを飛ばせたので,VRCHATの機能を割り当てます.
C:\Users\{$USERNAME}\AppData\LocalLow\VRChat\VRChat\OSC\{hogehoge}\Avatars
にアバターごとのjsonがあります.

このJSONにはinputというパラメータがあり,このアドレスに指定された型(今回はInt)を入れてリクエストを送ることで,該当の機能を使えるようになります.
addressに記載されているアドレスをTouchOSCのボタンイベントの送信先に設定することで,OSCからアバターの機能を使用する事ができます.

avatername.json
    {
      "name": "VRCEmote",
      "input": {
        "address": "/avatar/parameters/VRCEmote",
        "type": "Int"
      },
      "output": {
        "address": "/avatar/parameters/VRCEmote",
        "type": "Int"
      }
    },

今回はVRCのデフォルトのEmote機能(avatar/parameters/VRCEmote)を使うことにします.(WaveとかDieとかあるあれです.)
image.png

TouchOSCのボタンをクリックして詳細ビュー,ControlNameの値をデフォルトのbutton1から
image.png
→最初の/は抜く→avatar/parameters/VRCEmoteに変更します.
image.png

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

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

Animation.gif

終わりに

VRCHATを初めて2週間ほどですが,たくさんの方に優しくしていただけたコミュニティに感謝しつつ,この記事がVRCHATをさらに楽しもうとしている皆さんの助けになれば幸いです.

参考文献

Special Thanks

@dokkozo VRCHATのモーションに割り当てる セクションの情報提供をしてくれました.
あとアバターが非常に可愛いのでモチベーションになりました.

12
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?