SoundService

显示已弃用

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

无法创建
服务

一种服务,该如何 Sounds 在游戏中播放。 SoundService 也常用于存储 SoundGroups ,尽管这不是 SoundGroups 的必要组成部分。

SoundService 可以做什么?

SoundService 属性,例如 SoundService.AmbientReverbSoundService.DistanceFactorSoundService.DopplerScale 和 1> Class.SoundService.RolloffScale1> 可以用来改变游戏中所有 4> Class.Sound|Sounds4> 的播放方

Class.SoundService:SetListener() 函数允许开发人员设置声音从哪里听到的位置。

SoundService:PlayLocalSound() 可以用于在任何地方父级的音效上播放声音。

开发人员想了解更多关于声音在 Roblox 如何工作的方法,应该参阅提供给 FMOD 音效引擎 的文档。

代码示例

Dynamic Reverb System

local Players = game:GetService("Players")
local CollectionService = game:GetService("CollectionService")
local SoundService = game:GetService("SoundService")
local localPlayer = Players.LocalPlayer
local reverbTags = {
["reverb_Cave"] = Enum.ReverbType.Cave,
}
-- collect parts and group them by tag
local parts = {}
for reverbTag, reverbType in pairs(reverbTags) do
for _, part in pairs(CollectionService:GetTagged(reverbTag)) do
parts[part] = reverbType
end
end
-- function to check if a position is within a part's extents
local function positionInPart(part, position)
local extents = part.Size / 2
local offset = part.CFrame:PointToObjectSpace(position)
return offset.x < extents.x and offset.y < extents.y and offset.z < extents.z
end
local reverbType = SoundService.AmbientReverb
while true do
task.wait()
if not localPlayer then
return
end
local character = localPlayer.Character
-- default to no reverb
local newReverbType = Enum.ReverbType.NoReverb
if character and character.PrimaryPart then
local position = character.PrimaryPart.Position
-- go through all the indexed parts
for part, type in pairs(parts) do
-- see if the character is within them
if positionInPart(part, position) then
-- if so, pick that reverb type
newReverbType = type
break
end
end
end
-- set the reverb type if it has changed
if newReverbType ~= reverbType then
SoundService.AmbientReverb = newReverbType
reverbType = newReverbType
end
end
Play Local Sound

local ServerScriptService = game:GetService("ServerScriptService")
local SoundService = game:GetService("SoundService")
-- Create custom plugin button
local toolbar = plugin:CreateToolbar("Empty Script Adder")
local newScriptButton = toolbar:CreateButton("Add Script", "Create an empty Script", "rbxassetid://1507949215")
local function playLocalSound(soundId)
local sound = Instance.new("Sound")
sound.SoundId = soundId
SoundService:PlayLocalSound(sound)
sound.Ended:Wait()
sound:Destroy()
end
local function onNewScriptButtonClicked()
-- Create new empty script
local newScript = Instance.new("Script")
newScript.Source = ""
newScript.Parent = ServerScriptService
playLocalSound("rbxassetid://0") -- Insert audio asset ID here
end
newScriptButton.Click:Connect(onNewScriptButtonClicked)

概要

属性

方法

属性

AmbientReverb

读取并联

Class.SoundService 使用的环境音效预设。

枚数.ReverbType 这个属性模拟各种不同的环境对声音的影响。 每个不同的选项都与 FMOD 声音引擎中可用的预设配置相对应。 例如,当 AmbientReverb 设置为 Hangar 时,声音将以不同的方式重复,以模拟在大空间中。

改变 AmbientReverb 效果会影响 Roblox 的声音引擎使用的以下属性。

  • 反射时间
  • 初始反射延迟时间
  • 与初始反射相比的延迟时间
  • 参考高频
  • 高频到中频衰减时间比率
  • 在后期反弹中控制回声密度的值
  • 在后期衰减中控制模态密度的值
  • 参考低频
  • 低频时相对房间效果等级
  • 高频时相对房间效果等级
  • 早期反射级与房间效果
  • 中频效果等级

对于想要了解更多关于环境反射预设的信息,请参阅FMOD文档。 但对于大多数开发人员来说,Enum.ReverbType 名称已经足以使用此设置,无需任何高级知识。

代码示例

Dynamic Reverb System

local Players = game:GetService("Players")
local CollectionService = game:GetService("CollectionService")
local SoundService = game:GetService("SoundService")
local localPlayer = Players.LocalPlayer
local reverbTags = {
["reverb_Cave"] = Enum.ReverbType.Cave,
}
-- collect parts and group them by tag
local parts = {}
for reverbTag, reverbType in pairs(reverbTags) do
for _, part in pairs(CollectionService:GetTagged(reverbTag)) do
parts[part] = reverbType
end
end
-- function to check if a position is within a part's extents
local function positionInPart(part, position)
local extents = part.Size / 2
local offset = part.CFrame:PointToObjectSpace(position)
return offset.x < extents.x and offset.y < extents.y and offset.z < extents.z
end
local reverbType = SoundService.AmbientReverb
while true do
task.wait()
if not localPlayer then
return
end
local character = localPlayer.Character
-- default to no reverb
local newReverbType = Enum.ReverbType.NoReverb
if character and character.PrimaryPart then
local position = character.PrimaryPart.Position
-- go through all the indexed parts
for part, type in pairs(parts) do
-- see if the character is within them
if positionInPart(part, position) then
-- if so, pick that reverb type
newReverbType = type
break
end
end
end
-- set the reverb type if it has changed
if newReverbType ~= reverbType then
SoundService.AmbientReverb = newReverbType
reverbType = newReverbType
end
end

DefaultListenerLocation

读取并联
插件安全性

DistanceFactor

读取并联

当计算 3D Sound 音量估算时,考虑到所有因素的影响。

默认情况下,距离因素是 3.33。这意味着,为了音量抵消目的,计量器将被视为 3.33 格。距离因素越大,抵消的音量就越多。


local SoundService = game:GetService("SoundService")
SoundService.DistanceFactor = 1 -- 1 meter = 1 stud
SoundService.DistanceFactor = 10 -- 1 meter = 10 studs

开发人员建议只要使用不同的缩放,例如使用更大的自定义角色时,开发人员可以更改此属性。例如,使用更大的自定义角色时,开发人员可以减少距离因素。在所有其他情况下,Sound 设置,例如Sound.RollOffMode,应该使用。

想要了解更多关于 Roblox 3D 声音如何工作的人,应该查阅 FMOD 文档

DopplerScale

读取并联

这个属性决定3DSound对象的倾斜度与 Doppler 效果有多少。

谐振效果描述一个现象,在声音的源和观察者离开的情况下,声音的高度会改变,或者离得更近,或者离得更远。 谐振效果通常可以在现实生活中观看,例如当汽车驾驶过去时。

将此值提高可以使 Doppler 效果的影响过度,而将其降低可以使其最小化。 默认情况下,此属性的值为 1。


local SoundService = game:GetService("SoundService")
SoundService.DopplerScale = 1 -- default
SoundService.DopplerScale = 2 -- exaggerated Doppler effect
SoundService.DopplerEffect = 0.5 -- subdued Doppler effect

注意,Doppler效果对2DSounds,(Sounds不是父级别的BasePart或1>Class.Configuration1>).

欲了解更多关于 Roblox 音效引擎使用的不同设置的文档,请参阅 FMOD 文档

RespectFilteringEnabled

读取并联

Class.Sound:Play() 播放从客户端复制到服务器,因此从服务器。在其他 words,当 Sound 调用 LocalScript 并且此属性是 1> true1> ,声音只会在相应客户端上播放。如果属性是 false,其他客

RolloffScale

读取并联

设置 3D Sound 音量减少速度或“滚动关闭”。

注意,此属性仅适用于 Sounds 的子 Sound.RollOffMode 设置为“反向”或“逆向Tapered”。 “Linear”和“LinearSquare”

RolloffScale 越高,3D 音效的音量就越快,因为音效的音量会随着距离从听众到声音增加。

默认情况下,卷轴向下移动设置为 1,这在模拟现实世界中使用。


local SoundService = game:GetService("SoundService")
SoundService.RolloffScale = 1 -- attenuation simulates real world
SoundService.RolloffScale = 2 -- sound attenuates twice as fast as the real world

欲了解更多关于 Roblox 音效引擎使用的不同设置的文档,请参阅 FMOD 文档

VolumetricAudio

不可写入脚本
读取并联

方法

GetListener

此函数返回 SoundService 当前听器类型和已设置为听器。

第一个返回的结果是Enum.ListenerType,其次要结果取决于 ListenerType:


<tbody>
<tr>
<td><code>enum.听取器类型.Camera</code></td>
<td>不会将听众对象作为 <code>工作区/当前相机</code> 总是使用</td>
</tr>
<tr>
<td><code>enum.听取器类型.CFrame</code></td>
<td>返回 <code>Datatype.CFrame</code> 用于 Class.SoundService:SetListener()</td>
</tr>
<tr>
<td><code>枚列听器类型对象位置</code></td>
<td>返回 <code>Class.SoundService:SetListener()</code> 中使用的 Class.BasePart</td>
</tr>
<tr>
<td><code>enum.听取器类型.ObjectCFrame</code></td>
<td>返回 <code>Class.SoundService:SetListener()</code> 中使用的 Class.BasePart</td>
</tr>
</tbody>
听众类型描述

Class.SoundService:SetListener() 可以用来更改听众。


local SoundService = game:GetService("SoundService")
SoundService:SetListener(Enum.ListenerType.CFrame, CFrame.new(0, 0, 0))
local listenerType, listener = SoundService:GetListener()
print(listenerType, listener)

什么是听取器?

听器确定游戏中的音频是否被玩家“听”到。 对于3D Sounds (与基础零件或 Attachment 相关) ,听器会影响音效的音量和左/右平衡。 听器对2D音效的播放没有影响,因为它们没有发射位置。

默认情况下,听器设置为当前相机。 但是,可以使用一系列不同类型的听器。


返回

当前 Enum.ListenerType 和听众设置。 取决于 Enum.ListenerType 的听众可能是一个 BasePart ,一个 1> Datatype.CFrame1> 或零。

OpenAttenuationCurveEditor

void
插件安全性

参数

selectedCurveObjects: Instances

返回

void

OpenDirectionalCurveEditor

void
插件安全性

参数

selectedCurveObjects: Instances

返回

void

PlayLocalSound

void

在本地播放一个 Sound,意味着声音只会由客户端调用此函数,无论它的父级在哪里。此函数对于在 Studio 客户端播放本地 Sound 非常有用,例如在 Script 中。

参数

sound: Instance

要播放的 Sound


返回

void

代码示例

Play Local Sound

local ServerScriptService = game:GetService("ServerScriptService")
local SoundService = game:GetService("SoundService")
-- Create custom plugin button
local toolbar = plugin:CreateToolbar("Empty Script Adder")
local newScriptButton = toolbar:CreateButton("Add Script", "Create an empty Script", "rbxassetid://1507949215")
local function playLocalSound(soundId)
local sound = Instance.new("Sound")
sound.SoundId = soundId
SoundService:PlayLocalSound(sound)
sound.Ended:Wait()
sound:Destroy()
end
local function onNewScriptButtonClicked()
-- Create new empty script
local newScript = Instance.new("Script")
newScript.Source = ""
newScript.Parent = ServerScriptService
playLocalSound("rbxassetid://0") -- Insert audio asset ID here
end
newScriptButton.Click:Connect(onNewScriptButtonClicked)

SetListener

void

设置客户端使用的听器。

第一个参数是听器的 Enum.ListenerType,第二个参数取决于听器输入。

  • Camera ListenerType - 不会将听鉴器对象返回为 Workspace.CurrentCamera 是 always 使用
  • CFrame ListenerType - 使用 CFrame
  • ObjectPosition 列听器类型 - 将被使用的 BasePart
  • ObjectCFrame 列enerType - 用于使用的基础部分

Class.SoundService:Getlistener() 可以用来获取听众:


local SoundService = game:GetService("SoundService")
SoundService:SetListener(Enum.ListenerType.CFrame, CFrame.new(0, 0, 0))
local listenerType, listener = SoundService:GetListener()
print(listenerType, listener)

什么是听取器?

Class.SoundService 听器确定游戏中的音频从哪里被玩家听到。对于 3D Sounds (与基础零件或 Attachment 关联) 的听器,听器会影响音效的音量和左/右平衡。听器对 2D 音效的播放没有影响,因为它们没有发射位置。

默认情况下,听器设置为当前相机。 但是,可以使用一系列不同类型的听器。

参数

listenerType: Enum.ListenerType

enum.听取器类型 的听取器。

listener: Tuple

依赖 Class.BasePart 或 BasePartCFrame 或 1>CFrame1> 或 4>Camera4> 或 7>Camera7> 或 0>Camera0> 或 3>Camera3> 或 6>Camera6> 或 Enum.ListenerType9> 或 2>Camera2> 或 5>Camera5> 或 Enum.ListenerType8> 或 1>Camera1> 或 4>


返回

void

活动