📢

【Roblox】ベータ版のNewAudioAPIで拡声器を作る

2024/06/01に公開2

はじめに

こんにちは、まつさこ です。

今回は、2024年2月にリリースされた Roblox のベータ版 New Audio API を活用して、拡声器を作成する方法を紹介します。

New Audio API とは

2023年のRDCで発表された、Robloxの新しいオーディオシステムです。従来のSoundオブジェクトを置き換える新しいAPIで、より高品質な音声再生が可能になり、より多くのオーディオエフェクトを利用できるようになりました。

RDC23での発表動画はこちら。
https://youtu.be/CcDHFmOGYyY?si=c0Dee8mK0YbW7gj5

AudioDeviceInput AudioDeviceOutput といった音声入力・出力のオブジェクトをプレースに配置し、それらを Wire で接続することで、プレース内での音声入力表現やスピーカー表現が出来るようになりました。

New Audio API がリリースされた際のDevForum記事はこちら

APIを利用する準備

2024年6月時点で、New Audio API はベータ版として提供されています。ベータ版のAPIを利用するためには、まず Roblox Studio の設定を変更する必要があります。

  1. Roblox Studio を開き、左上の File メニューから Beta Features を選択します。

  2. Beta Features ウィンドウが開くので、 New Audio API を有効にします。

Roblox Studio を再起動すると、New Audio API を利用する準備が整います。

また、今回プレイヤーがデバイスのマイクから音声入力を行うため、プレイヤーにマイクの使用許可を求めるための設定も必要です。GameSettings > Communication で Enable Microphone を有効にしてください。

拡声器を作成する

今回は、プレイヤー自身のみにループバックして聴こえる拡声器を作成します。構成はいたってシンプルです。

Enable Microphone が有効になっていることで、Player配下に AudioDeviceInput が自動で配置されます。これを利用して、プレイヤーの音声を拾い、 AudioReverb を介して音声を響かせ、 AudioDeviceOutput に出力することで、プレイヤー自身にループバックして聴こえる拡声器を作成します。

まず、workspace内に以下のようにオブジェクトを追加します。

2つのWireはそれぞれ役割が分かるように、 InputToReverbReverbToOutput と名前をつけておきましょう。
そして、それぞれのWireの SourceInstanceTargetInstance を設定します。

  1. InputToReverbSourceInstance には、後ほどスクリプトでPlayerの AudioDeviceInput を設定しするので何も設定しません。 TargetInstance には、 AudioReverb を指定します。

  1. ReverbToOutputSourceInstance には、 AudioReverb を指定します。 TargetInstance には、 AudioDeviceOutput を指定します。

次に、ローカルスクリプトを作成します。 StarterPlayerScripts にスクリプトを配置し、以下のように記述します。

local LocalPlayer = game:GetService("Players").LocalPlayer

local AudioDeviceInput = LocalPlayer:FindFirstChild("AudioDeviceInput")
local InputToReverb = workspace:WaitForChild("InputToReverb")

InputToReverb.SourceInstance = AudioDeviceInput

プレイヤーがゲームに参加すると、Player配下に AudioDeviceInput が配置されるため、それを取得し、 InputToReverbSourceInstance に設定しています。

そして最後に、 VoiceChatService を追加します。これがないと、プレイヤーの音声が拾えません。
Modelタブの Service から VoiceChatService を追加します。

そして、 VoiceChatService の UseAudioApi プロパティを Enabled に設定します。

これで、実装は完了です。

Roblox Studio で動作確認

Roblx Studio で動作確認をする際は、一つだけ操作が必要です。 Play ボタンをクリックしてゲームを開始した後、 Explorer ウィンドウ内で Players > 自分のプレイヤー名 > AudioDeviceInput を選択し、 Active プロパティを true に設定してください。

こうすることでマイク入力が有効になり、拡声器が動作します。
0.2秒ほど遅れて自身の声が響いて返ってくるのが確認できます!

注意点

Roblox Studioで再生すると、次のようなエラーが出たことがありました。

こちらは、プレースの最大サーバー人数が制限を超えている場合に発生するエラーのようです。公式ドキュメントにもありましたが、ボイスチャットがプレースで有効になるには、プレースの最大人数を50人以内にしないといけないとのことでした。

50人にすることで、上記のエラーは解消されました。

まとめ

今回は、Roblox Studio のベータ版 New Audio API を利用して、プレイヤー自身にループバックして聴こえる拡声器を作成しました。

この仕組みを応用して、トークイベント開催エクスペリエンスを作成しました。

イベントのアーカイブはこちら
https://www.youtube.com/live/4GWoVyL_U5Y?si=ZzeIc8je-PcFwdfU

ぜひ、New Audio API を活用して、よりリッチな音声体験をつくってみてください!

読んでくださりありがとうございました🤗

moze テックブログ

Discussion

B-sanB-san

英語のやり方しかなかったのですごくわかりやすかったです!
質問なんですがこれをみんなに聞こえる拡声器を作るにはどうしたらいいですか?

まつさこまつさこ

読んでくださりありがとうございます!
みんなに聴こえる拡声器を作るには、それぞれのプレイヤーが AudioDeviceOutputを持っている必要があります。そのうえで、 AudioReverbTargetInstance がそのAudioDeviceOutputにつながっている必要があるのですが、ゲーム内にいる全プレイヤーそれぞれのAudioDeviceOutoputと接続するために、人数分のWireが必要になると思われます!