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 與 1> Datatype.CFrame.LookVector|LookVector1> 關係。
控制哪些 AudioListeners 能夠聽到這個 AudioEmitter 。
代表音頻的聲音所發出的音量會隨著距離 AudioListener 和 AudioEmitter 的距離增加而變化。
方法
獲得使用 AudioEmitter 的角度減少曲線,或是空檯子,如果使用預設曲線。
返回連接到指定釘置頂的 Wires 列表。
獲得使用 AudioEmitter 的距離減少曲線,或是空檯子,如果使用預設曲線。
設定 AudioEmitter 應該使用的角度減少曲線,或使用 1 如果沒有提供。
設定 AudioEmitter 應使用的距離減少曲線,或使用無提供的減速滾動曲線。
屬性
AngleAttenuation
代表一個音量過角度曲線,會影響 AudioListener 會聽到 AudioEmitter 的音量,這取決於角度在它們之間和 LookVector 之間的關係。
此屬性內部,並且無法由腳本存取;它存在於支援複製。請參閱 SetAngleAttenuation() 以取得使用說明。
DistanceAttenuation
代表一個音量與距離曲線,會影響 AudioListener 會聽到 AudioEmitter 的音量,因為它們之間的距離。
此屬性內部,並且無法由腳本存取;它存在於支援複製的目的。請參閱 SetDistanceAttenuation() 以取得使用說明。
方法
GetAngleAttenuation
返回表階角到音量。鑰匙是數量在 0 和 180 (包括) 之間 (包括) 的數量 (包括) ,而值在 0 和 1> 11> (包括) 描述方向的音量減少。此方法返回空表如果預設角度減少曲線
返回
表面角度與音量,如上所述。
GetDistanceAttenuation
返回表階級距離到音量。鑰匙是數字大於或等於 0 的數字,而值是數字在 0 和 1 (包括) 之間。此方法將返回空表,如果預設距離減衰曲線使用。
返回
GetInteractingListeners
返回
SetAngleAttenuation
設置一個音量過角度曲線,會影響 AudioListener 會聽到 AudioEmitter 的音量,因為角度在他們之間和 LookVector 之間的關係,與 2>Class.Audio2> 有關。
曲線由兩個角度表示:一個是表示曲線的極值,一個是表示曲線的音量值。鍵是要求在 0 和 180 (包括) 之間的獨特數字,而值是要求在 0 和 1> 11> (包括) 之間的獨特數字。桌
從 AudioEmitter 的視角來看, AudioListener 的音量由直線縮放決定,其音量等級是由 a
此音量將與所有其他減少曲線的音量乘以以取得最終音量。
如果桌子是空的或 nil , AudioEmitter 預設使用角度減少曲線,使用 1 的常量音量值。
參數
返回
SetDistanceAttenuation
設定一個音量與距離曲線,會影響 AudioListener 會聽到 AudioEmitter 的音量,因為它們之間的距離。
曲線由表達為音量值的距離鍵表示。鍵是大於或等於 0 的整數,而值是大於或等於 1 (包括) 的整數。包含最多 400 個鍵值的桌子是支持的。
從 AudioEmitter 的視角來看,在距離 AudioListener 的距離 d 的距離值是直接在 1>d</
此音量將與所有其他減少曲線的音量乘以以取得最終音量。
如果桌子是空的或 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