SoundService

Veraltete anzeigen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Nicht erstellbar
Dienst

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

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)

Zusammenfassung

Eigenschaften

Methoden

Eigenschaften

AmbientReverb

Parallel lesen

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

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

Parallel lesen
Plugin-Sicherheit

DistanceFactor

Parallel lesen

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 stud
SoundService.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

Parallel lesen

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 -- default
SoundService.DopplerScale = 2 -- exaggerated Doppler effect
SoundService.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

Parallel lesen

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

Parallel lesen

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 world
SoundService.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

Nicht skriptfähig
Parallel lesen

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>
ListenerTypBeschreibung

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

void
Plugin-Sicherheit

Parameter

selectedCurveObjects: Instances

Rückgaben

void

OpenDirectionalCurveEditor

void
Plugin-Sicherheit

Parameter

selectedCurveObjects: Instances

Rückgaben

void

PlayLocalSound

void

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

sound: Instance

Die Sound zu spielenden.


Rückgaben

void

Code-Beispiele

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

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

listenerType: Enum.ListenerType

Der Enum.ListenerType des Spielers.

listener: Tuple

Abhängig von der Enum.ListenerType . BasePart für 'ObjektPosition' oder 'ObjektCFrame', CFrame für 'CFrame', null für 'Kamera'.


Rückgaben

void

Ereignisse