Roblox 的模块化音频对象允许您在体验中对声音和语音聊天进行动态控制。几乎每个音频对象都对应于一个现实世界的音频设备,它们共同工作,像其物理对应物一样捕捉和播放音频。
例如,每个音频对象在概念上都可以归入以下类别:
- 产生音频流的对象,例如音频播放器。
- 消耗音频流的对象,例如音频发射器。
- 修改音频流的对象,例如音频效果。
- 传输音频流的对象,例如电线。
在阅读本指南并了解所有这些音频对象如何协同发声时,您将学习如何准确地从体验中捕捉和传送音乐、音效和人声到玩家,以及反向传送。
播放音频
在您的体验中播放音频时,了解每个可用音频对象的角色是很重要的:
- AudioPlayer 使用设定的音频资产 ID 加载并播放 音频文件。
- AudioEmitter 是一个虚拟扬声器,将音频发射到 3D 环境中。
- AudioListener 是一台虚拟麦克风,从 3D 环境中拾取音频。
- AudioDeviceOutput 是现实世界中的硬件设备,例如扬声器或耳机。
- AudioDeviceInput 是现实世界中的物理麦克风。
- AudioTextToSpeech 对象使用人工人声将 文本转为音频。
- AudioSpeechToText 对象将 口语音频转为文本。
- Wire 传输音频流从一个音频对象到另一个音频对象。
您如何将这些音频对象配对取决于您是想将音频直接发射到玩家的扬声器或耳机,还是从 3D 空间中的对象发射音频。以下部分详细说明了这两种情况。
2D 音频
2D 音频是非定向音,从没有特定位置播放,无论玩家在 3D 空间中的位置或方向如何,它的音量保持不变。这种类型的音频需要三个音频对象:
- 一个音频播放器来产生音频流。
- 一个物理硬件设备在现实世界中播放音频流。
- 一根电线将音频流从音频播放器连接到输出设备。
为了演示如何在 Studio 中配置这些音频对象以进行 2D 音频,以下图表将每个对象与其现实世界音频设备的对应物进行了比较。总结如下:
- AudioPlayer 加载并播放您指定设置的音频资产。
- AudioDeviceOutput 允许玩家通过其扬声器或耳机听到音频。

要播放非定向音频:
- 在 Explorer 窗口中,转到 SoundService 并插入以下内容:
- 一个 AudioPlayer 对象以创建音频源。
- 一个 AudioDeviceOutput 对象以创建一个在整个体验中播放的扬声器。
- 一个 Wire 对象以连接音频播放器和扬声器之间的流。
- 在 AudioPlayer 对象的 Properties 窗口中:
- 将 AssetID 设置为有效音频资产 ID。如果您没有自己的自定义音频,可以在 Creator Store 中找到可免费使用的音频资产。
- 如果您希望音频持续重复,请启用 Looping。
- 将 Volume 设置为要播放音频的振幅单位。
- 在 Wire 对象的 Properties 窗口中:
- 将 SourceInstance 设置为 AudioPlayer,以指定您希望在此特定音频播放器中播放音频。
- 将 TargetInstance 设置为 AudioDeviceOutput,以指定您希望从此特定扬声器播放音频。
从这里,您可以使用脚本触发非定向音频,以便在玩家加入体验时播放,或作为游戏事件或 UI 交互的结果。有关这些用例的代码示例,请参见 添加 2D 音频 教程。
3D 音频
3D 音频是从 3D 空间中特定位置播放的定向声音,音量根据玩家的位置和与声音的方向而增减。这种类型的音频需要六个音频对象:
- 一个音频播放器来产生音频流。
- 一个音频发射器在环境中发射音频流。
- 一个监听器从环境中拾取音频流。
- 一个物理硬件设备在现实世界中播放音频流。
- 两根电线:一根将音频流从音频播放器传输到发射器,另一根将其从监听器传输到输出设备。
为了演示如何在 Studio 中配置这些音频对象以进行 3D 音频,以下图表将每个对象与其现实世界音频设备的对应物进行了比较。总结如下:
- AudioPlayer 加载并播放您指定设置的音频资产。
- AudioEmitter 在 3D 空间中的父对象位置决定了该音频在环境中发射的位置。
- AudioListener 可以从本地相机或玩家角色的 Humanoid.RootPart 中拾取音频,具体取决于您设置的默认监听器位置。
- AudioDeviceOutput 允许玩家通过其扬声器或耳机听到音频。

要播放位置音频:
选择您希望在玩家进入体验时创建的 AudioListener 的位置。
- 在 Explorer 窗口中,选择 SoundService。
- 在 Properties 窗口中,将 ListenerLocation 设置为以下之一:
- Default - 在启用语音聊天的体验中创建并将监听器附加到 Workspace.CurrentCamera。
- None - 不创建监听器。如果您希望通过脚本创建监听器,此选项很有用。
- Character - 创建并将监听器附加到本地玩家的角色。
- Camera - 创建并将监听器附加到 Workspace.CurrentCamera。
在 Explorer 窗口中,转到希望发射音频的 3D 对象,并插入以下内容:
- 一个 AudioPlayer 对象以创建音频源。
- 一个 AudioEmitter 对象以从 3D 对象发射位置音频流。
- 一根 Wire 对象以连接音频生成器和音频发射器之间的流。
在 AudioTextToSpeech 对象的 Properties 窗口中:
- 将 AssetID 设置为有效音频资产 ID。如果您没有自己的自定义音频,可以在 Creator Store 中找到可免费使用的音频资产。
- 启用 Looping 如果您希望音频持续重复。
- 将 Volume 设置为要播放音频的振幅单位。
在 AudioEmitter 对象的 Properties 窗口中,将 DistanceAttenuation 设置为一个音量随距离变化的曲线,确定监听者根据它们之间的距离听到发射器的音量。
例如,以下曲线在监听者距离发射器 50 Studs 时将音频音量对半减少,然后在监听者距离发射器 70 Studs 时急剧降低音量至零。

在 Wire 对象的 Properties 窗口中:
- 将 SourceInstance 设置为 AudioPlayer 以指定您希望在此特定音频播放器中播放音频。
- 将 TargetInstance 设置为 AudioEmitter 以指定您希望从此特定音频发射器播放音频。
从这里,您可以使用脚本触发定向音频,以便在玩家加入体验时播放,或作为游戏事件或 UI 交互的结果。有关这些用例的代码示例,请参见 添加 3D 音频 教程。
文本转语音
文本转语音 (TTS) 是一种辅助技术,可以将文本字符串转换为语音声音,使用人工声音。这种类型的音频需要五个音频对象:
- 一种音频语音生成器将文本加载并转换为音频。
- 一个音频发射器在环境中发射音频流。
- 一个监听器从环境中拾取音频流。
- 一个物理硬件设备在现实世界中播放音频流。
- 对于 2D 音频 - 一根电线将音频流从音频语音生成器传输到输出设备。
- 对于 3D 音频 - 两根电线:一根将音频流从音频语音生成器传输到发射器,另一根将其从监听器传输到输出设备。
您配置这些对象的方式取决于您是希望创建 2D TTS 还是 3D TTS 音频。有关任何流程的更多详细信息,请单击以下选项卡切换。
为了演示如何在 Studio 中配置这些音频对象以进行 2D TTS 音频,以下图表将每个对象与其现实世界音频设备的对应物进行了比较。总结如下:
- AudioTextToSpeech 对象加载并将文本字符串转换为语音声音。
- AudioDeviceOutput 允许玩家通过其扬声器或耳机听到音频。
- Wire 通过其 SourceInstance 属性连接到音频语音生成器,并通过其 TargetInstance 属性连接到物理硬件设备。然后,它充当桥梁,将音频流从音频语音生成器传输到玩家的输出设备。

要播放 2D 文本转语音音频:
- 在 Explorer 窗口中,转到 SoundService 并插入以下内容:
- 一个 AudioTextToSpeech 对象以创建音频语音生成器。
- 一个 AudioDeviceOutput 对象以创建一个在整个体验中播放的扬声器。
- 一根 Wire 对象以连接音频语音生成器和扬声器之间的流。
- 在 AudioTextToSpeech 对象的 Properties 窗口中:
将 Text 设置为您希望语音说的任何内容。每次请求的字符限制为 300 个字符。
将 VoiceId 设置为 1 到 10 之间的数字,具体取决于您希望在以下表格中使用的人工声音。
人工声音列表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 法国女性
将 Volume 设置为您希望播放音频的振幅单位。
- 在 Wire 对象的 Properties 窗口中:
- 将 SourceInstance 设置为 AudioTextToSpeech 以指定您希望在此特定音频语音生成器中播放音频。
- 将 TargetInstance 设置为 AudioDeviceOutput 以指定您希望从此特定扬声器播放音频。
从这里,您可以使用脚本触发 TTS 音频。有关 TTS 音频的代码示例,包含如何配置与玩家、环境状态或游戏状态相关的上下文感知 TTS,请参见 添加文本转语音 教程。
语音转文本
语音转文本 (STT) 是一种技术,可以自动从语音声音生成文本字符串。这种类型的音频需要三个音频对象:
- 一个文本生成器来加载和转换音频为文本。
- 一个像麦克风这样的物理硬件设备来捕捉音频输入。
- 一根电线将音频流从输入设备传输到文本生成器。
所有这些音频对象协同工作,以响应玩家行为生成 STT 文本。例如,如果玩家在玩体验时佩戴耳机:
- AudioDeviceInput 捕获玩家的语音,作为通过麦克风说出的音频流。
- AudioSpeechToText 将玩家的语音转换为文本。
- 体验读取此文本并执行某个操作,例如在屏幕上显示口头文本或在玩家的指令下打开门。

要在您的体验中实现语音转文本:
- 启用最新的语音 API。
- 在 Explorer 窗口中,选择 VoiceChatService。
- 在 Properties 窗口中,将 UseAudioApi 设置为 Enabled。
- 在 Explorer 窗口中,转到 SoundService 并插入以下内容:
- 一个 AudioDeviceInput 用于捕获语音。
- 一个 AudioSpeechToText 用于将语音转换为文本。
- 一根 Wire 用于携带流量从音频设备输入到 STT 实例。
- 在 AudioSpeechToText 对象的 Properties 窗口中,将 Enabled 状态设置为开启。
- 在 Wire 对象的 Properties 窗口中:
- 将 SourceInstance 设置为新的 AudioDeviceInput,以指定您希望电线从此特定音频实例传送音频。
- 将 TargetInstance 设置为新的 AudioSpeechToText,以指定您希望电线将音频传送到此特定音频实例。
- 使用 audioDeviceInput.Player = game.Players.LocalPlayer 在运行时将音频设备输入的 Player 属性设置为本地玩家。这告诉 Roblox 要捕获哪个用户的麦克风音频。
在您的体验中设置 STT 后,您可以使用脚本触发它。有关代码示例的参考,请参见 添加语音转文本 教程。
支持的语言
启用支持的语言不需要额外配置。Roblox 会自动检测音频中的语言并进行转录。
STT 支持以下语言:
- 阿拉伯语
- 中文(简体)
- 中文(繁体)
- 英语
- 法语
- 德语
- 印尼语
- 意大利语
- 日语
- 韩语
- 波兰语
- 葡萄牙语
- 西班牙语
- 俄语
- 土耳其语
- 泰语
- 越南语
过滤相似单词
当您在体验中实现 STT 时,您可能希望通过过滤声响相似的单词来提高匹配的准确性,以便更好地匹配您希望玩家实际说出的单词。为此,您可以将 AudioSpeechToText 所识别的单词与已知的单词列表进行比较:
- 清理并标记 AudioSpeechToText 的 Text 输出,以创建一个可以解析和比较的小写字符串表。
- 删除标点符号。
- 将整个字符串转换为小写。
- 按空格拆分字符串以生成单词表。
- 生成候选表,以准备您的字符串进行比较。
- 清理并标记每个参考字符串。
- 将这些处理过的单词存储在单独的表中。
- 比较并匹配两个表中的单词,以识别与目标短语相近的语音输入,即使它们包含小的变体。
- 对于简单的检查,检查字符串是否完全相同。
- 对于更灵活的匹配,您可以编写自定义逻辑以接受替代词(例如“colour”而不是“color”)或匹配部分单词并计算相似度得分。
自定义音频
音频效果允许您在音频流到达玩家耳朵之前以非破坏性的方式修改或增强音频。您可以应用这些效果使您的音频在体验中更加沉浸,例如使用 AudioEqualizer 对象使雨声显得模糊,使用 AudioCompressor 对象控制声音的最大音量,或使用 AudioReverb 在内部空间中增加更逼真的声音反射。
有关如何配置音频效果的说明,以及您自定义音频前后的并排比较,请参见 音频效果。


触发音频
您可以通过调用 Play() 在正确接线的 AudioPlayer 对象上从脚本中上下文触发音频。例如,如果您将脚本附加到音频播放器,可以通过如下方式触发音频资产:
local audio = script.Parent
local something = ...
something.SomeEvent:Connect(function()
audio:Play()
end)
有关触发音频的更复杂代码示例,例如用于游戏反馈、UI 交互和循环背景噪声,请参见 添加 2D 音频、添加 3D 音频 和 添加文本转语音 教程。