SoundService
*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.
Một dịch vụ xác định các khía cạnh khác nhau của cách Sounds chơi trong trò chơi. SoundService cũng thường được sử dụng để lưu trữ SoundGroups mặc dù điều này không bắt buộc cho SoundGroups để
Âm thanhService có thể làm gì?
Các thuộc tính SoundService như SoundService.AmbientReverb , SoundService.DistanceFactor , SoundService.DopplerScale và 1> Class.SoundService.RolloffScale1> có thể được sử dụng để thay đổi c
Hàm SoundService:SetListener() cho phép các nhà phát triển cài đặt vị trí mà âm thanh được nghe từ.
SoundService:PlayLocalSound() có thể được sử dụng để phát một âm thanh ở địa phương bất kể nó đang ở đâu.
Những nhà phát triển muốn tìm hiểu thêm về cách âm thanh hoạt động trong Roblox nên tham khảo tài liệu cung cấp cho FMOD sound engine .
Mẫu mã
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)
Tóm Tắt
Thuộc Tính
Môi trường âm thanh môi trường được sử dụng bởi SoundService .
Số lượng các mũi tương được xem là một thước đo bởi SoundService khi tính toán 3D Sound độ giảm giá.
Điều này xác định mức độ mà độ cao của 3D Sound đối tượng biến thiên theo hiệu ứng Doppler.
Đặt whether Sound playback từ một client sẽ replicate to máy chủ.
Điều chỉnh tốc độ bù giảm âm lượng 3D Sound hoặc "cuộn tắt".
Phương Pháp
Getceiver trả lại loại người lắng nghe hiện tại của SoundService và những gì đã được thiết lập là người lắng nghe.
Chơi một Sound ở địa phương, có nghĩa là âm thanh chỉ được nghe bởi khách hàng gọi chức năng này, bất kể nó được gọi ở đâu.
Đặt người nghe cho SoundService .
Thuộc Tính
AmbientReverb
Môi trường âm thanh môi trường được sử dụng bởi SoundService .
Các Enum.ReverbType này tái tạo một loạt các tác động của môi trường đối với âm thanh. Mỗi lựa chọn khác nhau tương ứng với một cấu hình có sẵn trong FMOD engine âm thanh. Ví dụ, khi AmbientReverb được đặt về Hangar, âm thanh sẽ
Đổi các hiệu ứng AmbientReverb sử dụng các thuộc tính sau đây được sử dụng bởi máy chủ âm thanh của Roblox.
- Thời gian phân hủy hồi chuyển
- Thời gian phản xạ ban đầu
- Thời gian trễ độ giải phản xạ muộn so với thời gian phản xạ ban đầu
- Tham khảo cao tần
- Tỷ lệ thời gian phân hủy từ cao tới trung bình
- Giá trị điều khiển độ dày eo hồi trong sự suy giảm độ lượng tụng
- Giá trị điều khiển dichte hóa trong độ giảm dần sau
- Tham khảo thấp tần
- Độ hiệu suất của phòng khi đạt tần số thấp
- Độ hiệu suất của phòng khi đạt đến tần số cao
- Đánh giá sớm đối với mức phản xạ so với hiệu ứng phòng
- Cấp độ hiệu ứng phòng ở tần số trung bình
Những người quan tâm đến việc tìm hiểu thêm về các cấu hình trở lại môi trường thiết lập nên xem tài liệu FMOD documentation on the topic . Đối với hầu hết các nhà phát triển tuy nhiên, những cái tên Enum.ReverbType là đủ để có thể sử dụng cài đặt này m
Mẫu mã
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
Số lượng các mũi tương được xem là một thước đo bởi SoundService khi tính toán 3D Sound độ giảm giá.
Bởi mặc định, DistanceFactor là 3.33. Điều này có nghĩa là, cho mục đích của hạch chất béo, một thước đo được xem như 3.33 studs. Theo càng lớn DistanceFactor, âm thanh càng mờ dần.
local SoundService = game:GetService("SoundService")SoundService.DistanceFactor = 1 -- 1 meter = 1 studSoundService.DistanceFactor = 10 -- 1 meter = 10 studs
Những nhà phát triển nên chỉ xem xét thay đổi thuộc tính này nếu trò chơi của họ sử dụng một thước đo khác. Ví dụ, khi sử dụng những nhân vật tùy chỉnh lớn hơn, nhà phát triển có thể muốn giảm DistanceFactor. Trong tất cả các trường hợp khác,
Những người muốn tìm hiểu thêm về cách âm thanh 3D trong Roblox hoạt động, nên tham khảo tài liệu FMOD documentation .
DopplerScale
Điều này xác định mức độ mà độ cao của 3D Sound đối tượng biến thiên theo hiệu ứng Doppler.
Hiệu ứng Doppler mô tả một hiện tượng nơi khi âm thanh nguồn và nhà quan sát của âm thanh di chuyển xa hơn hoặc gần hơn. Hiệu ứng Doppler thường được thấy trong cuộc sống thực, chẳng hạn như khi một chiếc xe với một cái báo hiệu lái xe qua.
Tăng giá trị này làm tăng tác động của hiệu ứng Doppler, trong khi giảm nó làm giảm nó. Bởi mặc định, giá trị của thuộc tính này là 1.
local SoundService = game:GetService("SoundService")SoundService.DopplerScale = 1 -- defaultSoundService.DopplerScale = 2 -- exaggerated Doppler effectSoundService.DopplerEffect = 0.5 -- subdued Doppler effect
Lưu ý rằng hiệu ứng Doppler không có ảnh hưởng đến 2D Sounds , ( Sounds không phản ánh đến một BasePart hoặc 1> Class.Configuration1> )).
Những nhà phát triển muốn tìm hiểu thêm về các cài đặt âm thanh khác nhau mà máy chủ Robloxsử dụng nên tham khảo tài liệu FMOD documentation.
RespectFilteringEnabled
Thuộc tính RespectFilteringEnabled xác định có phải Sound được sao chép từ client đến server, và do đó từ máy chủ. Trong những lời khác, khi một LocalScript gọ
RolloffScale
Điều chỉnh tốc độ bù giảm âm lượng 3D Sound hoặc "cuộn tắt".
Lưu ý, thuộc tính này chỉ áp dụng cho Sounds whose Sound.RollOffMode property is set to 'Inverse' hoặc '
Càng cao RolloffScale, âm lượng của một điểm 3D sẽ giảm càng nhanh khi khoảng cách giữa người lắng nghe và âm thanh tăng lên.
Bởi mặc định, thước đo cuộn dãi được đặt để 1, which simulates the thế giới thực tế.
local SoundService = game:GetService("SoundService")SoundService.RolloffScale = 1 -- attenuation simulates real worldSoundService.RolloffScale = 2 -- sound attenuates twice as fast as the real world
Những nhà phát triển muốn tìm hiểu thêm về các cài đặt âm thanh khác nhau mà máy chủ Robloxsử dụng nên tham khảo tài liệu FMOD documentation.
VolumetricAudio
Phương Pháp
GetListener
Hàm này trả lại loại người nghe hiện tại của SoundService và những gì đã được thiết lập là người nghe.
Kết quả đầu tiên trả lại là Enum.ListenerType của người nghe, kết quả thứ hai phụ thuộc vào ListenerType:
<tbody><tr><td><code>Enum.ListenType.Camera</code></td><td>Không trả lại một đối tượng người lắng nghe như <code>Workspace / Camera hiện tại</code> luôn được sử dụng</td></tr><tr><td><code>Enum.ListenType.CFrame</code></td><td>Trả lại <code>Datatype.CFrame</code> đã được sử dụng trong <code>Class.SoundService:Setlistener()</code></td></tr><tr><td><code>ENSEMBLE.LISTNER.TYPE.OBJECTPosition</code></td><td>Điều khiển trả lại <code>Class.BasePart</code> đã được sử dụng trong <code>Class.SoundService:Setlistener()</code></td></tr><tr><td><code>Enum.ListenType.ObjectCFrame</code></td><td>Điều khiển trả lại <code>Class.BasePart</code> đã được sử dụng trong <code>Class.SoundService:Setlistener()</code></td></tr></tbody>
Kiểu người lắng nghe | Mô tả |
---|
Người nghe có thể được thay đổi bằng cách sử dụng 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)
Một người lắng nghe là gì?
Người nghe xác định điểm mà âm thanh trong trò chơi đang được 'nghe' bởi người chơi. Đối với 3D Sounds (có nguồn gốc là BasePart hoặc Attachment ) người nghe không có ảnh hư
Mặc định, người nghe được đặt vào Camera hiện tại. Tuy nhiên, một loạt các loại người nghe khác nhau có thể được sử dụng.
Lợi Nhuận
Hiện tại Enum.ListenerType và những gì người nghe đã được thiết lập. Tùy thuộc vào Enum.ListenerType người nghe có thể là một BasePart , một 1> Datatype.CFrame1> hoặc nil.
OpenAttenuationCurveEditor
Tham Số
Lợi Nhuận
OpenDirectionalCurveEditor
Tham Số
Lợi Nhuận
PlayLocalSound
Chơi một Sound ở địa phương, có nghĩa là âm thanh sẽ chỉ được nghe bởi khách hàng gọi chức năng này, bất kể nó được gắn với nơi nào. Đây là công cụ hữu ích nhất để chơi một
Tham Số
Lợi Nhuận
Mẫu mã
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
Đặt người nghe được sử dụng bởi khách hàng.
Đối tượng đầu tiên là Entity. listenersType của người nghe, đối tượng thứ hai phụ thuộc vào đánh máyngười nghe.
- Camera ListenerType - Không trả lại một đối tượng người lắng nghe như Workspace.CurrentCamera luôn được sử dụng
- CFrame ListenerType - The CFrame để sử dụng
- ObjectPosition ListenerType - The BasePart để sử dụng
- ObjectCFrame ListenerType - The BasePart để sử dụng
Người nghe có thể được lấy lại bằng cách sử dụng 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)
Một người lắng nghe là gì?
Người lắng nghe SoundService xác định điểm mà âm thanh trong trò chơi đang được 'nghe' bởi người chơi. Đối với 3D Sounds (âm thanh được gắn với một BasePart hoặc
Mặc định, người nghe được đặt vào Camera hiện tại. Tuy nhiên, một loạt các loại người nghe khác nhau có thể được sử dụng.
Tham Số
The Enum.ListenerType of the listeners.
Phụ thuộc vào Enum.ListenerType đối với 'ObjectPosition' hoặc 'ObjectCFrame', BasePart đối với 'CFrame', nil đối với 'Camera'.