SoundService
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
Layanan yang menentukan berbagai aspek dari cara Sounds bermain di game. SoundService juga sering digunakan untuk menyimpan SoundGroups meskipun ini bukan wajib bagi SoundGroups untuk bekerja.
Apa yang dapat dilakukan SoundService?
Propperti SoundService seperti SoundService.AmbientReverb , SoundService.DistanceFactor , SoundService.DopplerScale dan 1> Class.SoundService.RolloffScale1> dapat digunakan untuk mengubah cara semua 4> Class.Sound|Sounds4>
Fungsi SoundService:SetListener() memungkinkan pengembang untuk menetapkan lokasi di mana suara di dengar.
SoundService:PlayLocalSound() dapat digunakan untuk memutar suara lokal di mana pun itu berada.
Pengembang mencari tahu lebih lanjut tentang cara kerja suara di Roblox harus mengkonsultasi dokumenasi yang disediakan untuk mesin suara FMOD.
Contoh Kode
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)
Rangkuman
Properti
Latar belakang suara ambient yang digunakan oleh SoundService .
Jumlah studs yang harus dianggap meter oleh SoundService ketika menghitung 3D volume Sound atenuasi.
Item ini menentukan derajat di mana ketinggian 3D Sound objek bervariasi karena efek Doppler.
Mengatur apakah Sound playback dari klien akan di replikasi ke server.
Mengatur seberapa cepat volume 3D Sound berkurang, atau 'roller mati'.
Metode
Getceiver mengembalikan jenis pendengar saat ini SoundService dan apa yang ditetapkan sebagai pendengar.
Memutar Sound lokal, yang berarti suara hanya akan diperhatikan oleh klien yang menelepon fungsi ini, terlepas dari di mana fungsi itu berasal.
Tetapkan pendengar untuk SoundService .
Properti
AmbientReverb
Latar belakang suara ambient yang digunakan oleh SoundService .
The Enum.ReverbType property simulates a range of different lingkungan's impact on sound. Setiap opsi berbeda corrispond dengan prasetel yang tersedia di mesin suara FMOD. Misalnya, ketika AmbientReverb di set ke Hangar, suara akan berengkok secara berbeda untuk meniru berada di ruang tertutup besar.
Mengubah efek AmbientReverb mengubah propperti berikut yang digunakan oleh mesin suara Roblox.
- Waktu penyemburan reverberasi
- Waktu refleksi awal
- Lambat waktu reverbensi relatif terhadap waktu refleksi awal
- Referensi frekuensi tinggi
- Tingkat waktu pudar tengah frekuensi tinggi
- Nilai yang mengontrol kepadatan ekor dalam penyusutan reverb lambat
- Nilai yang mengontrol kepadatan modal dalam penyusutan resonansi terlambat
- Mengacu pada frekuensi rendah
- Tingkat efek ruang relatif di frekuensi rendah
- Tingkat efek ruang relatif tinggi di frekuensi tinggi
- Tingkat refleks awal relatif terhadap efek ruangan
- Tingkat efek ruang di frekuensi tengah
Mereka yang tertarik menemukan lebih banyak tentang prasetel reverb ambient harus melihat dokumen FMOD tentang topik. Bagi kebanyakan pengembang, namet Enum.ReverbType cukup deskriptif untuk dapat menggunakan pengaturan ini tanpa pengetahuan lanjutan.
Contoh Kode
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
Jumlah studs yang harus dianggap meter oleh SoundService ketika menghitung 3D volume Sound atenuasi.
Secara default, DistanceFactor adalah 3.33. Ini berarti, untuk tujuan pengurangan volume, sebuah meter dianggap 3.33 studs. Semakin besar DistanceFactor, semakin banyak suara yang akan menyatu.
local SoundService = game:GetService("SoundService")SoundService.DistanceFactor = 1 -- 1 meter = 1 studSoundService.DistanceFactor = 10 -- 1 meter = 10 studs
Pengembang disarankan hanya mengubah property ini jika game mereka menggunakan skala yang berbeda. Misalnya, ketika menggunakan karakter kustom besar, pengembang mungkin ingin mengurangi DistanceFactor. Di semua kasus lainnya, Sound pengaturan seperti Sound.RollOffMode harus digunakan.
Mereka yang ingin mengetahui lebih lanjut tentang cara 3D suara di Roblox bekerja, harus berkonsultasi dengan dokumenasi FMOD.
DopplerScale
Item ini menentukan derajat di mana ketinggian 3D Sound objek bervariasi karena efek Doppler.
Efek Doppler menjelaskan fenomena di mana frekuensi suara berubah saat sumber dan pengamat suara pindah lebih jauh, atau lebih dekat bersama-sama. Efek Doppler sering dapat dilihat dalam kehidupan nyata, seperti ketika mobil dengan siren berkendara melewati.
Meningkatkan nilai ini mengeksploitasi dampak dari efek Doppler, sementara menurunkannya menyimpannya. Secara default, nilai property ini adalah 1.
local SoundService = game:GetService("SoundService")SoundService.DopplerScale = 1 -- defaultSoundService.DopplerScale = 2 -- exaggerated Doppler effectSoundService.DopplerEffect = 0.5 -- subdued Doppler effect
Catat bahwa efek Doppler tidak mempengaruhi 2D Sounds , ( Sounds tidak berada dalam kelas ke atas BasePart atau 1> Class.Attachment1> ).
Pengembang yang ingin belajar lebih lanjut tentang berbagai pengaturan yang digunakan mesin suara Roblox harus mengkonsultasi dokumen FMOD.
RespectFilteringEnabled
Properti RespectFilteringEnabled menentukan apakah Sound pemutaran di replikasi dari klien ke server, dan oleh karena itu dari server. Dalam kata lain, ketika LocalScript memanggil 1> Class.Sound:Play()1>
RolloffScale
Mengatur seberapa cepat volume 3D Sound berkurang, atau 'roller mati'.
Catatan, property ini hanya berlaku untuk Sounds whose Sound.RollOffMode property is set to 'Inverse' atau 'InverseTapered'. 'Linear' dan 'LinearS
Semakin tinggi RolloffScale, semakin cepat volume suara 3D akan berkurang saat jarak antara pendengar dan suara meningkat.
Secara default, skala terakhir ditetapkan ke 1, yang meniru dunia nyata.
local SoundService = game:GetService("SoundService")SoundService.RolloffScale = 1 -- attenuation simulates real worldSoundService.RolloffScale = 2 -- sound attenuates twice as fast as the real world
Pengembang yang ingin belajar lebih lanjut tentang berbagai pengaturan yang digunakan mesin suara Roblox harus mengkonsultasi dokumen FMOD.
VolumetricAudio
Metode
GetListener
Fungsi ini mengembalikan jenis pendengar saat ini SoundService dan apa yang ditetapkan sebagai pendengar.
Hasil pertama yang dikembalikan adalah Enum.ListenerType dari pendengar, hasil kedua bergantung pada ListenerType:
<tbody><tr><td><code>Enum.ListaType.Kamera</code></td><td>Tidak mengembalikan objek pendengar sebagai <code>Ruang kerja/Kamera saat ini</code> selalu digunakan</td></tr><tr><td><code>Enum.Lista Type.CFrame</code></td><td>Mengembalikan <code>Datatype.CFrame</code> yang digunakan dalam <code>Class.SoundService:SetListener()</code></td></tr><tr><td><code>Enum.ListenType.ObjectPosition</code></td><td>Mengembalikan <code>Class.BasePart</code> yang digunakan dalam <code>Class.SoundService:SetListener()</code></td></tr><tr><td><code>Enum.ListerType.ObjectCFrame</code></td><td>Mengembalikan <code>Class.BasePart</code> yang digunakan dalam <code>Class.SoundService:SetListener()</code></td></tr></tbody>
Jenis Pendengar | Deskripsi |
---|
Pemutar dapat diubah menggunakan 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)
Apa itu pendengar?
Pemutar menentukan titik di mana audio dalam game di 'dengar' oleh pemain. Untuk 3D Sounds (Sounds berdasar pada BasePart atau Attachment ) pemutar mempengaruhi volume dan keseimbangan kiri/kanan suara bermain. Pemutar tidak memiliki pengaruh pada pemutaran suara 2D k
Secara default, pendengar ditetapkan ke Camera Saat Ini. Namun, berbagai jenis pendengar dapat digunakan.
Memberikan nilai
Class.BasePart dapat diakses dengan Enum.ListenerType atau nol.
OpenAttenuationCurveEditor
Parameter
Memberikan nilai
OpenDirectionalCurveEditor
Parameter
Memberikan nilai
PlayLocalSound
Memutar Sound lokalmente, yang berarti bahwa suara hanya akan diperhatikan oleh klien yang menelepon fungsi ini, terlepas dari di mana ia berasal. Fungsi ini paling berguna untuk memutar Sound lokal di klien Studio, misalnya di Script untuk 1> Class.Plugin
Parameter
Memberikan nilai
Contoh Kode
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
Tetapkan pendengar yang digunakan oleh klien.
Parameter pertama adalah Enum.ListenerType dari pendengar, parameter kedua bergantung pada ketikpendengar.
- Camera ListenerType - Tidak mengembalikan objek pendengar sebagai Workspace.CurrentCamera selalu digunakan
- CFrame ListenerType - The CFrame untuk digunakan
- ObjectPosition ListenerType - The BasePart untuk digunakan
- ObjectCFrame ListenerType - The BasePart yang akan digunakan
Pendengar dapat diambil menggunakan 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)
Apa itu pendengar?
Pendengar SoundService menentukan titik dari mana audio dalam permainan di 'dengar' oleh pemain. Untuk 3D Sounds (berasal dari suara yang dianggap sebagai anak dari BasePart atau Attachment ) pendengar tidak memiliki pengaruh pada pemutaran suara 2
Secara default, pendengar ditetapkan ke Camera Saat Ini. Namun, berbagai jenis pendengar dapat digunakan.
Parameter
ListType dari pendengar.
Bergantung pada Enum.ListenerType . BasePart untuk 'ObjekPosisi' atau 'ObjekCFrame', nol untuk 'CFrame', nol untuk 'Camera'.