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 的音頻模擬應該有多詳細。
方法
獲得 AudioEmitter 使用的角度減衰曲線,或使用預設曲線的空表。
返回連接到指定頂置頂的一個 Wires 陣列。
獲得 AudioEmitter 使用的距離衰減曲線,或使用預設曲線的空表。
設置 AudioEmitter 應使用的角度減衰曲線,或使用恆定音量曲線 1 如果沒有提供。
設定 AudioEmitter 應使用的距離衰減曲線,或在沒有提供時使用逆轉衰減曲線。
活動
當另一個實例連接到或與 AudioEmitter 通過 Wire 分開時,發生火災。
屬性
AngleAttenuation
代表一個角度過大的音量曲線,會影響 AudioListener 如何聽到 AudioEmitter 的音量,取決於它們之間的角度和與 LookVector 相關的 AudioEmitter 。
此屬性是內部的,無法由腳本存取;它存在於支持複製的目的。請參閱 SetAngleAttenuation() 獲得使用細節。
DistanceAttenuation
代表一個在距離上的曲線,會影響 AudioListener 如何聽到 AudioEmitter 的音量,根據彼此之間的距離。
此屬性是內部的,無法由腳本存取;它存在於支持複製的目的。請參閱 SetDistanceAttenuation() 獲得使用細節。
SimulationFidelity
控制音響模擬的細節程度對於此 AudioEmitter , 類似於 MeshPart.CollisionFidelity 或 MeshPart.RenderFidelity 。
AudioEmitters 和 AudioListeners 不同意必要的細節程度的選項將使用較少的細節程度。
方法
GetAngleAttenuation
返回表映射角度到量。鑰匙是 0 和 180 (包括在內)之間的數字,而值是 0 和 1 (包括在內)之間的數字,用於描述音量如何依據方向減輕。此方法如果使用預設角度減輕曲線,將返回空表;如果使用預設角度減輕曲線,則返回空表。
返回
表映射角度到音量,如上述所述。
GetDistanceAttenuation
返回表映射距離到音量。鑰匙是大於或等於 0 的數字,而值是介於 0 和 1(包括)之間的數字,用於描述音量在距離上減弱。此方法如果使用預設距離減衰曲線,將返回空表。
返回
GetInteractingListeners
返回
SetAngleAttenuation
設置一個角度超過音量曲線,影響 AudioListener 如何聽到 AudioEmitter 的音量,取決於它們之間的角度和與 LookVector 相關的 AudioEmitter 。
曲線由表映射角度鍵與音量值表示。鑰匙應該是 0 和 180 (包括在內)之間的唯一數字,而值應該是 0 和 1 (包括在內)之間的數字。支持包含最多 400 個鑰匙值對的表。
從角度來看, 的音量由線性插值決定,其中曲線上的點的角值直接高於或低於 的音量級別。如果沒有下面的 a 點或沒有上面的 a 點,則選擇另一個點的音量等級。本質上,曲線是由直線連接的一系列點,其左端和右端點之外,曲線在各自的音量水平上向外延伸。
這個音量將與所有其他減輕曲線的音量(包括接收端的 AudioListener )乘以以獲得最終的可聽度。
如果表是空或 nil ,則 AudioEmitter 默認使用角度減衰曲線的恆定體積值 1 。
參數
返回
SetDistanceAttenuation
設置一個遠程音量曲線,會影響 AudioListener 如何聽到 AudioEmitter 的音量,根據兩者之間的距離。
曲線由表映射距離鍵與音量值代表。鑰匙應為大於或等於 0 的獨特數字,而值應為 0 到 1(包括)之間的數字。支持包含最多 400 個鑰匙值對的表。
從遠處觀察的 的音量由線性插值決定,其中曲線上的點的距離值直接高於或低於 。如果沒有下面的 d 點或沒有上面的 d 點,則選擇另一個點的音量等級。本質上,曲線是由直線連接的一系列點,其左端和右端點之外,曲線在各自的音量水平上無限延伸。
這個音量將與所有其他減輕曲線的音量(包括接收端的 AudioListener )乘以以獲得最終的可聽度。
如果表是空或 nil ,則 AudioEmitter 預設使用由逆方形法律決定的距離減衰曲線。
參數
返回
範例程式碼
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 上的某個彈片或其他可連接的個體、實例。