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 对象以连接音频生成器到音频发射器的流。
在 AudioPlayer 对象的 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 设置为您希望使用的人工声音的编号。有关可用声音的完整列表,请参见 人工声音列表。
- 将 Volume 设置为您希望播放音频的幅度单位。
- 在 Wire 对象的 Properties 窗口中:
- 将 SourceInstance 设置为 AudioTextToSpeech,以指定您希望在此特定音频语音生成器中播放音频。
- 将 TargetInstance 设置为 AudioDeviceOutput,以指定您希望从此特定扬声器播放音频。
从这里,您可以通过脚本触发您的 TTS 音频。有关 TTS 音频的代码示例参考,包括如何配置与玩家、环境状态或游戏状态相关的上下文感知 TTS,请参见 添加文本转语音 教程。
人工声音列表
| 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 | 葡萄牙女性 |
语音转文本
语音转文本 (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,以指定您希望电线将音频传输到此特定音频实例。
- 在运行时将音频设备输入的 Player 属性设置为本地玩家,使用 audioDeviceInput.Player = game.Players.LocalPlayer。这告诉 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 音频 和 添加文本转语音 教程。