SoundService

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tidak Dapat Dibuat
Layanan

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

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)

Rangkuman

Properti

Metode

Properti

AmbientReverb

Baca Paralel

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

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

Keamanan Plugin
Baca Paralel

DistanceFactor

Baca Paralel

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

Baca Paralel

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

Baca Paralel

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

Baca Paralel

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

Tidak Dapat Ditulis Skripnya
Baca Paralel

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 PendengarDeskripsi

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

void
Keamanan Plugin

Parameter

selectedCurveObjects: Instances

Memberikan nilai

void

OpenDirectionalCurveEditor

void
Keamanan Plugin

Parameter

selectedCurveObjects: Instances

Memberikan nilai

void

PlayLocalSound

void

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

sound: Instance

The Sound untuk dimainkan.


Memberikan nilai

void

Contoh Kode

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

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

listenerType: Enum.ListenerType

ListType dari pendengar.

listener: Tuple

Bergantung pada Enum.ListenerType . BasePart untuk 'ObjekPosisi' atau 'ObjekCFrame', nol untuk 'CFrame', nol untuk 'Camera'.


Memberikan nilai

void

Acara