SoundService
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
บริการที่กำหนดเอฟเฟกต์ต่างๆ ของวิธีที่ Sounds เล่นในประสบการณ์SoundService ยังมักใช้เพื่อเก็บ SoundGroups แม้ว่าจะไม่จําเป็นสําหรับกลุ่มที่จะทํางาน
SoundService คุณสมบัติเช่น AmbientReverb , DistanceFactor , DopplerScale และ RolloffScale สามารถใช้เพื่อเปลี่ยนวิธีการที่ทั้งหมด Sounds เล่นในประสบการณ์ และฟังก์ชัน SetListener() ช่วยให้คุณสามารถตั้งตำแหน่งจากที่เสียงถูกได้ยินได้
ตัวอย่างโค้ด
The code in this sample, when ran from a LocalScript, will change the SoundService.AmbientReverb property of SoundService when the player is inside a BasePart tagged using CollectionService.
To add or remove tags and reverb types, change the entries in the 'reverbTags' table.
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
สรุป
คุณสมบัติ
ตั้งค่าสภาพแวดล้อมเสียงที่ใช้โดย SoundService
กำหนดสถานที่ (ถ้ามี) ที่จะวาง AudioListener โดยค่าเริ่มต้น
จํานวนสตัดที่จะถูกพิจารณาเป็นเมตรโดย SoundService เมื่อคํานวณการลดปริมาณของ Sounds พ่อแม่ไปยัง BasePart หรือ Attachment
องศาที่ระดับของ Sound แตกต่างกันเนื่องจากเอฟเฟกต์ Doppler
กำหนดว่าการเล่นแบบสตรีมจากไคลเอนต์จะถูกส่งไปยังเซิร์ฟเวอร์หรือไม่ Sound
ตั้งค่าความเร็วที่ Sound ปริมาณลดลงอย่างรวดเร็ว
วิธีการ
ส่งคืนประเภทผู้ฟังปัจจุบัน SoundService และสิ่งที่กำหนดเป็นผู้ฟัง
เล่น Sound ท้องถิ่นซึ่งหมายความว่าเสียงจะได้ยินเฉพาะโดยไคลเอนต์ที่เรียกวิธีนี้ไม่ว่าจะถูกส่งไปที่ไหน
ตั้งค่าผู้ฟังสำหรับ SoundService
คุณสมบัติ
AmbientReverb
ตัวเลือกแต่ละ Enum.ReverbType สำหรับคุณสมบัตินี้ตรงกับตัวเลือกล่วงหน้าที่มีอยู่ในเอนจินเสียง FMODตัวอย่างเช่น เมื่อ AmbientReverb ถูกตั้งค่าเป็น Enum.ReverbType.Hangar เสียงจะสะท้อนกลับต่างกันเพื่อจำลองว่าอยู่ในพื้นที่ปิดล้อมขนาดใหญ่
การเปลี่ยนแปลง AmbientReverb มีผลต่อคุณสมบัติต่อไปนี้ที่ใช้โดยเครื่องเสียงของ Roblox
- เวลาการสลายของเสียงสะท้อน
- เวลาความล่าช้าการสะท้อนเบื้องต้น
- เวลาความแลคของการสะท้อนกลับล่าช้าเมื่อเทียบกับการสะท้อนกลับเริ่มแรก
- อ้างอิงความถี่สูง
- อัตราส่วนเวลาการสลายตัวความถี่สูงไปยังความถี่ปานกลาง
- มูลค่าที่ควบคุมความหนาแน่นของเสียงสะท้อนในการลดลงของการสะท้อนแบบปลายเชิง
- มูลค่าที่ควบคุมความหนาแน่นของโมดัลในการลดลงของการสะท้อนเสียงในภายหลัง
- อ้างอิงความถี่ต่ำ
- ระดับผลกระทบห้องสัมพันธ์ในความถี่ต่ำ
- ระดับผลกระทบห้องสัมพันธ์ในความถี่สูง
- ระดับการสะท้อนก่อนเวลาเมื่อเทียบกับผลกระทบของห้อง
- ระดับเอฟเฟกต์ห้องที่ความถี่กลาง
CharacterSoundsUseNewApi
DefaultListenerLocation
กำหนดตำแหน่งที่จะวาง AudioListener โดยค่าเริ่มต้น ดู Enum.ListenerLocation สำหรับคำอธิบายโดยละเอียดของแต่ละตัวเลือก
DistanceFactor
จํานวนสตัดที่จะถูกพิจารณาเป็นเมตรโดย SoundService เมื่อคํานวณการลดปริมาณของ Sounds พ่อแม่ไปยัง BasePart หรือ Attachment
โดยค่าเริ่มต้นคุณสมบัตินี้คือ 3.33 ซึ่งหมายความว่าเมตรถูกพิจารณาเป็น 3.33 สตัดสำหรับวัตถุประสงค์ในการลดปริมาณยิ่ง DistanceFactor มากขึ้นเท่าใด เสียงจะลดลงช้าลงเท่านั้น
ขอแนะนำให้คุณเปลี่ยนค่านี้เฉพาะถ้าประสบการณ์ของคุณใช้เครื่องชั่งที่แตกต่างตัวอย่างเช่น เมื่อใช้ตัวละครที่กำหนดเองขนาดใหญ่ คุณอาจต้องการลด DistanceFactor
DopplerScale
คุณสมบัตินี้กำหนดระดับที่เอียงของ Sound เปลี่ยนแปลงเนื่องจากเอฟเฟกต์ Doppler ซึ่งเป็นปรากฏการณ์ที่ทำให้เอียงของเสียงเปลี่ยนแปลงเมื่อแหล่งและผู้สังเกตการณ์ของเสียงย้ายไปไกลหรือใกล้กันมากขึ้นมีผลเฉพาะกับ Sounds ที่เป็นพ่อของ BasePart หรือ Attachment
การเพิ่มค่านี้จะเน้นผลกระทบของเอฟเฟกต์ Doppler ในขณะที่ลดลงจะลดผลกระทบนั้นค่าเริ่มต้นของคุณสมบัตินี้คือ 1
RespectFilteringEnabled
คุณสมบัตินี้กำหนดว่าการเล่นแบบสะท้อนกลับจากไคลเอนต์ไปยังเซิร์ฟเวอร์และจากเซิร์ฟเวอร์จะถูกสําเนาหรือไม่คือเมื่อ LocalScript เรียก Play() และคุณสมบัตินี้เป็น true เสียงจะเล่นเฉพาะในไคลเอนต์ที่เกี่ยวข้องหากคุณสมบัตินี้เป็น false คลายเครื่องอื่นๆ จะได้ยินเสียงเช่นกัน
ค่าเริ่มต้นคือ true ซึ่งหมายความว่าการกรองเปิดใช้งานแล้ว
RolloffScale
ตั้งค่าความเร็วที่ Sound ปริมาณลดลงอย่างรวดเร็วยิ่ง RolloffScale สูงขึ้นเท่าใด ความดังของเสียงก็จะลดลงเร็วขึ้นเท่านั้น เมื่อระยะห่างระหว่างผู้ฟังและเสียงเพิ่มขึ้น
โปรดทราบว่าคุณสมบัตินี้ใช้กับ Sounds ที่มีคุณสมบัติ RollOffMode ถูกตั้งค่าเป็น Inverse หรือ InverseTapered เท่านั้นLinear และ LinearSquare โหมดใช้โมเดลการลดแสงที่แตกต่างซึ่งไม่ได้รับอิทธิพลจากคุณสมบัตินี้คุณสมบัตินี้ยังไม่มีผลกระทบต่อ Sounds ซึ่งไม่ได้เป็นบุตรของ BasePart หรือ Attachment
VolumetricAudio
วิธีการ
GetListener
วิธีนี้จะคืนประเภทผู้ฟังปัจจุบัน SoundService และสิ่งที่กำหนดเป็นผู้ฟัง ซึ่งหมายถึงจุดที่เสียงในประสบการณ์ "ได้ยิน" โดยผู้เล่นโดยค่าเริ่มต้น ผู้ฟังจะถูกตั้งค่าเป็น Workspace.CurrentCameraผู้ฟังสามารถเปลี่ยนได้โดยใช้ SetListener()
ผลลัพธ์แรกที่ได้รับคือผู้ฟังของ Enum.ListenerType พิมพ์:
<th>คําอธิบาย</th></tr></thead><tbody><tr><td><code>Enum.ListenerType.กล้อง</code></td><td>ไม่ส่งคืนวัตถุผู้ฟังในฐานะ <code>คลาส.Workspace.CurrentCamera|CurrentCamera</code> เนื่องจากใช้เสมอ</td></tr><tr><td><code>Enum.ListenerType.CFrame</code></td><td>คืนค่า <code>Datatype.CFrame</code> ที่ใช้ใน <code>Class.SoundService:SetListener()|SetListener()</code></td></tr><tr><td><code>Enum.ListenerType.ObjectPosition</code></td><td>คืนคลาส <code>Class.BasePart</code> ที่ใช้ใน <code>Class.SoundService:SetListener()|SetListener()</code></td></tr><tr><td><code>Enum.ListenerType.ObjectCFrame</code></td><td>คืนคลาส <code>Class.BasePart</code> ที่ใช้ใน <code>Class.SoundService:SetListener()|SetListener()</code></td></tr></tbody>
ประเภทผู้ฟัง |
---|
ส่งค่ากลับ
ปัจจุบัน Enum.ListenerType และสิ่งที่ผู้ฟังถูกตั้งค่าไว้ ผู้ฟังสามารถเป็น BasePart , CFrame หรือ nil ได้
OpenAttenuationCurveEditor
พารามิเตอร์
ส่งค่ากลับ
OpenDirectionalCurveEditor
พารามิเตอร์
ส่งค่ากลับ
PlayLocalSound
เล่น Sound ท้องถิ่นซึ่งหมายความว่าเสียงจะได้ยินเฉพาะโดยไคลเอนต์ที่เรียกวิธีนี้ไม่ว่าจะถูกส่งไปที่ไหนวิธีนี้มีประโยชน์มากที่สุดสำหรับการเล่น Sound ในท้องถิ่นบนไคลเอนต์ Studio ตัวอย่างเช่นใน Script สำหรับ Plugin
พารามิเตอร์
ส่งค่ากลับ
SetListener
ตั้งค่าผู้ฟังที่ใช้โดยไคลเอนต์ ซึ่งหมายความว่าจุดที่เสียงในประสบการณ์ "ได้ยิน" โดยผู้เล่นสำหรับ Sounds ผู้ปกครองไปยัง BasePart หรือ Attachment ผู้ฟังมีอิทธิพลต่อระดับเสียงและความสมดุลซ้าย/ขวาของเสียงที่เล่น
โดยค่าเริ่มต้น ผู้ฟังจะถูกตั้งค่าเป็น Workspace.CurrentCamera แต่สามารถใช้ช่วงประเภทผู้ฟังที่แตกต่างกันได้
ผู้ฟังสามารถดึงได้โดยใช้ GetListener()
พารามิเตอร์
The Enum.ListenerType ของผู้ฟัง
ขึ้นอยู่กับ Enum.ListenerType .ใช้ BasePart สำหรับ Enum.ListenerType.ObjectPosition หรือ Enum.ListenerType.ObjectCFrame , CFrame สำหรับ Enum.ListenerType.CFrame หรือ nil สำหรับ Enum.ListenerType.Camera .