VRChat OSC ボイスチェンジャー:マイクルーティングとアバターパラメーター

ボイスチェンジャーをVRChat OSCを通じてルーティングし、マイクに同期してアバターの表情、エモート、パラメーターアニメーションをトリガーする方法。完全セットアップガイド。

VRChat OSC ボイスチェンジャー:マイクルーティングとアバターパラメーター

VRChat OSCボイスチェンジャーのセットアップは、アバターの存在感が「違う音がする」から「本物のキャラクターのように反応する」へと変わるポイントです。ほとんどのガイドはオーディオルーティングで止まります。ボイスチェンジャーを選び、VRChatで仮想マイクを選択して完了。それで音はカバーされます。しかし、VRChatのOpen Sound Controlレイヤーは、マイクの活動が直接アバターの表情をアニメーション化し、エモートシーケンスをトリガーし、フェイストラッカーでは届かないパラメーターブレンドシェイプを駆動する第2のチャネルを開きます。このガイドは全体像をカバーします:オーディオチェーン、OSCデータパス、Stream Avatar SystemのアバターパラメーターマッピングStr、声によるエモート自動化、そしてすべてをつなぐ実用的なスクリプトセットアップ。


TL;DR

  • VRChatは音声に2つの別々のチャネルを使用:WASAPI音声入力(マイクの音)とUDP OSCメッセージ(アバターアニメーションのパラメーターデータ)
  • ボイスチェンジャーはオーディオチャネルを処理し、OSCブリッジスクリプトはデータチャネルを処理します。並行して動作し、競合しません
  • Stream Avatar Systemスペックは、フロートパラメーターVoiceVolumeVoiceActivityVoicePitchを使用してフェイストラッキングなしで口と表情のブレンドシェイプを駆動します
  • ボイスチェンジャーのマクロシステムで声のイベントやホットキーの押下時にOSCでBoolパラメーターを送信してエモートをトリガーできます
  • VRChatのデフォルトOSCポートは9000 UDPです。ポート9000がすでに使用されていない限り、特別な設定は不要です
  • VoxBoosterはこのチェーンのオーディオレイヤーとして機能し、追加設定は不要です

VRChatが音声に2つの別々のチャネルを処理する方法

OSC統合がなぜそのように機能するかを理解するには、VRChatが音声に使用する2つのチャネルを別々に見る必要があります。

チャネル1 — WASAPI音声。 VRChatはWindowsオーディオセッションAPIを通じて音声をキャプチャします。VRChatの設定でマイクとして選択したマイクデバイスから読み取ります。これは、他のプレイヤーが聞く実際の音を届けるチャネルです。VoxBoosterのようなボイスチェンジャーはここでOSオーディオレイヤーに挿入されるため、処理された音声はゲーム内設定なしでVRChatに届きます。VRChatはボイスチェンジャーではなく、単純にマイクを見ます。

チャネル2 — OSC UDPメッセージ。 VRChatはUDPポート9000でOpen Sound Controlパケットをリッスンします。これらには構造化データが含まれます:Float、Int、Bool、またはString値とペアになったアバターパラメーター名。VRChatはこれらの値を受け取り、リアルタイムでアクティブなアバターのAnimatorレイヤーに書き込みます。このチャネルはオーディオとは無関係です。視覚的なアニメーションパラメーターを駆動することだけに関するものです。

なぜこれが強力かというと:オーディオだけではVRChatの組み込みビジームシステム(音量しきい値による基本的な口の開け閉めアニメーション)しか駆動できません。OSCを使用すると任意のカスタムパラメーターを駆動できます。つまり、アバターのアニメーターが配線した任意のブレンドシェイプ、状態遷移、動作を制御できます。

OSCブリッジスクリプトはこれら2つのチャネルの間に位置し、1つの仕事をします:ボイスチェンジャーのオーディオ活動(またはホットキーイベント)をリッスンし、それをVRChatに送信するOSCパラメーターパケットに変換します。


オーディオチェーン:ボイスチェンジャーからVRChatマイク入力へ

OSCに触れる前に、オーディオチェーンを正しく設定することが前提条件です。

VoxBoosterをキャプチャソースとして設定する

VoxBoosterはWASAPI経由でWindowsオーディオレイヤーに仮想マイクを登録します。VRChatはこの仮想マイクから物理マイクと同じように読み取ります。セットアップは:

  1. VoxBoosterをインストールして起動します。仮想マイクデバイスがWindowsの設定のサウンドと入力に表示されることを確認します。
  2. VoxBooster UI内でVoxBoosterの入力ソースとして物理マイクを選択します。
  3. 音声プリセットを選択するか、エフェクトを設定します(ピッチ、フォルマント、AIモデル — 構築しているキャラクターによって異なります)。
  4. VRChatで設定とマイクに移動し、正しいデバイスが選択されていることを確認します。

VRChatのマイク選択動作は2023年に変更されました:デフォルトで物理入力デバイスを表示し、ドライバーのプレゼンテーションによっては仮想デバイスを非表示にすることがあります。VoxBoosterの仮想マイクがVRChatのリストに表示されない場合は、デバイスがWindowsのサウンド設定で「準備完了」として表示されているか確認してください。

処理されたオーディオのためのVRChatの音声設定

VRChatは受信するすべてのマイク入力に後処理を適用します。処理された音声(すでにイコライズされてピッチシフトされている)については、いくつかの設定に注意が必要です:

VRChat設定デフォルトボイスチェンジャーへの推奨
マイク音量ゲートオンしきい値を下げるか無効化 — 処理されたオーディオはゲートをクリップする可能性があります
音声フォールオフ範囲25mデフォルトを維持;処理ではなく近接性についてです
空間化音声オンオンを維持;ボイスエフェクトとは無関係にVRの存在感を追加します
アバターオーディオオーバーライドを許可ユーザー設定マイク設定をオーバーライドするアバターを着用している場合のみ関連

音量ゲートは最も一般的な障害点です。VRChatはマイクをカットする音量しきい値を使用します。これは環境騒音を防ぎますが、過度に圧縮されたボイスチェンジャーの出力もカットする可能性があります。VRChatで声が頻繁に途切れる場合は、VRChatのマイク設定でゲートしきい値を下げるか、VoxBoosterで圧縮を減らしてください。


VRChat OSCとは何ですか?実際に何ができますか?

**VRChat Open Sound Control(OSC)**は、VRChatが2022年にファーストパーティ機能として導入したリアルタイムメッセージングプロトコルです。ローカルマシンでUDP経由で動作し(インターネット接続不要、VRChatサーバー関与なし)、外部アプリケーションがVRChatアバターパラメーターをリアルタイムで読み書きできます。

VRChatのOSCは以下のことができます:

  • アバターディスクリプターで「OSC書き込みを許可」が有効になっている任意のアバターパラメーターにFloat、Int、Bool、またはString値を書き込む
  • VRChatからアバターパラメーター値を読み取る(VRChatはポート9001で送信)
  • プログラムでチャットボックスメッセージを送信する
  • VRChatアクションをトリガーする(アクションパラメーターに配線されたアバター機能をオン/オフ)
  • 外部ハードウェアやソフトウェアからの入力コントロール(移動軸、ボタン押下)をシミュレート

ボイスチェンジャー統合では、関連する機能はリアルタイムでアバターパラメーターにFloatおよびBoolパラメーターを書き込むことです。


Stream Avatar System:OSC音声を有用にするスペック

Stream Avatar Systemは、フェイストラッキングハードウェアなしでリアクティブなアバターアニメーションを望むストリーマーやVTuberのために、OSC書き込み可能なパラメーターの一貫したセットを定義するVRChatアバターのコミュニティ標準です。アバターがStream Avatar Systemスペックに基づいて構築されている場合、これらのパラメーターを受信する準備ができたAnimatorレイヤーが付属しています:

パラメーター名タイプ説明
VoiceVolumeFloat現在のマイク振幅、0.0-1.0に正規化
VoiceActivityBool声がノイズしきい値を超えている間はTrue
VoicePitchFloatおおよその基本周波数、0.0-1.0の範囲に正規化
VoiceEmotionInt表情状態にマップ(0=ニュートラル、1=幸せ、2=悲しい、3=怒り、4=驚き)
IsStreamingBoolアバターのストリーミングモードオーバーレイを有効化するオプションフラグ

OSCブリッジスクリプトがこれらの値をリアルタイムで送信すると、アバターの口が声量に比例して開き(VRChatの粗いビジームシステムを置き換え)、ピッチの輪郭に基づいて表情が変わり、話すのをやめるとアバターはアイドルニュートラルになります。


声でトリガーするエモート:OSC Boolパラメーターの配線

最も面白いアプリケーションの1つは、音声活動からアバターエモートを自動的にトリガーすることです。これにより、アバターがスピーチの特定の瞬間に物理的に手を振ったり、拍手したり、反応したりします。

VRChatでBoolトリガーエモートが機能する仕組み

VRChatアバターは、AnimatorレイヤーにBoolパラメーターを持つことができます。Trueに設定されると特定の状態(エモートクリップの再生)に入り、クリップが終了すると(「Exit Time」を持つトランジションまたはOSCリセットを介して)Falseに戻ります。OSCを介してエモートをトリガーするには、Bool True値を持つメッセージをVRChat/avatar/parameters/YourParameterNameに送信します。

OSCメッセージ形式は:/avatar/parameters/EmoteWave True(VRChatのOSCアドレス形式を使用)。

ボイスチェンジャーからトリガーする2つの方法

方法1 — 音量しきい値トリガー。 ブリッジスクリプトがVoxBoosterの仮想マイクからのオーディオ出力を監視し、N ミリ秒以上振幅がしきい値を超えたことを検出したときにOSC Boolを送信します。

方法2 — ホットキーベースのトリガー。 VoxBoosterはプリセットの切り替え、サウンドボードクリップの再生、マクロのトリガーのためのプログラム可能なホットキーをサポートしています。ブリッジスクリプトはグローバルホットキーをリッスンし、そのキーが押されたときにOSCエモートパラメーターを送信します。

両方の方法の最もシンプルなスクリプト実装はpython-oscライブラリを使用したPythonです:

from pythonosc import udp_client
import sounddevice as sd
import numpy as np

VRC_IP = "127.0.0.1"
VRC_PORT = 9000
THRESHOLD = 0.02  # マイクのノイズフロアに合わせて調整

client = udp_client.SimpleUDPClient(VRC_IP, VRC_PORT)
last_state = False

def audio_callback(indata, frames, time, status):
    global last_state
    volume = float(np.abs(indata).mean())
    active = volume > THRESHOLD
    if active != last_state:
        client.send_message("/avatar/parameters/VoiceActivity", active)
        client.send_message("/avatar/parameters/VoiceVolume", min(volume * 10, 1.0))
        last_state = active

with sd.InputStream(device="VoxBooster Virtual Mic",  # Windowsデバイス名に合わせる
                    channels=1, callback=audio_callback, samplerate=48000):
    print("OSC bridge running. Press Ctrl+C to stop.")
    while True:
        sd.sleep(10)

"VoxBooster Virtual Mic"をVoxBoosterの出力に表示される正確なWindowsデバイス名に置き換えてください。python -c "import sounddevice as sd; print(sd.query_devices())"を実行して利用可能なデバイスを一覧表示できます。

python-oscsounddeviceパッケージはpipでインストールできます:pip install python-osc sounddevice numpy


OSC対応プロキシ:ボイスチェンジャーとOSCを並行実行する

最もクリーンなプロダクションセットアップは、VoxBoosterとOSCブリッジスクリプトを、仮想マイクデバイスのみを仲介として共有する2つの独立したプロセスとして実行します。

物理マイク
    |
    v
VoxBooster(オーディオ処理:ピッチ、フォルマント、AIモデル)
    |
    +-- [WASAPI出力] -> VRChatマイク入力 -> VRChatオーディオエンジン
    |
    +-- [仮想マイクモニター] -> OSCブリッジスクリプト -> UDPポート9000 -> VRChat OSCエンジン
                                                                                    |
                                                                                    v
                                                                            アバターパラメーター
                                                                            (VoiceVolume, VoiceActivity等)

スタートアップ時にブリッジを実行する

Windowsが起動したときにブリッジを自動的に起動するには:

  1. ブリッジスクリプトを永続的な場所に保存してください。例:C:\Users\YourName\vrc-osc-bridge\bridge.py
  2. .batファイルを作成:pythonw C:\Users\YourName\vrc-osc-bridge\bridge.py
  3. Win+Rを押し、shell:startupと入力して、そのフォルダーに.batへのショートカットを置く

pythonw(コンソールウィンドウなし)はブリッジをバックグラウンドで静かに実行し続け、CPU使用量は無視できる程度です。


マイクチェーンのレイテンシー:OSCが追加するものと追加しないもの

オーディオパスのレイテンシーはVoxBoosterの処理モードによって設定されます。DSPエフェクト(ピッチ、フォルマント、EQ)は10ms未満で動作します。低遅延モードでのAI音声モデル推論は、ミドルレンジGPUで約80msで動作します。

OSCパラメーターのレイテンシーは音声活動とアバターアニメーション反応の間の遅延です。ブリッジスクリプトのオーディオコールバックは約10msごとに起動します。localhost上のUDP転送(1ミリ秒以下)とVRChatのAnimator更新サイクル(約30ms)を加えると、エンドツーエンドのOSCレイテンシーは30-50msです。

純結果:アバターの口はオーディオの1アニメーションフレーム以内に視覚的に反応します。これはオブザーバーには同時と区別がつきません。


比較:VRChat OSCのボイスチェンジャーアプローチ

アプローチオーディオ品質OSC統合レイテンシーセットアップの複雑さ
VoxBooster + OSCブリッジスクリプト高(AIモデル利用可能)はい、ブリッジ経由80ms AI / 10ms未満 DSP中 — Pythonスクリプトが必要
Voicemod + OSCブリッジスクリプト中(DSPのみ)はい、ブリッジ経由10ms未満中 — 同じブリッジアプローチ
MorphVOX + OSCブリッジ低-中はい、ブリッジ経由15ms未満
VRChat組み込みビジームのみN/A(未変更音声)ネイティブ、ブリッジなし5ms未満ゼロ
フェイストラッカー(例:VRCFaceTracking)N/A(オーディオ別)ネイティブ、ブリッジなし15-30ms高 — ハードウェアが必要

一般的な問題と解決策

VRChatがOSCメッセージを受信しない

この順序で確認してください:

  1. VRChatのアクションメニューでOSCが有効になっていることを確認(オプション -> OSC -> 有効)
  2. リッスンポートが9000であることを確認
  3. ファイアウォールルールがUDP localhostトラフィックをブロックしていないことを確認
  4. ブリッジスクリプトのターゲットポートがVRChatのリッスンポートと一致することを確認
  5. OSCを有効化した後VRChatを再起動

アバターパラメーターが反応しない

OSCがパラメーターに書き込むのは以下の場合のみです:

  • アバターがVRChatアバターディスクリプターでそれらのパラメーターを定義している
  • パラメーターがディスクリプターのパラメーターリストで「OSCを許可」に設定されている
  • Animatorレイヤーがそれらのパラメーターにトランジションが配線されている

VRChatでボイスチェンジャーオーディオが途切れる

  • VRChatのマイクゲートしきい値を下げる
  • VoxBoosterで出力圧縮比を下げる
  • 通常の発話が約-12から-6 dBFSでピークになるようにVoxBoosterの出力レベルをキャリブレートする

ブリッジスクリプトが間違ったオーディオデバイスを選択する

sounddeviceがVoxBoosterの仮想出力ではなく物理マイクから読み取っている場合、スクリプト内のデバイス名がWindowsと一致していません。sd.query_devices()を使用してすべてのデバイスを一覧表示し、VoxBoosterの仮想マイクの正確な文字列をコピーしてください。


他のソーシャルVRプラットフォームにおけるVRChat OSC音声

VRChatはOSCをファーストパーティ機能として実装した最初の主要なソーシャルVRプラットフォームでしたが、概念は広がっています:

  • Resoniteはノードグラフベースのスクリプトシステムを使用しており、オーディオ入力が同様の表現力でアバターパラメーターを駆動できます
  • ChilloutVRは互換性のあるアバター向けのOSCパラメーター入力をサポートし、VRChatに似たルーティングアーキテクチャを使用しています
  • 一般的なストリーミングセットアップも同じ仮想マイクチェーンから恩恵を受けます

上級:表情制御のためにVoicePitchをOSCで送信する

アバターのStream Avatar SystemレイヤーにVoicePitch Floatパラメーターが含まれている場合、ブリッジを拡張しておおよそのピッチデータを送信できます:

def estimate_pitch(audio_chunk, samplerate=48000):
    """Returns normalized pitch 0.0-1.0, where 0.5 is roughly 200 Hz."""
    if np.max(np.abs(audio_chunk)) < 0.01:
        return 0.0
    corr = np.correlate(audio_chunk, audio_chunk, mode='full')
    corr = corr[len(corr)//2:]
    min_lag = int(samplerate / 800)
    max_lag = int(samplerate / 80)
    if len(corr) < max_lag:
        return 0.0
    peak_lag = np.argmax(corr[min_lag:max_lag]) + min_lag
    if peak_lag == 0:
        return 0.0
    f0 = samplerate / peak_lag
    import math
    normalized = (math.log2(f0) - math.log2(80)) / (math.log2(800) - math.log2(80))
    return max(0.0, min(1.0, normalized))

よくある質問

VRChat OSCとは何ですか?ボイスチェンジャーとどのように連携しますか?

VRChat OSC(Open Sound Control)は、外部アプリケーションがVRChatにリアルタイムデータを送信できる組み込みプロトコルです。OSCと統合されたボイスチェンジャーは、マイクの音声レベルやキーイベントを読み取り、パラメーター値をVRChatに送信することで、アバターのアニメーションが音声に同期して反応するようにできます。

VRChat OSCを使って声でアバターのエモートをトリガーできますか?

はい。OSCブリッジスクリプトを使用すると、ボイスチェンジャーが音素、音量しきい値、またはホットキーの押下を検出したときに、BoolまたはFloatのアバターパラメーターを送信できます。VRChatはアバターのAnimatorレイヤーでそれらのパラメーターを解釈し、マップされたエモートまたは表情のトランジションを再生します。

ボイスチェンジャーがVRChat OSCで動作するために特別なドライバーが必要ですか?

いいえ。ボイスチェンジャーはWASAPIレイヤーでオーディオを処理します。OSCメッセージングはローカルホストのポート9000でUDPを通じて動作します。これらは完全に別々のチャネルで、どちらにも特別なドライバーは必要ありません。

VRChatのStream Avatar Systemとは何ですか?マイクルーティングとどのように関係しますか?

Stream Avatar Systemは、VoiceVolume、VoicePitch、VoiceActivityなどのOSCフロートパラメーターをビジームと表情のブレンドシェイプにマッピングするコミュニティ標準です。OSCブリッジがこれらのパラメーターをリアルタイムで送信すると、アバターがライブマイクに継続的に反応します。

OSCをボイスチェンジャーと使用するとVRChatでBANされますか?

いいえ。VRChatは2022年以降OSCをファーストパーティ機能として明示的にサポートしています。ボイスチェンジャー処理もOSCメッセージングもVRChatの利用規約に違反しません。

VRChat OSCはデフォルトでどのポートをリッスンしますか?

VRChatはデフォルトでUDPポート9000でOSCを受信し、ポート9001から送信します。アクションメニューのOSC設定でリッスンポートを変更できます。

どのボイスチェンジャーがVRChat OSC統合をネイティブにサポートしていますか?

2026年半ば時点で、主要な商用ボイスチェンジャーには組み込みのVRChat OSCブリッジが搭載されていません。統合は軽量なブリッジスクリプトを介して行われます。VoxBoosterの仮想マイク出力はどのようなブリッジとも互換性があります。


結論

VRChat OSCボイスチェンジャーセットアップとStream Avatar Systemの組み合わせは、フルフェイストラッキングハードウェアを除いて、現在のソーシャルVR音声統合の実用的な上限です。オーディオチャネルはキャラクターの声を届け、OSCチャネルはアバターをそれに反応させます。

セットアップは基本的なボイスチェンジャーのインストールよりも手間がかかりますが、コンポーネントは小さいです:オーディオを処理するボイスチェンジャー(VoxBooster)、OSCを処理する40行のPythonブリッジスクリプト、そしてOSC対応アバター。

VoxBoosterをダウンロード — 3日間無料トライアル、クレジットカード不要。

VoxBoosterを試す — 3日間無料。

リアルタイム音声クローン、サウンドボード、エフェクト — 会話するすべての場所で。

  • カード不要
  • ~30msのレイテンシ
  • Discord · Teams · OBS
3日間無料で試す