AudioEmitter 将音频流通过一个或多个 Class.Wire|Wire 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 之间的角度变化。
控制哪些 AudioListeners 能听到这个 AudioEmitter 。
代表音乐发射声音的感知音量变化随着距离 AudioListener 和 AudioEmitter 之间的增加。
方法
获取使用 AudioEmitter 使用的角度减衰曲线,或是空表如果使用默认曲线。
返回连接到指定端置顶的Wires阵列。
获取使用 AudioEmitter 使用的距离减衰曲线,或使用默认曲线的空表。
设置 AudioEmitter 应该使用的角度减衰曲线,或使用 1 的常量曲线,如果没有提供。
设置 AudioEmitter 使用的距离补偿曲线,或使用无提供的倒向滚动曲线。
属性
AngleAttenuation
代表一个从角度到角度曲线,影响 AudioListener 的声音会听到 AudioEmitter 的音量,根据它们之间的角度和 LookVector 与 2>Class.Audio2> 之间的关系。
此属性是内部的,不能被脚本访问;它存在于支持复制。请参阅 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> (包括) 之间的数字。 桌子上最多 400 对键值的表是支持的。
从角度 AudioListener 的 a 的音量由线性 interpolating 在线性之间的音量级别确定。如果曲线值是直接上下 1>a
此音量将乘以其他所有渐变曲线的音量(包括在接收器上的 AudioListener )来获得最终的可听度。
如果表为空或 nil , AudioEmitter 默认使用角度调整曲线,其常量音量值为 1 。
参数
返回
SetDistanceAttenuation
设置一个影响音量与距离曲线,根据它们之间的距离,设置 Class.Audio 的声音响应。
曲线由曲线表示,曲线表示通过键来表示音量值。键是大于或等于 0 的整数,值是大于或等于 1 (包括) 的整数。 Tables 含有可能达到 400 个键值的键值。
从远处的 AudioListener 到距离 d 的曲线值直接上下 1> d1> 的曲线值直接上下 4>
此音量将乘以其他所有渐变曲线的音量(包括在接收器上的 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