SoundService

Artık kullanılmayanları göster

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Oluşturulamaz
Hizmet

oyunoynarken Sounds ın oynadığı rolü belirleyen bir hizmet. SoundService ayrıca SoundGroups ı depolamak için kullanılır, ancak bu SoundGroups ın çalışması zorunlu değildir.

SoundService ne yapabilir?

Class.SoundService.AmbientReverb, SoundService.DistanceFactor, SoundService.DopplerScale ve 1>Class.SoundService.RolloffScale1> gibi özellikler SoundService'ın oyun içinde nasıl çalıştığını değiştirebilir.

Class.SoundService:SetListener() fonksiyonu, geliştiricilerin seslerin duyulduğu yeri ayarlar.

SoundService:PlayLocalSound() kullanılarak, sesi ebeveyn olarak nerede olursa olsun yerel olarak çalınabilir.

Roblox'un ses nasıl çalıştığını daha fazla öğrenmek isteyen geliştiriciler, FMOD ses motoru için sağlanan belgeleri incelemelidir.

Kod Örnekleri

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)

Özet

Özellikler

Yöntemler

Özellikler

AmbientReverb

Paralel oku

Class.SoundService tarafından kullanılan çevre sesi ortamı ayarı.

Bu özellik, Enum.ReverbType olarak adlandırılan bu özellik, sesin çeşitli çevresel etkilerinin bir dizi farklı seviyesini simüle eder. Her farklı seçenek, FMOD ses motorunda mevcut bir ön ayar ile uyumludur. Örneğin, AmbientReverb Hangar olarak ayarlandığında, sesin çeşitli çevresel etkilerinin bir

AmbientReverb efektlerini değiştirmek, Roblox'un ses motorunun kullandığı aşağıdaki özellikleri etkiler.

  • Reverberation ömrü
  • Başlangıç ​​yansıtma gecikme süresi
  • İlk yansıtma süresine kıyasla gecikme süresi
  • Yüksek frekans referansı
  • Yüksek frekansın orta frekansına kadar olan süresi
  • Geçmiş çözünme bozulmasındaki eko yoğunluğunu kontrol eden değer
  • Gecikmiş kısa süreli bozulma sırasındaki modül yoğunluğunu kontrol eden değer
  • Düşük frekans referansı
  • Düşük frekanslarda ilgili odurum etkisi seviyesi
  • Yüksek frekanslarda相對 odurma efekti seviyesi
  • Oda etkisiyle ilgili erken yansıma seviyesi
  • Orta frekans seviyesi od etkisi

Çevre rekorlarının daha fazlasını öğrenmek isteyenler, konu hakkındaki FMOD belgesini görmelidir. Ancak, çoğu geliştiricinin önemli olmayan bir şekilde bu ayarı kullanabilmesi için Enum.ReverbType isimleri yeterince açık olmalıdır.

Kod Örnekleri

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

Eklenti Güvenliği
Paralel oku

DistanceFactor

Paralel oku

3D Sound ses hacmi azaltımını SoundService tarafından dikkate alınacak sayıdaki çıkartma sayısı.

Varsayılan olarak, DistanceFactor 3.33'tür. Bu, hacim azaltma amaçları için bir metre 3.33 santimetre olarak kabul edilir. DistanceFactor daha fazla olduğunda, daha fazla yumuşak ses azaltılır.


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

Geliştiriciler, oyunlarının farklı bir ölçeği kullandığı durumda sadece bu özelliği değiştirmelidir. Örneğin, daha büyük özelleştiricileri kullanırken, geliştiriciler DistanceFactor'ı azaltmak isteyebilir. Tüm diğer durumlarda, Sound gibi ayarlar kullanılmalıdır.

Roblox'un 3D sesinin nasıl çalıştığını öğrenmek isteyenler, FMOD belgesini okumalılar.

DopplerScale

Paralel oku

Bu özellik, Doppler efekti nedeniyle bir 3D Sound nesnenin tonu ile ilgili dereceyi belirler.

Doppler efekti, bir sesin tonu sinyal kaynağı ve gözlemcisi daha uzak veya daha yakın bir yere hareket ettiğinde değişen bir fenomeni açıklar. Doppler efekti, genellikle bir arabayı siren ile geçtiğinde görülebilir.

Bu değeri artırmak, Doppler efektinin etkisini artırır, ancak azaltmak onu minimumize eder.Varsayılan olarak, bu özelliğin değeri 1'dir.


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

Doppler etkisi 2D Sounds , ( Sounds not parented to a BasePart or 1> Class.Animation1> ) ile etkisi yoktur.

Roblox'un ses motorunun kullandığı farklı ayarlarda daha fazla bilgi almak isteyen geliştiriciler, FMOD dokümanı nın içindeki bilgileri gözden geçirmelidir.

RespectFilteringEnabled

Paralel oku

RespectFilteringEnabled özelliği, Sound çalıştırılmasının klijden sunucuya, ve dolayısıyla sunucudan kaynaklanan sesi LocalScript çalıştırılır olup olmadığın

RolloffScale

Paralel oku

3D Sound ses hacmi azaltma hızını ayarlar veya 'rol yapar'.

Not, bu özellik sadece Sounds ile ilgili değildir. Sound.RollOffMode özelliğinin Enum.RollOffMode veya 2>Class

RolloffScale, 3D bir sesin sesi alçalma hızını arttırır, sesin çıkışının mesafesi arttıkça.

Varsayılan olarak, kayma ölçeği 1 olarak ayarlandı, bu da gerçek dünyayı simüle eder.


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'un ses motorunun kullandığı farklı ayarlarda daha fazla bilgi almak isteyen geliştiriciler, FMOD dokümanı nın içindeki bilgileri gözden geçirmelidir.

VolumetricAudio

Betiklenemez
Paralel oku

Yöntemler

GetListener

Bu işlev, SoundService mevcut dinleyici tipini ve dinleyici olarak ayarlanan şeyi döndürür.

İlk dönüştürme sonucu, dinleyicinin Enum.ListenerType 'idir, ikinci dönüştürme ListenerType'a bağlıdır:


<tbody>
<tr>
<td><code>Enum.ListenType.Camera</code></td>
<td>Workspace/CurrentCamera kullanıldığında daima bir dinleyici objesi iade etmez</td>
</tr>
<tr>
<td><code>Enum.ListenType.CFrame</code></td>
<td>Class.SoundService:SetListener()'de kullanılan Datatype.CFrame döndürür</td>
</tr>
<tr>
<td><code>Enüm. Dinleyici Türü.ObjektPosition</code></td>
<td>Class.SoundService:SetListener()'de kullanılan Class.BasePartyı iade eder</td>
</tr>
<tr>
<td><code>Enum.ListenType.ObjectCFrame</code></td>
<td>Class.SoundService:SetListener()'de kullanılan Class.BasePartyı iade eder</td>
</tr>
</tbody>
Dinleyici TürüAçıklama

Dinleyici SoundService:SetListener() kullanılarak değiştirilebilir.


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

Bir dinleyici nedir?

Dinleyici, oyun içindeki sesin oyuncu tarafından 'hear' edildiği noktayı belirler. 3D Sounds (Bir BasePar veya Attachment ) için oynayan sesin sesi üzerinde sol/sağ dengesi etkiler. Dinleyiciler 2D seslerin oynatılmasında herhangi bir et

Varsayılan olarak, dinleyici mevcut kameraya ayarlandı. Ancak, bir dizi farklı türde dinleyiciler kullanılabilir.


Dönüşler

Mevcut Enum.ListenerType ve neyi dinleyicinin ayarlandığı. Bağımlı olarak Enum.ListenerType dinleyicisi bir BasePart , bir 1> Datatype.CFrame1> veya hiç olabilir.

OpenAttenuationCurveEditor

void
Eklenti Güvenliği

Parametreler

selectedCurveObjects: Instances

Dönüşler

void

OpenDirectionalCurveEditor

void
Eklenti Güvenliği

Parametreler

selectedCurveObjects: Instances

Dönüşler

void

PlayLocalSound

void

Bu, sesin yalnızca Sound olarak duyulacağını ifade ediyor, yani ses sadece bu işlevi çağıran klien tarafından duyulacaktır, bu da nerede olursa olsun ebeveyni olan Sound için. Bu işlev, Studio'daki bir Script yerel olarak oyn

Parametreler

sound: Instance

Oynanacak Sound olarak.


Dönüşler

void

Kod Örnekleri

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

Kullanıcı tarafından kullanılan dinleyiciyi ayarlar.

İlk parametre, dinleyicinin Enum.ListenerTypeidir, ikinci parametre, dinleyici yazbağlıdır.

  • Kamera ListenerType - Workspace.CurrentCamera kullanıldığında bir izleyici objesi iade etmez
  • CFrame ListenerType - Kullanılacak CFrame
  • ObjectPosition ListenerType - Kullanılacak BasePart
  • ObjectCFrame ListenerType - kullanılacak Temel Parça

Dinleyici SoundService:GetListener() kullanılarak alınabilir:


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

Bir dinleyici nedir?

Class.SoundService dinleyicisi oyunun sesinin oyuncu tarafından 'hear edildiği' noktayı belirler. 3D Sounds (bağlantılı bir BasePart veya Attachment ) dinleyicilerin sesinin oynatma ve sol/sağ dengesini etkiler. Dinleyiciler 2

Varsayılan olarak, dinleyici mevcut kameraya ayarlandı. Ancak, bir dizi farklı türde dinleyiciler kullanılabilir.

Parametreler

listenerType: Enum.ListenerType

Dinleyicinin Enum.ListenerType kısmı.

listener: Tuple

Class.BasePart için 'ObjectPosition' veya 'ObjectCFrame' için 'EnuYapi.听听Type'a bağlı; BasePart için 'CFrame', nil için 'Kamera'.


Dönüşler

void

Etkinlikler