SoundService

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

無法建立
服務

一種服務,負責決定遊戲中 Sounds 的播放方式。SoundService 也常常用於儲存 SoundGroups,雖然這不是必須由 SoundGroups 來運行的。

SoundService 可以做什麼?

SoundService 屬性,例如 SoundService.AmbientReverbSoundService.DistanceFactorSoundService.DopplerScale 和 1> Class.SoundService.RolloffScale1> 可以用來變更遊戲中所有 4> Class.Sound|Sounds

Class.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)

概要

屬性

方法

屬性

AmbientReverb

平行讀取

Class.SoundService 使用的環境音效預設設定。

枚數.ReverbType 這個屬性模擬各種環境對音效的影響。 每個不同的選項都對應於 FMOD 音效引擎中可用的預設。 例如,當 AmbientReverb 設為 Hangar 時,音效會以不同的方式重複,以模擬在大型密閉空間中。

改變大環效果會改變 Roblox 音效引擎使用的以下屬性。

  • 反射時間
  • 初始反射延遲時間
  • 反射時間與初始反射時間相對延遲
  • 參考高頻
  • 高頻到中頻衰減時間比率
  • 在延遲減少中控制鞋子密度的值
  • 在延遲減少中控制模式密度的值
  • 參考低頻
  • 低頻度時相對房間效果等級
  • 高頻度時相對房間效果等級
  • 對房間效果的早期反射
  • 房間效果等級在中等頻率

對環境反射預設感興趣的人應該查看FMOD文件在主題。對大多數開發人員來說,Enum.ReverbType 名稱已經足夠描述可以使用此設定無需進行進階知識。

範例程式碼

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

平行讀取

Class.SoundService 當計算 3D Sound 音量減少時,考慮的釋放單位數。

預設值為 3.33,這表示,對音量的減少目的來說,一英尺的長度將被視為 3.33 個單位。距離因素越大,減少的速度就越快。


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

開發人員建議只要變更此屬性,如果他們的遊戲使用不同的比例。例如,使用大型自訂角色時,開發人員可能想減少 Sound。在所有其他情況下,Sound.RollOffMode 設定,例如 Class.Sound.RollOffMode ,應該使用。

想要了解 Roblox 中 3D 音效如何運作的人,應該閱讀 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.Attachment1> 。

開發人員想了解更多關於 Roblox 音效引擎使用的不同設置的文件 FMOD 文件

RespectFilteringEnabled

平行讀取

RespectFilteringEnabled 屬性決定Sound 播放是否從客戶端複製到伺服器,並且從伺服器複製到伺服器。在其他 words,當LocalScript 呼叫1> Class.Sound:Play()1> 並且此

RolloffScale

平行讀取

設定 3D Sound 音量減速速度或「滾動關閉」。

注意,此屬性只適用於 Sounds 的屬性,其 Sound.RollOffMode 已設為 'Inverse' 或 'InverseTapered'。 'Linear

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>枚列聽取器類型Camera</code></td>
<td>不會將聆聽對象作為 <code>工作區/目前攝影機</code> 使用</td>
</tr>
<tr>
<td><code>enum. listenersType.CFrame</code></td>
<td>返回 <code>Datatype.CFrame</code> 用於 <code>Class.SoundService:SetListener()</code></td>
</tr>
<tr>
<td><code>枚列聽取器類型對象位置</code></td>
<td>返回 <code>Class.BasePart</code> 用於 <code>Class.SoundService:SetListener()</code></td>
</tr>
<tr>
<td><code>enum. listenersType.object框架</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 (與基地零件或 Attachment 關聯) 的聽取器會影響音樂的音量和左/右平衡。聽取器對 2D 音效的播放沒有影響,因為它們沒有播放位置。

預設音效處理器設為 CurrentCamera ,但也可以使用不同類型的音效處理器。


返回

目前的 Enum.ListenerType 和聽取器設定。依據 Enum.ListenerType 聽取器可以是一個 BasePart ,或零。

OpenAttenuationCurveEditor

void
外掛程式安全性

參數

selectedCurveObjects: Instances

返回

void

OpenDirectionalCurveEditor

void
外掛程式安全性

參數

selectedCurveObjects: Instances

返回

void

PlayLocalSound

void

在本地播放 Sound,這意味著音效只會在客戶端呼叫此功能,無論它是否屬於任何子類。此功能對於在 Studio 客戶端播放本地 Sound 最常用,例如在 Script 中。

參數

sound: Instance

要播放的 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 - 使用 CFrame 的 聆聽器類型
  • ObjectPosition 列聽器類型 - BasePart 以使用
  • ObjectCFrame 列聽器類型 - 基地零件

聆聽器可以使用 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 (與基地零件或 Attachment 關聯) 的聆聽器會影響音量的左/右平衡。聆聽器對 2D 音效的

預設音效處理器設為 CurrentCamera ,但也可以使用不同類型的音效處理器。

參數

listenerType: Enum.ListenerType

enum. listeners.type 的聆聽器。

listener: Tuple

依賴 Enum.ListenerType 對於 BasePartCFrame 的 1>Datatype.CFrame1> 對於 4>CFrame4> ,零對於 7>Camera7>。


返回

void

活動