SoundService
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
Un servicio que determina varios aspectos de cómo Sounds juega en el juego. SoundService también se usa a menudo para almacenar SoundGroups aunque esto no es obligatorio para que SoundGroups funcione.
¿Qué puede hacer SoundService?
Las propiedades de SoundService, como SoundService.AmbientReverb, SoundService.DistanceFactor, SoundService.DopplerScale y 1> Class.SoundService.RolloffScale1>, se pueden usar para cambiar cómo todos los 4> Class.Sound|Sounds4> se reproducen en el
La función SoundService:SetListener() permite a los desarrolladores establecer la posición donde se escuchan los sonidos.
SoundService:PlayLocalSound() se puede usar para reproducir un sonido localmente, independientemente de dónde se encuentra el padre.
Los desarrolladores que desean obtener más información sobre cómo funciona el sonido en Roblox deben consultar la documentación proporcionada para el FMOD sound engine .
Muestras de código
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
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)
Resumen
Propiedades
El ambiente de sonido de ambiente usado por SoundService .
El número de espárragos que se consideran un medidor por SoundService al calcular la atenuación de volumen 3D Sound .
Esta propiedad determina el grado en que la altura de un objeto Sound 3D varía debido al efecto Doppler.
Establece si Sound reproducirá desde un cliente se replicará al servidor.
Establece la rapidez con la que se ajusta el volumen de 3D Sound o 'rolls desactivado'.
Métodos
GetListen返回当前 SoundService 听众类型和设置为听众。
Reproduce un Sound localmente, lo que significa que el sonido solo se escuchará por el cliente que llama a esta función, independientemente de dónde se encuentra el padre.
Establece el oyente para el SoundService .
Propiedades
AmbientReverb
El ambiente de sonido de ambiente usado por SoundService .
La propiedad Enum.ReverbType simula un rango de diferentes impactos entorno, ambienteen el sonido. Cada opción diferente se corresponde con un preajuste disponible en el motor de sonido FMOD. Por ejemplo, cuando AmbientReverb está configurado como Hangar, el sonido se rebotará de manera diferente para simular estar en un espacio grande cerrado.
Cambiar los efectos de AmbientReverb afecta las siguientes propiedades usadas por el motor de sonido de Roblox.
- Tiempo de decadencia de la reutilización
- Tiempo de reutilización de la reflexión inicial
- Tiempo de retraso de lazo de tiempo tardío en relación con la reflexión inicial
- Referencia de alta frecuencia
- Relación de tiempo de decadencia de alta frecuencia a media frecuencia
- Valor que controla la densidad de eco en la decadencia de reutilización tardía
- Valor que controla la densidad modal en la decadencia de reposo tardío
- Referencia de baja frecuencia
- Nivel de efecto de habitación relativo en frecuencias bajas
- Nivel de efecto de habitación relativo en frecuencias altas
- Nivel de reflejos temprano en relación con el efecto de la habitación
- Nivel de efecto de sala en frecuencias medias
Aquellos interesados en encontrar más sobre los preajustes de ambiente de revisión deberían ver la documentación de FMOD en el tema . Para la mayoría de los desarrolladores, sin embargo, los nombres de Enum.ReverbType son lo suficientemente descriptivos para poder usar esta configuración sin conocimientos avanzados.
Muestras de código
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
El número de espárragos que se consideran un medidor por SoundService al calcular la atenuación de volumen 3D Sound .
Por defecto, el DistanceFactor es 3.33. Esto significa que, para los propósitos de la atenuación del volumen, se considera un metro 3.33 studs. Cuanto mayor sea el DistanceFactor, más gradualmente el sonido se atenuará.
local SoundService = game:GetService("SoundService")SoundService.DistanceFactor = 1 -- 1 meter = 1 studSoundService.DistanceFactor = 10 -- 1 meter = 10 studs
A los desarrolladores se les recomienda cambiar esta propiedad solo si su juego usa una redimensionardiferente. Por ejemplo, cuando se usan personajes personalizados más grandes, los desarrolladores pueden querer reducir el Distancia de Factor. En todos los demás casos, Sound configuraciones como Sound.RollOffMode deberían usarse en lugar de esto.
Aquellos que quieren saber más acerca de cómo funciona el sonido 3D en Roblox, deben consultar la documentación FMOD.
DopplerScale
Esta propiedad determina el grado en que la altura de un objeto Sound 3D varía debido al efecto Doppler.
El efecto Doppler describe un fenómeno en el que el tono de un sonido cambia a medida que la fuente y el observador del sonido se alejan o se acercan más. El efecto Doppler a menudo se puede ver en la vida real, como cuando un coche con una sirena pasa.
Aumentar este valor exagera el impacto del efecto Doppler, mientras que reducirlo lo minimiza. Por defecto, el valor de esta propiedad es 1.
local SoundService = game:GetService("SoundService")SoundService.DopplerScale = 1 -- defaultSoundService.DopplerScale = 2 -- exaggerated Doppler effectSoundService.DopplerEffect = 0.5 -- subdued Doppler effect
Nota que el efecto de Doppler no tiene ningún impacto en 2D Sounds , ( Sounds no está asociado a un BasePart o 1> Class.Animation1> )).
Los desarrolladores que deseen aprender más acerca de las diferentes configuraciones que usa el motor de sonido de Roblox deben consultar la documentación FMOD .
RespectFilteringEnabled
La propiedad RespectFilteringEnabled determina si se replica el sonido de Sound desde el cliente al servidor, y por lo tanto desde el servidor. En otras palabras, cuando se llama a un LocalScript para jugar 1> Class.Sound:Play()1> y esta propiedad es 4>verdad
RolloffScale
Establece la rapidez con la que se ajusta el volumen de 3D Sound o 'rolls desactivado'.
Nota, esta propiedad solo se aplica a Sounds cuya propiedad Sound.RollOffMode está configurada como 'Invertida' o 'InvertidaTapered'. 'Linear' y 'LinearSquare' <
Cuanto mayor sea el RolloffScale, más rápido se volumenizará el volumen de un sonido 3D a medida que aumenta la distancia entre el oyente y el sonido.
Por defecto, la escala de desplazamiento está configurada como 1, lo que simula el mundo real.
local SoundService = game:GetService("SoundService")SoundService.RolloffScale = 1 -- attenuation simulates real worldSoundService.RolloffScale = 2 -- sound attenuates twice as fast as the real world
Los desarrolladores que deseen aprender más acerca de las diferentes configuraciones que usa el motor de sonido de Roblox deben consultar la documentación FMOD .
VolumetricAudio
Métodos
GetListener
Esta función SoundService devuelve el tipo de audífono actual y lo que está configurado como audífono.
El primer resultado devuelto es el Enum.ListenerType del oyente, el segundo resultado depende del tipo de oyente:
<tbody><tr><td><code>Tipo de escucha de枚列表</code></td><td>No返回一个听众对象作为 <code>工作区/当前Camera</code> 总是使用</td></tr><tr><td><code>Tipo de marco de escucha de enum.</code></td><td>Devuelve el Tipo de datos.CFrame usado en Class.SoundService:SetExecutor()</td></tr><tr><td><code>Objeto de posición de escucha de枚列表</code></td><td>Regresa el <code>Class.BasePart</code> usado en <code>Class.SoundService:SetListener()</code></td></tr><tr><td><code>Objeto de marco de escucha de枚列听取er tipo.</code></td><td>Regresa el <code>Class.BasePart</code> usado en <code>Class.SoundService:SetListener()</code></td></tr></tbody>
Tipo de escucha | Descripción |
---|
El receptor puede cambiarse usando 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)
¿Qué es un oyente?
El receptor determina el punto desde el que el audio en el juego se está 'okeyendo' por el jugador. Para 3D Sounds (Sounds que están vinculados a un BasePart o Attachment ) el receptor influye en el volumen y equilibrio izquierdo/derecho de un sonido de reproducción. Los receptores no tienen influencia en el volumen de los sonidos 2D ya que no tienen pos
Por defecto, el receptor está configurado para el Camera Actual. Sin embargo, se pueden usar una gama de diferentes tipos de receptores.
Devuelve
El actual Enum.ListenerType y lo que el oyente ha sido configurado. Dependiendo de Enum.ListenerType el oyente puede ser un BasePart o nulo.
OpenAttenuationCurveEditor
Parámetros
Devuelve
OpenDirectionalCurveEditor
Parámetros
Devuelve
PlayLocalSound
Reproduce un Sound localmente, lo que significa que el sonido solo se escuchará por el cliente que llama a esta función, independientemente de dónde se encuentra el padre. Esta función es útil para jugar un Sound localmente en el cliente Studio, por ejemplo en un Script para un 1> Class.Plugin1> .
Parámetros
Devuelve
Muestras de código
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
Establece el receptor usado por el cliente.
El primer parámetro es el Enum.ListenerType del oyente, el segundo parámetro depende del introducirde oyente.
- Tipo de Escucha de Cámara - No devuelve un objeto de escucha como Workspace.CurrentCamera siempre se usa
- CFrame ListenerType - El CFrame para usar
- ObjetoPosition ListenerType - El BasePart para usar
- ObjetoCFrame ListenerType - La BasePart que se usará
El receptor se puede recuperar usando 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)
¿Qué es un oyente?
El SoundService oyente determina el punto desde el que el audio en el juego se está 'okeyendo' por el jugador. Para los sonidos 3D Sounds (sons afiliados a una BasePart o Attachment), el oyente influye en el volumen y el equilibrio izquierdo/derecho de un sonido de reproducción. Los oyentes no t
Por defecto, el receptor está configurado para el Camera Actual. Sin embargo, se pueden usar una gama de diferentes tipos de receptores.
Parámetros
El Enum.ListenerType del oyente.
Dependiendo del Enum.ListenerType``Class.BasePart``Datatype.CFrame 1>CFrame1> 4>Camera4> o nil para 7>Encuentra.Camera7> 9>Encuentra.Cámara9> 1>Encuentra.Cámara1> 4>Encuentra.Cámara4> Enum.ListenerType7> 9>Encuentra.Cámara