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 使用的角度抵消曲线,或使用默认曲线的空表。
返回与指定的引置顶连接的 Wires 阵列。
获取 AudioEmitter 使用的距离衰减曲线,或使用默认曲线的空表。
设置 AudioEmitter 应使用的角度减衰曲线,或使用恒定曲线的音量 1 如果没有提供。
设置 AudioEmitter 应使用的距离衰减曲线,或在没有提供的情况下使用反向衰减曲线。
活动
当另一个实例通过 AudioEmitter 连接到或与 Wire 断开时发生火焰。
属性
AngleAttenuation
表示影响 AudioListener 如何听到 AudioEmitter 的音量的角度曲线,其基于他们之间的角度和与 LookVector 相关的 AudioEmitter 。
该属性是内部的,不能通过脚本访问;它存在于支持复制的目的。见 SetAngleAttenuation() 获取使用详情。
DistanceAttenuation
代表一个影响 AudioListener 如何响亮地听到 AudioEmitter 的距离曲线,根据它们之间的距离。
该属性是内部的,不能通过脚本访问;它存在于支持复制的目的。见 SetDistanceAttenuation() 获取使用详情。
SimulationFidelity
方法
GetAngleAttenuation
返回一个表映射角度到音量。钥匙是在 0 和 180 之间的数字(包括在内),而值是在 0 和 1 之间的数字(包括在内),用于描述音量会随着方向而减弱。该方法如果默认角度减衰曲线正在使用,将返回一个空表。
返回
表映射角度到音量,如上所述。
GetDistanceAttenuation
返回表映射距离到卷。钥匙是大于或等于 0 的数字,而值是介于 0 和 1(包括在内)之间的数字,描述音量在距离上减弱的方式。该方法如果使用默认距离衰减曲线,将返回一个空表。
返回
GetInteractingListeners
返回
SetAngleAttenuation
设置一个音量对角曲线,影响 AudioListener 如何听到 AudioEmitter 的声音,基于他们之间的角度和与 LookVector 相关的 AudioEmitter 。
曲线由表映射角键表示到音量值。钥匙应该是 0 和 180 (包括在内)之间的唯一数字,而值应该是 0 和 1 (包括在内)之间的数字。支持包含最多 400 个键值对的表。
从角度来看, 的音量由线性插补确定,其中曲线上的点的角度值直接高于或低于 。如果没有点低于 a 或没有点高于 a ,则选择另一点的音量级别。本质上,曲线是由直线连接的一系列点,其左端和右端端点之外,曲线在各自的音量水平上向外延伸。
该卷将与所有其他衰减曲线的卷积乘以以获得最终可听度。
如果表是空的或 , 那么默认使用角度减衰曲线的恒定体积值 。
参数
返回
SetDistanceAttenuation
设置一个影响 AudioListener 如何听到 AudioEmitter 的音量-在距离上的曲线,基于它们之间的距离。
曲线由表映射距离键与音量值映射表代表。钥匙应为大于或等于 0 的独特数字,而值应为 0 到 1(包括在内)之间的数字。支持包含最多 400 个键值对的表。
从远处看,曲线上的点的音量由线性插补决定,其距离值直接高于或低于 。如果没有点低于 d 或没有点高于 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
活动
WiringChanged
在 Wire 连接或断开后发生的事件,该 Wire 现在或之前已连接到 AudioEmitter 上的某个引脚或其他可连接的实例。