Robloxのモジュラーオーディオオブジェクトを使用すると、体験内のサウンドやボイスチャットを動的に制御できます。ほぼすべてのオーディオオブジェクトは、現実世界のオーディオデバイスに対応しており、物理的なデバイスと同様にオーディオをキャプチャして再生するために機能します。
たとえば、すべてのオーディオオブジェクトは概念的に以下のカテゴリに分類されます:
- オーディオストリームを生成するオブジェクト(オーディオプレーヤーなど)。
- オーディオストリームを消費するオブジェクト(オーディオエミッターなど)。
- オーディオストリームを修正するオブジェクト(オーディオエフェクトなど)。
- オーディオストリームをあるオーディオオブジェクトから別のオーディオオブジェクトに運ぶオブジェクト(ワイヤーなど)。
このガイドを読み進め、これらのオーディオオブジェクトがどのように連携して音を発生させるかを学ぶことで、体験からプレイヤーへ、またその逆に音楽、効果音、人間の声を正確にキャプチャして供給する方法を学ぶことができます。
オーディオを再生する
体験内でオーディオを再生するには、利用可能な各オーディオオブジェクトの役割を理解することが重要です:
- AudioPlayer は、設定されたオーディオアセットIDを使用してオーディオファイルをロードして再生します。
- AudioEmitter は、3D環境内にオーディオを発信する仮想スピーカーです。
- AudioListener は、3D環境からオーディオを拾う仮想マイクです。
- AudioDeviceOutput は、現実世界の物理ハードウェアデバイス(スピーカーやヘッドフォンなど)です。
- AudioDeviceInput は、現実世界の物理マイクです。
- AudioTextToSpeech オブジェクトは、人工的な人間の声を使用してテキストをオーディオに変換します。
- AudioSpeechToText オブジェクトは、話されたオーディオをテキストに変換します。
- Wire は、オーディオストリームをあるオーディオオブジェクトから別のオーディオオブジェクトに運びます。
これらのオーディオオブジェクトをどのように組み合わせるかは、プレイヤーのスピーカーやヘッドフォンに直接オーディオを発信したいのか、3D空間内のオブジェクトから発信したいのかによって異なります。以下のセクションでは、両方のシナリオについて詳しく説明します。
2Dオーディオ
2Dオーディオは、特定の位置から再生されず、プレイヤーの位置や方向に関係なく同じ音量で再生される非方向性の音です。このタイプのオーディオには、3つのオーディオオブジェクトが必要です:
- オーディオストリームを生成するオーディオプレーヤー。
- 現実世界でオーディオストリームを再生する物理ハードウェアデバイス。
- オーディオプレーヤーから出力デバイスにオーディオストリームを運ぶワイヤー。
スタジオでこれらのオーディオオブジェクトを2Dオーディオ用に構成する方法を示すために、以下の図は各オブジェクトを現実世界のオーディオデバイスの対応物と比較しています。要約すると:
- AudioPlayer は、指定された設定でオーディオアセットをロードして再生します。
- AudioDeviceOutput は、プレイヤーがスピーカーやヘッドフォンを通じてオーディオを聞くことを可能にします。
- Wire は、オーディオプレーヤーの SourceInstance プロパティを使用してオーディオプレーヤーに接続し、物理ハードウェアデバイスの TargetInstance プロパティを使用して接続します。これにより、オーディオプレーヤーからプレイヤーの出力デバイスにオーディオストリームを運ぶ橋として機能します。

非方向性オーディオを再生するには:
- Explorer ウィンドウで、SoundService に移動し、以下を挿入します:
- オーディオソースを作成するための AudioPlayer オブジェクト。
- 体験全体で再生されるスピーカーを作成するための AudioDeviceOutput オブジェクト。
- オーディオプレーヤーからスピーカーへのストリームを接続するための Wire オブジェクト。
- AudioPlayer オブジェクトの Properties ウィンドウで:
- AssetID を有効なオーディオアセットIDに設定します。カスタムオーディオがない場合は、Creator Storeで無料で使用できるオーディオアセットを見つけることができます。
- オーディオを継続的に繰り返したい場合は、Looping を有効にします。
- オーディオを再生したい振幅の単位に Volume を設定します。
- Wire オブジェクトの Properties ウィンドウで:
- SourceInstance を AudioPlayer に設定して、この特定のオーディオプレーヤー内でオーディオを再生することを指定します。
- TargetInstance を AudioDeviceOutput に設定して、この特定のスピーカーからオーディオを再生することを指定します。
ここから、プレイヤーが体験に参加する際やゲームプレイイベントやUIの相互作用の結果として、スクリプトで非方向性オーディオをトリガーできます。これらのユースケースのコードサンプルの参照については、Add 2D audio チュートリアルを参照してください。
3Dオーディオ
3Dオーディオは、3D空間内の特定の位置から再生される方向性の音で、プレイヤーの位置や音に対する方向に応じて音量が増減します。このタイプのオーディオには、6つのオーディオオブジェクトが必要です:
- オーディオストリームを生成するオーディオプレーヤー。
- 環境内でオーディオストリームを発信するオーディオエミッター。
- 環境からオーディオストリームを拾うリスナー。
- 現実世界でオーディオストリームを再生する物理ハードウェアデバイス。
- 2つのワイヤー:1つはオーディオプレーヤーからエミッターへのオーディオストリームを運び、もう1つはリスナーから出力デバイスへのオーディオストリームを運びます。
スタジオでこれらのオーディオオブジェクトを3Dオーディオ用に構成する方法を示すために、以下の図は各オブジェクトを現実世界のオーディオデバイスの対応物と比較しています。要約すると:
- AudioPlayer は、指定された設定でオーディオアセットをロードして再生します。
- AudioEmitter の親の位置は、3D空間内でオーディオがどこから発信されるかを決定します。
- AudioListener は、デフォルトのリスナー位置を設定した場所に応じて、ローカルカメラまたはプレイヤーキャラクターの Humanoid.RootPart からエミッターのオーディオを拾います。
- AudioDeviceOutput は、プレイヤーがスピーカーやヘッドフォンを通じてオーディオを聞くことを可能にします。
- 最初の Wire は、オーディオプレーヤーの SourceInstance プロパティを使用してオーディオプレーヤーに接続し、エミッターの TargetInstance プロパティを使用して接続します。これにより、オーディオプレーヤーからエミッターへのオーディオストリームを運ぶ橋として機能します。
- 2つ目の Wire は、リスナーの SourceInstance プロパティを使用してリスナーに接続し、物理ハードウェアデバイスの TargetInstance プロパティを使用して接続します。これにより、リスナーからプレイヤーの出力デバイスへのオーディオストリームを運ぶ橋として機能します。

位置情報オーディオを再生するには:
プレイヤーが体験にスポーンする際に AudioListener を作成する場所を選択します。
- Explorer ウィンドウで SoundService を選択します。
- Properties ウィンドウで ListenerLocation を以下のいずれかに設定します:
- Default - ボイスチャットを有効にした体験で、リスナーを Workspace.CurrentCamera に作成して親にします。
- None - リスナーを作成しません。このオプションは、スクリプトを介してリスナーを作成したい場合に便利です。
- Character - ローカルプレイヤーのキャラクターにリスナーを作成して親にします。
- Camera - Workspace.CurrentCamera にリスナーを作成して親にします。
Explorer ウィンドウで、オーディオを発信したい3Dオブジェクトに移動し、以下を挿入します:
- オーディオソースを作成するための AudioPlayer オブジェクト。
- 3Dオブジェクトから位置情報ストリームを発信するための AudioEmitter オブジェクト。
- オーディオプレーヤーからオーディオエミッターへのストリームを接続するための Wire オブジェクト。
AudioPlayer オブジェクトの Properties ウィンドウで:
- AssetID を有効なオーディオアセットIDに設定します。カスタムオーディオがない場合は、Creator Storeで無料で使用できるオーディオアセットを見つけることができます。
- オーディオを継続的に繰り返したい場合は、Looping を有効にします。
- オーディオを再生したい振幅の単位に Volume を設定します。
AudioEmitter オブジェクトの Properties ウィンドウで、DistanceAttenuation をリスナーがエミッターをどれだけ大きく聞くかを決定する音量対距離の曲線に設定します。
たとえば、以下の曲線は、リスナーがエミッターから50スタッド離れたときにオーディオの音量を半分に減少させ、その後リスナーが70スタッド離れたときに音量をゼロに急激に減少させます。

Wire オブジェクトの Properties ウィンドウで:
- SourceInstance を AudioPlayer に設定して、この特定のオーディオプレーヤー内でオーディオを再生することを指定します。
- TargetInstance を AudioEmitter に設定して、この特定のオーディオエミッターからオーディオを再生することを指定します。
ここから、プレイヤーが体験に参加する際やゲームプレイイベントやUIの相互作用の結果として、スクリプトで方向性オーディオをトリガーできます。これらのユースケースのコードサンプルの参照については、Add 3D audio チュートリアルを参照してください。
テキスト読み上げ
テキスト読み上げ(TTS)は、テキスト文字列を人工音声を使用して音声に変換する支援技術の一形態です。このタイプのオーディオには、5つのオーディオオブジェクトが必要です:
- テキストをオーディオに変換するためのオーディオスピーチジェネレーター。
- 環境内でオーディオストリームを発信するオーディオエミッター。
- 環境からオーディオストリームを拾うリスナー。
- 現実世界でオーディオストリームを再生する物理ハードウェアデバイス。
- 2Dオーディオの場合 - オーディオスピーチジェネレーターから出力デバイスへのオーディオストリームを運ぶワイヤー。
- 3Dオーディオの場合 - 2つのワイヤー:1つはオーディオスピーチジェネレーターからエミッターへのオーディオストリームを運び、もう1つはリスナーから出力デバイスへのオーディオストリームを運びます。
これらのオブジェクトを構成する方法は、2D TTSオーディオを作成したいのか、3D TTSオーディオを作成したいのかによって異なります。各プロセスの詳細については、以下のタブをクリックしてください。
スタジオでこれらのオーディオオブジェクトを2D TTSオーディオ用に構成する方法を示すために、以下の図は各オブジェクトを現実世界のオーディオデバイスの対応物と比較しています。要約すると:
- AudioTextToSpeech オブジェクトは、テキスト文字列を音声に変換します。
- AudioDeviceOutput は、プレイヤーがスピーカーやヘッドフォンを通じてオーディオを聞くことを可能にします。
- Wire は、オーディオスピーチジェネレーターの SourceInstance プロパティを使用して接続し、物理ハードウェアデバイスの TargetInstance プロパティを使用して接続します。これにより、オーディオスピーチジェネレーターからプレイヤーの出力デバイスにオーディオストリームを運ぶ橋として機能します。

2Dテキスト読み上げオーディオを再生するには:
- Explorer ウィンドウで、SoundService に移動し、以下を挿入します:
- オーディオスピーチジェネレーターを作成するための AudioTextToSpeech オブジェクト。
- 体験全体で再生されるスピーカーを作成するための AudioDeviceOutput オブジェクト。
- オーディオスピーチジェネレーターからスピーカーへのストリームを接続するための Wire オブジェクト。
- AudioTextToSpeech オブジェクトの Properties ウィンドウで:
- Text を声に出して言わせたい内容に設定します。リクエストごとに300文字の制限があります。
- 使用したい人工音声の番号に VoiceId を設定します。利用可能な音声の完全なリストについては、人工音声のリスト を参照してください。
- オーディオを再生したい振幅の単位に Volume を設定します。
- Wire オブジェクトの Properties ウィンドウで:
- SourceInstance を AudioTextToSpeech に設定して、この特定のオーディオスピーチジェネレーター内でオーディオを再生することを指定します。
- TargetInstance を AudioDeviceOutput に設定して、この特定のスピーカーからオーディオを再生することを指定します。
ここから、スクリプトでTTSオーディオをトリガーできます。TTSオーディオのコードサンプルの参照については、プレイヤー、環境の状態、またはゲームプレイの状態に応じて適応するコンテキスト対応TTSの構成方法を含めて、Add text-to-speech チュートリアルを参照してください。
テキスト読み上げアセットの作成
場合によっては、同じスピーチを何度も再利用したいことがあります。毎回APIを呼び出す代わりに、AssetService:CreateAssetAsync() を使用してゲームで使用するテキスト読み上げオーディオアセットを生成できます。
人工音声のリスト
| VoiceID | 音声の説明 | オーディオ例 |
|---|---|---|
| 1 | イギリス男性 | |
| 2 | イギリス女性 | |
| 3 | アメリカ男性 #1 | |
| 4 | アメリカ女性 #1 | |
| 5 | アメリカ男性 #2 | |
| 6 | アメリカ女性 #2 | |
| 7 | オーストラリア男性 | |
| 8 | オーストラリア女性 | |
| 9 | レトロ音声 #1 | |
| 10 | レトロ音声 #2 | |
| 11 | ナレーター音声 | |
| 101 | スペイン男性 | |
| 102 | スペイン女性 | |
| 201 | ドイツ男性 | |
| 202 | ドイツ女性 | |
| 301 | イタリア男性 | |
| 302 | イタリア女性 | |
| 401 | フランス男性 | |
| 402 | フランス女性 | |
| 501 | 中国語(普通話)男性 | |
| 502 | 中国語(普通話)女性 | |
| 601 | ヒンディー語男性 | |
| 602 | ヒンディー語女性 | |
| 701 | 日本男性 | |
| 702 | 日本女性 | |
| 801 | アラビア男性 | |
| 802 | アラビア女性 | |
| 901 | 韓国男性 | |
| 902 | 韓国女性 | |
| 1001 | ポルトガル男性 | |
| 1002 | ポルトガル女性 |
サポートされている言語
デフォルトでは、Robloxはテキスト入力を自動的にプレイヤーの言語に翻訳し、翻訳されたテキストを適切な音声IDにルーティングします。この仕組みの詳細については、AudioTextToSpeech.AutoLocalize を参照してください。
音声認識
音声認識(STT)は、音声から自動的にテキスト文字列を生成する技術の一形態です。このタイプのオーディオには、3つのオーディオオブジェクトが必要です:
- オーディオをテキストに変換するためのテキストジェネレーター。
- オーディオ入力をキャプチャするためのマイクロフォンのような物理ハードウェアデバイス。
- 入力デバイスからテキストジェネレーターへのオーディオストリームを運ぶワイヤー。
これらのオーディオオブジェクトはすべて連携して、プレイヤーのアクションに応じてSTTテキストを生成します。たとえば、プレイヤーがラップトップで体験をプレイしているときにヘッドセットを着用している場合:
- AudioDeviceInput は、プレイヤーのマイクに話しかけた音声をキャプチャし、オーディオストリームとして取得します。
- AudioSpeechToText は、プレイヤーの音声をテキストに変換します。
- 体験はこのテキストを読み取り、画面に話されたテキストを表示したり、プレイヤーのコマンドでドアを開けたりするなどのアクションを実行します。

体験内で音声認識を実装するには:
- 最新の音声APIの使用を有効にします。
- Explorer ウィンドウで VoiceChatService を選択します。
- Properties ウィンドウで UseAudioApi を Enabled に設定します。
- Explorer ウィンドウで SoundService に移動し、以下を挿入します:
- 音声をキャプチャするための AudioDeviceInput。
- 音声をテキストに変換するための AudioSpeechToText。
- オーディオデバイス入力からSTTインスタンスへのストリームを運ぶための Wire。
- AudioSpeechToText オブジェクトの Properties ウィンドウで、Enabled 状態をオンに設定します。
- Wire オブジェクトの Properties ウィンドウで:
- SourceInstance を新しい AudioDeviceInput に設定して、この特定のオーディオインスタンスからオーディオを運ぶことを指定します。
- TargetInstance を新しい AudioSpeechToText に設定して、この特定のオーディオインスタンスにオーディオを運ぶことを指定します。
- ランタイムでオーディオデバイス入力の Player プロパティをローカルプレイヤーに設定します。audioDeviceInput.Player = game.Players.LocalPlayer とします。これにより、Robloxはどのユーザーのマイクからオーディオをキャプチャするかを指定します。
STTを体験内で設定した後、スクリプトでトリガーできます。コードサンプルの参照については、Add speech-to-text チュートリアルを参照してください。
サポートされている言語
サポートされている言語を有効にするための構成は必要ありません。Robloxはオーディオから話されている言語を自動的に検出し、文字起こしを行います。
STTは以下の言語をサポートしています:
- アラビア語
- 中国語(簡体字)
- 中国語(繁体字)
- 英語
- フランス語
- ドイツ語
- インドネシア語
- イタリア語
- 日本語
- 韓国語
- ポーランド語
- ポルトガル語
- スペイン語
- ロシア語
- トルコ語
- タイ語
- ベトナム語
類似語のフィルタリング
体験内でSTTを実装する際、プレイヤーに言わせたい単語に似た単語をフィルタリングすることで、マッチング精度を向上させたい場合があります。これを行うには、AudioSpeechToText によって認識された単語を既知の単語リストと比較します:
- AudioSpeechToText の Text 出力をサニタイズしてトークン化し、解析および比較できる小文字の文字列のテーブルを作成します。
- 句読点を削除します。
- 文字列全体を小文字に変換します。
- 空白で文字列を分割して単語のテーブルを生成します。
- 比較のために文字列を準備するための候補テーブルを生成します。
- 各参照文字列をサニタイズしてトークン化します。
- これらの処理された単語を別のテーブルに保存します。
- 両方のテーブル内の単語を比較してマッチングし、ターゲットフレーズに近い音声入力を認識します。たとえ小さな変化があっても。
- 簡単なチェックの場合、文字列が完全に一致するか確認します。
- より柔軟なマッチングの場合、"colour" の代わりに "color" を受け入れるようなカスタムロジックを書くか、単語のサブセットをマッチングして類似度スコアを計算します。
オーディオをカスタマイズする
オーディオエフェクトを使用すると、プレイヤーの耳に届く前にオーディオストリームを非破壊的に修正または強化できます。これらのエフェクトを適用して、体験内でオーディオをより没入感のあるものにすることができます。たとえば、AudioEqualizer オブジェクトを使用して雨の音をこもった音にしたり、AudioCompressor オブジェクトを使用して音の最大音量を制御したり、AudioReverb を使用して内部空間での音のよりリアルな反響を追加したりできます。
オーディオエフェクトの構成方法や、オーディオをカスタマイズする前後の比較については、Audio effects を参照してください。


オーディオをトリガーする
スクリプトから Play() を呼び出すことで、正しく配線された AudioPlayer オブジェクトからオーディオをコンテキストに応じてトリガーできます。たとえば、スクリプトをオーディオプレーヤーに親として配置すると、次のようにオーディオアセットをトリガーできます:
local audio = script.Parent
local something = ...
something.SomeEvent:Connect(function()
audio:Play()
end)ゲームプレイのフィードバック、UIの相互作用、ループするバックグラウンドノイズなど、オーディオをトリガーするためのより複雑なコードサンプルについては、Add 2D audio、Add 3D audio、および Add text-to-speech チュートリアルを参照してください。