SoundService

แสดงที่เลิกใช้งานแล้ว

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

ไม่สามารถสร้าง
บริการ

บริการที่กำหนดต่างๆ ของวิธีการที่ Sounds เล่นในเกม บริการนี้ยังมักใช้เพื่อเก็บ SoundGroups แม้ว่าจะไม่ได้เป็นสิ่งที่จำเป็นสำหรับ Class.SoundGroup|SoundGroups

SoundService สามารถทำอะไรได้บ้าง?

คุณสมบัติ SoundService เช่น SoundService.AmbientReverb , SoundService.DistanceFactor , SoundService.DopplerScale และ 1> Class.SoundService.RolloffScale1> สามารถใช้เพื่อเปลี่ยนว

คุณสมบัติ SoundService:SetListener() ช่วยให้ผู้พัฒนาตั้งตำแหน่งที่เสียงจะได้ยิน

SoundService:PlayLocalSound() สามารถใช้เพื่อเล่นเสียงในพื้นที่โดยไม่ต้องกังวลว่ามันจะอยู่ในระดับบน

ผู้พัฒนาที่ต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่เสียงทำงานใน Roblox ควรให้คำปรึกษาหนังสือกลสิทธิ์ที่นำเสนอสำหรับ เครื่องยนต์เสียง FMOD

ตัวอย่างโค้ด

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)

สรุป

คุณสมบัติ

  • อ่านพร้อมๆ กัน

    สภาพแวดล้อมเสียงสภาพแวดล้อมที่ใช้โดย SoundService

  • การรักษาความปลอดภัยของปลั๊กอิน
    อ่านพร้อมๆ กัน
  • อ่านพร้อมๆ กัน

    จำนวนช่องเป็นตัวชี้วัดที่จะได้รับการพิจารณาโดย SoundService เมื่อคำนวณ 3D Sound ระดับการลดลง

  • อ่านพร้อมๆ กัน

    สมบัตินี้กำหนดว่าจะปรับแก้ความสูงของวัตถุ 3D Sound ตามผลกระทบของ Doppler

  • อ่านพร้อมๆ กัน

    ตั้งค่าว่าจะเล่นเสียงจากลูกค้า Sound จากเซิร์ฟเวอร์หรือไม่

  • อ่านพร้อมๆ กัน

    ตั้งค่าความเร็วที่เสียไปของเสียง 3D Sound หรือ 'ปิด'

  • ไม่สามารถเขียนสคริปต์
    อ่านพร้อมๆ กัน

วิธีการ

  • GetListen รับคืนประเภทผู้ฟังปัจจุบันของ SoundService และสิ่งที่กำหนดเป็นผู้ฟัง

  • OpenAttenuationCurveEditor(selectedCurveObjects : Instances):void
    การรักษาความปลอดภัยของปลั๊กอิน
  • OpenDirectionalCurveEditor(selectedCurveObjects : Instances):void
    การรักษาความปลอดภัยของปลั๊กอิน
  • PlayLocalSound(sound : Instance):void

    เล่นเสียง Sound ในพื้นที่จัดเก็บข้อมูลท้องถิ่น หมายถึงเสียงเฉพาะกับลูกค้าที่โทรหาคุณสมบัตินี้ ไม่ว่ามันจะอยู่ในระดับโครงสร้างหรือไม่

  • SetListener(listenerType : Enum.ListenerType,listener : Tuple):void

    ตั้งผู้ฟังสำหรับ SoundService

คุณสมบัติ

AmbientReverb

อ่านพร้อมๆ กัน

สภาพแวดล้อมเสียงสภาพแวดล้อมที่ใช้โดย SoundService

Enum.ReverbType สมบัตินี้จะจำลองผลกระทบของสภาพแวดล้อมต่างๆ ต่อเสียง แต่ละตัวเลือกที่แตกต่างกันจะตรงกับลักษณะล่วงหน้าที่มีอยู่ในเครื่องเสียง FMOD

การเปลี่ยนแปลงเอฟเฟกต์ AmbientReverb จะเปลี่ยนแปลงสิ่งต่อไปนี้ที่ใช้โดยเครื่องเสียงของ Roblox

  • เวลาการลดลงของการระเบิด
  • เวลาการสะท้อนแสงเริ่มต้น
  • เวลาลดลงเรื่อย ๆ เมื่อเทียบกับเวลาเริ่มต้น
  • อ้างอิงความถี่สูง
  • อัตราการลดลงของความถี่สูงถึงความถี่ปานกลาง
  • มูลค่าที่ควบคุมความหนาแน่นของเสียงในการลดลงของเสียงในภายหลัง
  • มูลค่าที่ควบคุมความหนาแน่นของโมดัลในการลดลงของ Reverb
  • อ้างอิงความถี่ต่ำ
  • ระดับเอฟเฟกต์ห้องที่เกี่ยวข้องที่ต่ำในความถี่ต่ำ
  • ระดับเอฟเฟกต์ห้องที่เกี่ยวข้องในความถี่สูง
  • ระดับการสะท้อนแสงเริ่มต้นเมื่อเปรียบเทียบกับผลลัพธ์ห้อง
  • ระดับเอฟเฟกต์ห้องในความถี่กลาง

ผู้ที่สนใจต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าเสียงรีเบิร์ทรอบแห่งสภาพแวดล้อมควรดูที่ เอกสาร FMOD เกี่ยวกับหัวข้อนี้ สำหรับผู้พัฒนาส่วนใหญ่นั้นชื่อ

ตัวอย่างโค้ด

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

การรักษาความปลอดภัยของปลั๊กอิน
อ่านพร้อมๆ กัน

DistanceFactor

อ่านพร้อมๆ กัน

จำนวนช่องเป็นตัวชี้วัดที่จะได้รับการพิจารณาโดย SoundService เมื่อคำนวณ 3D Sound ระดับการลดลง

โดยปกติ DistanceFactor คือ 3.33 หมายถึง, สำหรับวัตถุประสงค์ของการปรับปรุงความดัง, เมตรจะถูกพิจารณาว่า 3.33 สตุด ยิ่ง DistanceFactor มากเท่าไหร่, เสียงจะยิ่งปรับปรุง


local SoundService = game:GetService("SoundService")
SoundService.DistanceFactor = 1 -- 1 meter = 1 stud
SoundService.DistanceFactor = 10 -- 1 meter = 10 studs

ผู้พัฒนาจะได้รับคำแนะนำให้เปลี่ยนแป้นนี้เฉพาะในกรณีที่เกมของพวกเขาใช้เครื่องชี้วัดที่แตกต่างกัน เช่นเมื่อใช้ตัวละครใหญ่ขึ้น ผู้พัฒนาอาจต้องการลด DistanceFactor

ผู้ที่ต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของเสียง 3D ใน Roblox ควรอ่าน คู่มือ FMOD

DopplerScale

อ่านพร้อมๆ กัน

สมบัตินี้กำหนดว่าจะปรับแก้ความสูงของวัตถุ 3D Sound ตามผลกระทบของ Doppler

เอฟเฟกต์ Doppler อธิบายประโยชน์ที่เกิดขึ้นเมื่อความถี่ของเสียงเปลี่ยนแปลงไปตามแหล่งและผู้สังเกตเสียงย้ายไปข้างหน้าหรือใกล้ชิดกัน เอฟเฟกต์ Doppler สามารถดูได้ในชีวิตจริงเช่นเมื่อรถยนต์ที่ม

การเพิ่มมูลค่านี้จะเพิ่มผลกระทบของ Doppler โดยเฉลี่ย ในขณะที่การลดมันจะลดมัน โดยปกติมูลค่าของค่านี้คือ 1


local SoundService = game:GetService("SoundService")
SoundService.DopplerScale = 1 -- default
SoundService.DopplerScale = 2 -- exaggerated Doppler effect
SoundService.DopplerEffect = 0.5 -- subdued Doppler effect

หมายเหตุว่า Doppler ไม่มีผลกระทบต่อ 2D Sounds , ( Sounds ไม่เป็นบรรพบุรุษของ BasePart หรือ 1> Class.Configuration1> )

ผู้พัฒนาที่ต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเครื่องมือเสียงที่ใช้งานต่างๆ ของ Roblox ควรอ่าน คู่มือ FMOD

RespectFilteringEnabled

อ่านพร้อมๆ กัน

สมบัติทรัพย์ การเคารพการกรองเปิดใช้งาน ระบุว่า Sound การเล่นจะถูกเล่นจากลูกค้าไปยังเซิร์ฟเวอร์

RolloffScale

อ่านพร้อมๆ กัน

ตั้งค่าความเร็วที่เสียไปของเสียง 3D Sound หรือ 'ปิด'

หมายเหตุ, สมบัตินี้ใช้ได้กับ Sounds ที่มีสมบัติ Sound.RollOffMode

ยิ่งเกณฑ์ RolloffScale สูงเท่าไหร่ ความดังของเสียง 3D ก็จะลดลงเร็วขึ้นเท่านั้นเมื่อระยะห่างระหว่างผู้ฟังและเสียงเพิ่มขึ้น

โดยปกติจะตั้งค่ารอลล์ออฟสเกลเป็น 1 ซึ่งจะเหมือนกับโลกแห่งความเป็นจริง


local SoundService = game:GetService("SoundService")
SoundService.RolloffScale = 1 -- attenuation simulates real world
SoundService.RolloffScale = 2 -- sound attenuates twice as fast as the real world

ผู้พัฒนาที่ต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเครื่องมือเสียงที่ใช้งานต่างๆ ของ Roblox ควรอ่าน คู่มือ FMOD

VolumetricAudio

ไม่สามารถเขียนสคริปต์
อ่านพร้อมๆ กัน

วิธีการ

GetListener

ฟังก์ชันนี้กลับประเภทผู้ฟังปัจจุบันของ SoundService และสิ่งที่ติดตั้งเป็นผู้ฟัง

ผลลัพธ์แรกที่กลับมาคือ Enum.ListenerType ของผู้ฟัง ผลลัพธ์ที่สองขึ้นอยู่กับ ListenerType:


<tbody>
<tr>
<td><code>Enum.ListenType.Camera</code></td>
<td>ไม่ส่งตัวเองผู้ใช้เป็น <code>Workspace/CurrentCamera</code> เสมอ</td>
</tr>
<tr>
<td><code>Enum.ListenType.CFrame</code></td>
<td>กลับ <code>โครงสร้างข้อมูล.CFrame</code> ที่ใช้ใน <code>Class.SoundService:Setlistener()</code></td>
</tr>
<tr>
<td><code>Enum.ListenType.ObjectPosition</code></td>
<td>กลับ <code>Class.BasePart</code> ที่ใช้ใน <code>Class.SoundService:Setlistener()</code></td>
</tr>
<tr>
<td><code>Enum.ListenType.ObjectCFrame</code></td>
<td>กลับ <code>Class.BasePart</code> ที่ใช้ใน <code>Class.SoundService:Setlistener()</code></td>
</tr>
</tbody>
ประเภทผู้ฟังคำอธิบาย

ผู้ฟังสามารถเปลี่ยนแปลงได้โดยใช้ 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)

ลิสต์เป็นอะไร?

ผู้ฟังจะกำหนดจุดที่เสียงในเกมถูก 'ได้ยิน' โดยผู้เล่น สําหรับ 3D Sounds (เสียงที่เกี่ยวข้องกับ BasePart หรือ Attachment ) ผู้ฟังจะ

โดยปกติผู้ฟังจะติดตั้งไว้ที่ Camera ปัจจุบัน อย่างไรก็ตาม สามารถใช้ระยะได้หลากหลายของผู้ฟัง


ส่งค่ากลับ

ปัจจุบัน Enum.ListenerType และสิ่งที่ผู้ฟังได้รับการตั้งค่า ขึ้นอยู่กับ Enum.ListenerType ผู้ฟังอาจเป็น BasePart หรือ nil

OpenAttenuationCurveEditor

void
การรักษาความปลอดภัยของปลั๊กอิน

พารามิเตอร์

selectedCurveObjects: Instances

ส่งค่ากลับ

void

OpenDirectionalCurveEditor

void
การรักษาความปลอดภัยของปลั๊กอิน

พารามิเตอร์

selectedCurveObjects: Instances

ส่งค่ากลับ

void

PlayLocalSound

void

เล่นเสียง Sound ในพื้นที่จัดเก็บข้อมูลท้องถิ่น หมายถึงเสียงเฉพาะกับลูกค้าที่โทรหาคุณ ไม่ว่ามันจะอยู่ในพื้นที่ใด ฟังได้เหมาะ

พารามิเตอร์

sound: Instance

Class.Sound ที่จะเล่น


ส่งค่ากลับ

void

ตัวอย่างโค้ด

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

ตั้งค่าผู้ฟังที่ใช้โดยลูกค้า

ตัวแรกของตัวผู้ฟังคือ Enum.ListenerType ของผู้ฟัง พิมพ์

  • Camera ListenerType - ไม่ส่งตัวละครผู้ฟังเป็น Workspace.CurrentCamera เสมอ
  • CFrame ListenerType - The CFrame ที่จะใช้
  • ObjectPosition ListenerType - BasePart ที่จะใช้
  • ObjectCFrame ListenerType - ส่วนประกอบพื้นฐานที่จะใช้

ผู้ฟังสามารถดึงได้โดยใช้ 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)

ลิสต์เป็นอะไร?

Class.SoundService ผู้ฟังจะกำหนดจุดที่เสียงในเกมถูก "ได้ยิน" โดยผู้เล่น สำหรับ 3D Sounds (เสียงที่เกี่ยวข้องกับ BasePart หรือ Class.Attach

โดยปกติผู้ฟังจะติดตั้งไว้ที่ Camera ปัจจุบัน อย่างไรก็ตาม สามารถใช้ระยะได้หลากหลายของผู้ฟัง

พารามิเตอร์

listenerType: Enum.ListenerType

Menu.ListenType ของผู้ฟัง

listener: Tuple

ขึ้นอยู่กับ Enum.ListenerType สำหรับ 'ObjectPosition' หรือ 'ObjectCFrame' Datatype.CFrame สำหรับ 'CFrame' หรือ nil สำหรับ 'Camera'


ส่งค่ากลับ

void

อีเวนต์