AudioEmitter
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
AudioEmitter ส่งสตรีมเสียงออกสู่โลกมันให้พินเดียว อินพุต ที่สามารถเชื่อมต่อกับโดยหนึ่งหรือมากกว่า Wiresสตรีมใดๆ ที่เชื่อมต่อกับ AudioEmitter จะถูกส่งออกไปยังโลกจากตำแหน่งของผู้ส่งหากผู้ปกครองเป็น Attachment , Camera หรือ PVInstance ตำแหน่งโลกของผู้ปกครองจะถูกใช้หากผู้ปกครองไม่ใช่หนึ่งในคลาสเหล่านี้ AudioEmitter จะเงียบอย่างมีประสิทธิภาพ
AudioEmitters ได้ยินโดย AudioListeners เพื่อที่จะใช้การจำลองพื้นที่ 3D
ตัวอย่างโค้ด
local part1: BasePart = workspace.Speakers.Left
local part2: BasePart = workspace.Speakers.Right
local player: AudioPlayer = workspace.AudioPlayer
local leftEmitter = Instance.new("AudioEmitter")
local rightEmitter = Instance.new("AudioEmitter")
local toLeft = Instance.new("Wire")
local toRight = Instance.new("Wire")
leftEmitter.Parent = part1
rightEmitter.Parent = part2
toLeft.Parent = leftEmitter
toLeft.SourceInstance = player
toLeft.TargetInstance = leftEmitter
toRight.Parent = rightEmitter
toRight.SourceInstance = player
toRight.TargetInstance = rightEmitter
player:Play()
สรุป
คุณสมบัติ
แทนที่วิธีที่ระดับเสียงที่รับรู้ของเสียงที่ปล่อยเปลี่ยนตามมุมระหว่าง AudioListener และ LookVector ที่เกี่ยวข้องกับ AudioEmitter
การควบคุมที่ AudioListeners สามารถได้ยินสิ่งนี้ AudioEmitter ได้
แสดงถึงวิธีที่ระดับเสียงที่รับรู้เปลี่ยนไปตามระยะห่างระหว่าง AudioListener และ AudioEmitter เพิ่มขึ้น
วิธีการ
รับเส้นการลดมุมที่ใช้โดย AudioEmitter หรือโต๊ะว่างหากใช้เส้นโค้งเริ่มต้น
ส่งคืนคอลเลกชันของ Wires ปักหมุด
รับเส้นโค้งการลดระยะทางที่ AudioEmitter กําลังใช้หรือตารางว่างเปล่าหากกําลังใช้เส้นโค้งเริ่มต้น
ตั้งเส้นโค้งการลดองศาที่ AudioEmitter ควรใช้หรือใช้เส้นโค้งคงที่ของปริมาณ 1 หากไม่มีให้
ตั้งเส้นการลดระยะทางที่ AudioEmitter ควรใช้หรือใช้เส้นการลดระยะทางย้อนกลับหากไม่มีให้
อีเวนต์
จะเกิดไฟไหม้เมื่ออินสแตนซ์อื่นถูกเชื่อมต่อกับหรือถูกแยกออกจาก AudioEmitter ผ่าน Wire
คุณสมบัติ
AngleAttenuation
แทนที่เส้นโค้งระดับเสียงตามมุมที่มีผลต่อวิธีที่ AudioListener จะได้ยิน AudioEmitter ขึ้นอยู่กับมุมระหว่างพวกเขาและ LookVector ที่เกี่ยวข้องกับ AudioEmitter
คุณสมบัตินี้เป็นภายในและไม่สามารถเข้าถึงได้โดยสคริปต์; มันมีอยู่เพื่อสนับสนุนการเลียนแบบ ดู SetAngleAttenuation() สำหรับรายละเอียดการใช้งาน
AudioInteractionGroup
หาก AudioEmitter และ AudioListener แบ่งปันกลุ่มการโต้ตอบแล้วผู้ฟังสามารถได้ยินผู้ส่งได้
DistanceAttenuation
แทนที่เส้นโค้งปริมาณตามระยะทางที่มีผลต่อวิธีที่ AudioListener จะได้ยิน AudioEmitter ตามระยะห่างระหว่างพวกเขา
คุณสมบัตินี้เป็นภายในและไม่สามารถเข้าถึงได้โดยสคริปต์; มันมีอยู่เพื่อสนับสนุนการเลียนแบบ ดู SetDistanceAttenuation() สำหรับรายละเอียดการใช้งาน
SimulationFidelity
วิธีการ
GetAngleAttenuation
คืนมุมการจัดเตรียมตารางไปยังปริมาณกุญแจเป็นตัวเลขระหว่าง 0 และ 180 (รวม) ในขณะที่ค่าเป็นตัวเลขระหว่าง 0 และ 1 (รวม) ที่อธิบายวิธีการลดปริมาณขึ้นอยู่กับทิศทางวิธีนี้จะคืนโต๊ะว่างหากใช้เส้นโค้งการลดองศาเริ่มต้น
ส่งค่ากลับ
มุมการแผนที่โต๊ะไปยังปริมาณตามที่อธิบายไว้ข้างต้น
GetConnectedWires
ส่งคืนคอลเลกชันของ Wires ปักหมุดAudioEmitter ปักหมุด"อินพุต" หนึ่งตัว
พารามิเตอร์
ส่งค่ากลับ
GetDistanceAttenuation
คืนระยะการแผนผังตารางไปยังปริมาณกุญแจเป็นตัวเลขที่มากกว่าหรือเท่ากับ 0 ในขณะที่ค่าเป็นตัวเลขระหว่าง 0 และ 1 (รวมถึง) อธิบายวิธีการลดปริมาณในระยะทางวิธีนี้จะคืนโต๊ะว่างเปล่าหากใช้เส้นโค้งการลดระยะทางเริ่มต้น
ส่งค่ากลับ
GetInteractingListeners
ส่งค่ากลับ
SetAngleAttenuation
ตั้งเส้นโค้งระดับเสียงเกินมุมที่มีผลต่อวิธีที่ จะได้ยิน ตามมุมระหว่างพวกเขาและ ที่เกี่ยวข้องกับ โดยอิงจากมุมระหว่างพวกเขาและ
เส้นโค้งจะถูกแทนที่ด้วยกุญแจแผนที่ตารางเพื่อค่าปริมาณคาดว่าคีย์จะเป็นหมายเลขที่ไม่ซ้ำกันระหว่าง 0 และ 180 (รวมถึง) ในขณะที่ค่าคาดว่าจะเป็นหมายเลขระหว่าง 0 และ 1 (รวมถึง)โต๊ะที่มีคู่คีย์-ค่าสูงสุด 400 คู่สนับสนุน
ปริมาณของ AudioEmitter จากมุมมองของ AudioListener ในมุมมองของ a ที่อยู่ในระยะ a จะถูกกำหนดโดยการเลื่อนเชิงเส้นระหว่างระดับปริมาณสำหรับจุดบนโค้งที่มีมุมมองของมุมมองเป็นตรงข้ามและด้านล่างของ หากไม่มีจุดใดต่ำกว่า a หรือไม่มีจุดใดสูงกว่า a ระดับความดังของจุดอื่นจะถูกเลือกโดยทั่วไปแล้ว เส้นโค้งเป็นลำดับจุดที่เชื่อมต่อโดยเส้นตรงและนอกจากจุดสิ้นสุดด้านซ้ายและขวาแล้วเส้นโค้งจะขยายออกไปที่ระดับปริมาณตามลำดับตามลำดับ
ปริมาณนี้จะถูกคูณกับปริมาณจากสัญญาณการลดความถี่ทั้งหมด (รวมถึงสัญญาณที่ได้รับใน AudioListener ) เพื่อให้ได้ความถี่สุดท้าย
หากตารางว่างเปล่าหรือ ค่าเริ่มต้นจะใช้เส้นโค้งการลดองศาด้วยค่าปริมาณคงที่ของ
พารามิเตอร์
ส่งค่ากลับ
SetDistanceAttenuation
ตั้งเส้นโค้งระดับเสียงทางระยะที่มีผลต่อวิธีที่ AudioListener จะได้ยิน AudioEmitter ขึ้นอยู่กับระยะห่างระหว่างพวกเขา
เส้นโค้งจะถูกแทนที่ด้วยกุญแจแผนที่ระยะทางตารางเพื่อค่าปริมาณคาดว่าคีย์จะเป็นหมายเลขที่ไม่ซ้ำกันมากกว่าหรือเท่ากับ 0 ในขณะที่ค่าคาดว่าจะเป็นตัวเลขระหว่าง 0 และ 1 (รวมถึง)โต๊ะที่มีคู่คีย์-ค่าสูงสุด 400 คู่สนับสนุน
ปริมาณของ AudioEmitter จากมุมมองของ AudioListener ที่อยู่ในระยะทาง d ถูกกำหนดโดยการใช้การคำนวณเชิงเส้นระหว่างระดับปริมาณสําหรับจุดบนเส้นโค้งที่มีค่าระยะทางอยู่โดยตรงเหนือและเหนือกว่า dหากไม่มีจุดใดต่ำกว่า d หรือไม่มีจุดใดสูงกว่า d ระดับความดังของจุดอื่นจะถูกเลือกโดยทั่วไปแล้ว เส้นโค้งเป็นลำดับจุดที่เชื่อมต่อโดยเส้นตรง และนอกเหนือจากจุดสิ้นสุดด้านซ้ายและขวาแล้วเส้นโค้งจะขยายออกไปอย่างไม่มีที่สิ้นสุดที่ระดับปริมาณของพวกเขาตามลำดับ
ปริมาณนี้จะถูกคูณกับปริมาณจากสัญญาณการลดความถี่ทั้งหมด (รวมถึงสัญญาณที่ได้รับใน AudioListener ) เพื่อให้ได้ความถี่สุดท้าย
หากตารางว่างเปล่าหรือ ค่าเริ่มต้นจะใช้การลดระยะทางที่กำหนดโดยกฎเชิงตรรกส่วนกลาง ซึ่งกำหนดโดยกฎเชิงตรรกส่วนกลาง
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
local Players = game:GetService("Players")
local emitterPart = Instance.new("Part")
emitterPart.Anchored = true
emitterPart.Position = Vector3.new(0, 0, 0)
emitterPart.Parent = workspace
local emitter: AudioEmitter = Instance.new("AudioEmitter")
emitter.Parent = emitterPart
local curve = {}
curve[10] = 1 -- Within a distance of 10 studs, listeners hear this emitter at full volume
curve[100] = 0.4 -- At a distance of 100 studs, listeners hear this emitter at 40% volume
curve[300] = 0 -- At any distance farther than 300 studs, listeners cannot hear this emitter
emitter:SetDistanceAttenuation(curve)
-- Replicate the rolloff curve from the old voice implementation
-- Default voice without the new audio API uses quadratic rolloff ranging from 7 to 80 studs
local MIN_DISTANCE = 7
local MAX_DISTANCE = 80
local CURVE_STEP_SIZE = 2
local voiceCurve = {}
for i = MIN_DISTANCE, MAX_DISTANCE, CURVE_STEP_SIZE do
voiceCurve[i] = ((i - MIN_DISTANCE) - (MAX_DISTANCE - MIN_DISTANCE)) ^ 2 / (MAX_DISTANCE - MIN_DISTANCE) ^ 2
end
voiceCurve[MAX_DISTANCE] = 0
local function setVoiceCurve(character)
local voiceEmitter: AudioEmitter = character:WaitForChild("AudioEmitter")
voiceEmitter:SetDistanceAttenuation(voiceCurve)
end
for _, player in Players:GetPlayers() do
if player.Character then
setVoiceCurve(player.Character)
end
player.CharacterAdded:Connect(setVoiceCurve)
end
อีเวนต์
WiringChanged
อีเวนต์ที่จะยิงหลังจากที่ Wire เชื่อมต่อหรือถูกตัดการเชื่อมต่อและ Wire ตอนนี้หรือเคยเชื่อมต่อกับพินบน AudioEmitter อินสแตนซ์
พารามิเตอร์
ว่าตัวอย่างได้เชื่อมต่อหรือถูกตัดการเชื่อมต่อ
เข็มบน AudioEmitter ที่เป้าหมาย Wire
The Wire ระหว่าง AudioEmitter และตัวอย่างอื่น