SoundService
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
Ein Dienst, der verschiedene Aspekte davon bestimmt, wie Sounds im Spiel spielt. SoundService wird auch oft verwendet, um SoundGroups zu speichern, obwohl dies für SoundGroups nicht obligatorisch ist, um zu arbeiten.
Was kann SoundService tun?
SoundService-Eigenschaften wie SoundService.AmbientReverb , SoundService.DistanceFactor , SoundService.DopplerScale und 1> Class.SoundService.RolloffScale1> können verwendet werden, um zu ändern, wie alle 4> Class.Sound|Sounds4> im Spiel wiedergegeben werden.
Die Class.SoundService:SetListener() -Funktion ermöglicht es Entwicklern, die Position einzustellen, bei der Sounds abgespielt werden.
SoundService:PlayLocalSound() kann verwendet werden, um einen Sound lokal zu spielen, unabhängig davon, wo er übergeordnet ist.
Entwickler, die mehr darüber erfahren möchten, wie der Sound in Roblox funktioniert, sollten sich auf die Dokumentation für den FMOD-Sound-Engine beziehen.
Code-Beispiele
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)
Zusammenfassung
Eigenschaften
Das Umgebungssound-Umgebung, verwendet von SoundService .
Die Anzahl der Studs, die als Meter von SoundService ermittelt werden, wenn die 3D-Lautstärke Sound ermittelt wird.
Dieses Eigenschaft bestimmt, in welchem Umfang die Tonhöhe eines 3D-Objekts Sound aufgrund des Doppler-Effekts variiert.
Setzt, ob das Sound -Spiel von einem Client auf den Server repliziert wird.
Setzt, wie schnell die Lautstärke von 3D Sound abklingt, oder 'rollt aus'.
Methoden
GetListener gibt den aktuellen SoundService-Listen тип zurück und was als Zuhörer festgelegt ist.
Spielt lokal einen Sound , was bedeutet, dass der Sound nur vom Client gehört werden kann, der diese Funktion aufruft, unabhängig davon, wo er übergeordnet ist.
Setzt den Zuhörer für den SoundService .
Eigenschaften
AmbientReverb
Das Umgebungssound-Umgebung, verwendet von SoundService .
Die Enum.ReverbType diese Eigenschaft simuliert die Auswirkungen einer Reihe von verschiedenen Umgebungseinflüssen auf den Ton. Jede verschiedene Option entspricht einem vordefinierten FMOD-Sound-Engine. Zum Beispiel, wenn AmbientReverb auf Hangar gesetzt wird, der Ton wird anders gesetzt, um in einem großen geschlossenen Platzzu simulieren.
Ändern der Umgebungsvox-Effekte die folgenden Eigenschaften, die von der Roblox-Sound-Engine verwendet werden.
- Verzögerung-Fallenzeit
- Zu Beginn der Reflexionsverzögerung
- Verzögerung der Rückklangzeit im Verhältnis zu der anfänglichen Reflexion
- Hohe Frequenz referenzieren
- Hochfrequenz zu Mid-F频-Verfallszeit-Verh?ltnis
- Wert, der die Echo-Dichte im späten Resonanzverfall steuert
- Wert, der die Modaldichte im späten Resonanzverfall steuert
- Niedrige Frequenz referenzieren
- 相对 Raumeffekt-Niveau bei niedrigen Frequenzen
- 相对 Raumeffekt-Niveau bei hohen Frequenzen
- Early Reflections-Level im Verhältnis zu Room-Effekt
- Raumeffektstufe bei mittleren Frequenzen
Diejenigen, die mehr über Umgebung-Reverb-Präsetze finden möchten, sollten die FMOD-Dokumentation über das Thema sehen. Für die meisten Entwickler ist jedoch die Enum.ReverbType -Namen recht vage, um diesen Einstellung ohne fortgeschrittene Kenntnisse verwenden zu können.
Code-Beispiele
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
Die Anzahl der Studs, die als Meter von SoundService ermittelt werden, wenn die 3D-Lautstärke Sound ermittelt wird.
Standardmäßig ist der DistanceFactor 3.33. Dies bedeutet, für die Zwecke der Volumen-Attenuierung, dass ein Meter 3.33 Studs beträgt. Je größer der DistanceFactor, desto weniger wird der Gesamtsound abgenommen.
local SoundService = game:GetService("SoundService")SoundService.DistanceFactor = 1 -- 1 meter = 1 studSoundService.DistanceFactor = 10 -- 1 meter = 10 studs
Entwickler sollten nur dieses Eigenschaft ändern, wenn ihr Spiel eine andere Größenverhältnisverwendet. Zum Beispiel, wenn Sie größere benutzerdefinierte Charaktere verwenden, möchten Sie den DistanceFactor reduzieren. In allen anderen Fällen sollten Sound Einstellungen wie Sound.RollOffMode verwendet werden.
Diejenigen, die mehr darüber wissen wollen, wie 3D-Sound in Roblox funktioniert, sollten sich an die FMOD-Dokumentation wenden.
DopplerScale
Dieses Eigenschaft bestimmt, in welchem Umfang die Tonhöhe eines 3D-Objekts Sound aufgrund des Doppler-Effekts variiert.
Der Doppler-Effekt beschreibt ein Phänomen, bei dem die Tonhöhe eines Sounds als Quelle und Beobachter des Sounds weiter weg oder näher zusammen bewegt. Der Doppler-Effekt kann oft im wirklichen Leben gesehen werden, z. B. wenn ein Auto mit einer Sirene vorbeifährt.
Dieser Wert erhöht den Einfluss des Doppler-Effekts, während er sinkt, wird er minimiert. Standardmäßig ist der Wert dieser Eigenschaft 1.
local SoundService = game:GetService("SoundService")SoundService.DopplerScale = 1 -- defaultSoundService.DopplerScale = 2 -- exaggerated Doppler effectSoundService.DopplerEffect = 0.5 -- subdued Doppler effect
Beachten Sie, dass der Doppler-Effekt keinen Einfluss auf 2D Sounds , ( Sounds nicht mit einem BasePart oder 1> Class.Animation1> verbunden ist).
Entwickler, die mehr über die verschiedenen Einstellungen, die die Roblox-Sound-Engine verwendet, erfahren möchten, sollten die FMOD-Dokumentation konsultieren.
RespectFilteringEnabled
Die RespectFilteringEnabled -Eigenschaft bestimmt, ob Sound -Wiedergabe vom Client auf den Server repliziert wird, und damit vom Server. In anderen Worten, wenn ein LocalScript -Call 1> Class.Sound:Play()1> und diese Eigenschaft ist 4>wahr4>, der
RolloffScale
Setzt, wie schnell die Lautstärke von 3D Sound abklingt, oder 'rollt aus'.
Beachten Sie, dass diese Eigenschaft nur auf Sounds angewendet, deren Sound.RollOffMode Einstellung auf 'Invertieren' oder 'InvertierenTapered' ist. 'Linear' und 'LinearS
Je höher die RolloffScale, desto schneller wird die Lautstärke eines 3D-Sounds abnehmen, je größer die Entfernung zwischen dem Hörer und dem Sound.
Standardmäßig ist die Abwärtsrolle auf 1 eingestellt, was die reale Welt simuliert.
local SoundService = game:GetService("SoundService")SoundService.RolloffScale = 1 -- attenuation simulates real worldSoundService.RolloffScale = 2 -- sound attenuates twice as fast as the real world
Entwickler, die mehr über die verschiedenen Einstellungen, die die Roblox-Sound-Engine verwendet, erfahren möchten, sollten die FMOD-Dokumentation konsultieren.
VolumetricAudio
Methoden
GetListener
Diese Funktion gibt den SoundService aktuellen Lesertyp zurück und was als Zuhörer festgelegt ist.
Das erste Ergebnis ist die Enum.ListenerType des Spielers, das zweite Ergebnis ist abhängig vom ListenerType:
<tbody><tr><td><code>enum.ListenType.Camera</code></td><td>Gibt kein <code>Listenobjekt zurück, da Workspace/CurrentCamera immer verwendet wird</code></td></tr><tr><td><code>enum.ListenType.CFrame</code></td><td>Kehrt die <code>Datatype.CFrame</code> zurück, die in <code>Class.SoundService:SetListener()</code> verwendet wird</td></tr><tr><td><code>enum.ListenType.ObjectPosition</code></td><td>Kehrt die <code>Class.BasePart</code> zurück, die in <code>Class.SoundService:SetListener()</code> verwendet wird</td></tr><tr><td><code>enum.ListenType.ObjectCFrame</code></td><td>Kehrt die <code>Class.BasePart</code> zurück, die in <code>Class.SoundService:SetListener()</code> verwendet wird</td></tr></tbody>
ListenerTyp | Beschreibung |
---|
Der Empfänger kann mit SoundService:SetListener() geändert werden.
local SoundService = game:GetService("SoundService")SoundService:SetListener(Enum.ListenerType.CFrame, CFrame.new(0, 0, 0))local listenerType, listener = SoundService:GetListener()print(listenerType, listener)
Was ist ein Hörer?
Der Hörer bestimmt den Punkt, von dem das Audio im Spiel vom Spieler:ingehört wird. Für 3D Sounds (Sounds, die Elternteile von einer BasePart oder Attachment haben) wirkt der Hörer auf die Lautstärke und das Left/Right-Verhältnis eines abgespielten Sounds. Hörer haben keine Einfluss auf die Wiedergabe von 2D-Sounds, da sie keine Position der
Standardmäßig ist der Zuhörer auf die aktuelle Kamera eingestellt. jedoch können eine Reihe von verschiedenen Arten von Zuhörern verwendet werden.
Rückgaben
Der aktuelle Enum.ListenerType und was der Hörer eingestellt ist. Abhängig von Enum.ListenerType der Hörer könnte ein BasePart oder null sein.
OpenAttenuationCurveEditor
Parameter
Rückgaben
OpenDirectionalCurveEditor
Parameter
Rückgaben
PlayLocalSound
Spielt lokal einen Sound , was bedeutet, dass der Ton nur vom Client gehört wird, der diese Funktion aufruft, unabhängig davon, wo er übergeordnet ist. Diese Funktion ist am nützlichsten für das Spielen eines Sound lokal im Studio-Client, z. B. in einem Script für ein 2>Class.Plugin2> .
Parameter
Rückgaben
Code-Beispiele
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
Setzt den von dem Client verwendeten Zuhörer.
Der erste Parameter ist der Enum.ListenerType des Players, der zweite Parameter ist abhängig vom eingeben.
- Kamera-ListenerTyp - gibt kein Listener-Objekt zurück, als Workspace.CurrentCamera immer verwendet wird
- CFrame ListenerType - Der CFrame zu verwendende
- ObjectPosition ListenerType - Der BasePart zu verwendende
- ObjectCFrame ListenerType - Die BasePart, die verwendet wird
Der Hörer kann mit SoundService:GetListener() abgerufen werden:
local SoundService = game:GetService("SoundService")SoundService:SetListener(Enum.ListenerType.CFrame, CFrame.new(0, 0, 0))local listenerType, listener = SoundService:GetListener()print(listenerType, listener)
Was ist ein Hörer?
Der SoundService-Hörer bestimmt den Punkt, von dem der Spieler:indas Audio im Spiel hört. Für 3D- Sounds (klingt in einem BasePart oder Attachment ) wirkt der Hörer auf die Lautstärke und das Left/Right-Verhältnis eines spielenden Sounds ein. Hörer haben keine Einfluss auf das Wiedergabeverhalten von 2D-S
Standardmäßig ist der Zuhörer auf die aktuelle Kamera eingestellt. jedoch können eine Reihe von verschiedenen Arten von Zuhörern verwendet werden.
Parameter
Der Enum.ListenerType des Spielers.
Abhängig von der Enum.ListenerType . BasePart für 'ObjektPosition' oder 'ObjektCFrame', CFrame für 'CFrame', null für 'Kamera'.