SoundService
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
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
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)
Özet
Özellikler
Class.SoundService tarafından kullanılan çevre sesi ortamı ayarı.
3D Sound ses hacmi azaltımını SoundService tarafından dikkate alınacak sayıdaki çıkartma sayısı.
Bu özellik, Doppler efekti nedeniyle bir 3D Sound nesnenin tonu ile ilgili dereceyi belirler.
Bir Sound oynatıcısının bir klienden oynatmasının sunucuya kopyalanıp kopyalanmayacağını ayarlar.
3D Sound ses hacmi azaltma hızını ayarlar veya 'rol yapar'.
Yöntemler
GetListener, mevcut SoundService dinleyici tipini ve dinleyici olarak ayarlanan şeyi içerir.
Yerel olarak bir Sound oynar, bu da sesin sadece bu işlevi çağıran klien tarafından duyulacağı anlamına gelir.
Class.SoundService için dinleyiciyi ayarlar.
Özellikler
AmbientReverb
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
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 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 studSoundService.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
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 -- defaultSoundService.DopplerScale = 2 -- exaggerated Doppler effectSoundService.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
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
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 worldSoundService.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
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
Parametreler
Dönüşler
OpenDirectionalCurveEditor
Parametreler
Dönüşler
PlayLocalSound
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
Dönüşler
Kod Örnekleri
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
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
Dinleyicinin Enum.ListenerType kısmı.