🎤

【Roblox】ボイスチャットの音声出力方法を変更する

2024/10/28に公開

はじめに

今回はRobloxでボイスチャット音声をプレース全体に聞こえるようにする方法を紹介します。

注意点
ボイスチャット機能を使用するにはユーザーがアカウント認証を完了している必要があります。

Robloxバージョン:0.638.1.6380615

新規オーディオAPI

ベータ版としてリリースされていた新規オーディオAPIが正式リリースされたので、今回はその機能を使ってプレイヤーのボイスチャット入力の出力をプレイヤーの位置からの3Dサウンドとして出力するのではなく、プレース全体に聞こえるようになる2Dサウンドとして出力するようにします。
今回使う新規オーディオAPIについては詳しい情報はRoblox公式フォーラムのリンクを記事の最後に乗せておきますのでそちらをご確認ください。

準備

①ゲーム設定でマイクを使えるようにします。
ファイル⇒ゲーム設定⇒通信機能⇒マイクをオンにするをアクティブにする⇒保存

②エクスプローラにVoiceChatServiceを追加します。
エクスプローラの開いてる場所で右クリック⇒サービスを表示⇒VoiceChatServiceを選択⇒挿入

③VoiceChatServiceの設定を変更

エクスプローラでVoiceChatServiceを選択⇒プロパティ⇒UseAudioApiをEnabledに変更

Studio上でプレイしてプレイヤーの子オブジェクトとして新規オーディオAPIのインスタンスであるAudioDeviceInputが追加されていれば設定は完了です。

このAudioDeviceInputからプレイヤーがマイクから入力した音声を取得することができます。

実装

スクリプトを作成

準備も完了したのであとはスクリプトからオーディオの出力先を変更します。

local Players = game:GetService("Players")
local VoiceChatService = game:GetService("VoiceChatService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local globalListener = Instance.new("AudioDeviceOutput", game.Workspace)
globalListener.Name = "GlobalAudioListener"

local function connect(src:Instance, trg:Instance)
    local wire = Instance.new("Wire", trg)
    wire.SourceInstance = src
    wire.TargetInstance = trg
end

--プレイヤーが参加したタイミングでVC音声をGlobalListenerに接続
local function onPlayerAdded(player:Player)
    local input = player:WaitForChild("AudioDeviceInput")
    connect(input, globalListener)
end

Players.PlayerAdded:Connect(onPlayerAdded)
--Connect前に入っていたプレイヤーがいたとき用
for _, player in Players:GetPlayers() do
    onPlayerAdded()
end

解説

仕組みとしてはとてもシンプルでプレイヤーが入ってきたときにAudioDeviceInputとWorkspaceに生成したAudioDeviceOutputをWireを使って接続しているだけです。AudioDeviceOutputはプロパティから指定したプレイヤーのスピーカーやヘッドセットなどの物理ハードウェアデバイスに音声を出力します。指定されていない場合はすべてのプレイヤーに音声を出力します。今回の場合はプレイヤーを指定していないのですべてのプレイヤーが音声を聞くことができます。

応用

今回はAudioDeviceOutputを使って音声を出力しましたが、Wireの接続先をAudioEmitterなどに変更することで特定の場所から入力音声を聞こえるようにすることも可能です。またプレイヤーを指定すればパーティVCなどの実装をすることも可能になると思いますのでぜひ活用してみてください。
また、音声をミュートにしたい場合はAudioDeviceInputのMutedをfalseにすることで音声入力を切ることができます。

まとめ

今回は正式リリースされた新規AudioAPIを使ってVCの出力方法を変更してみました。
従来のオーディオよりも詳細な設計をすることが可能になっているのでぜひいろいろと試してみてください!

お読みいただきありがとうございました。

参考

https://devforum.roblox.com/t/new-audio-api-beta-elevate-sound-and-voice-in-your-experiences/2848873

ランド・ホー Roblox開発チーム

Discussion