audio_play_sound_at

使用此函数,您可以在音频空间内的给定位置播放任何声音资源。

NOTE An Audio Playback Ended event is triggered for the sound when it stops playing.

提供声音索引,然后在 3D 空间中为其指定一个位置。默认收听者位置是( 0, 0, 0),因此这意味着如果收听者没有被移动,并且希望声音从左边来(例如),您应该将x位置设置为负值(有关设置收听者位置的详细信息,请参见audio_listener_position())。

您还可以设置衰减距离(0 将使声音静音,默认值为 100),使声音在远离收听者位置时逐渐衰减。如何听到衰减本身将取决于衰减参考(即源音量通常下降一半的距离)和滚降因子(仅影响经过衰减参考距离的声音)。默认因子通常为1,不同衰减值的效果将取决于所选模型(有关不同衰减模型的完整指南以及这些值的使用,请参见函数audio_falloff_set_model())。

接下来的两个参数是设置声音是否循环,并为声音分配优先级。当播放的声音数超过函数audio_channel_num()设置的限制时,此优先级用于确定如何处理声音。 优先级较低的声音将停止,以支持优先级较高的声音,并且优先级值可以是任何实数(实际值是任意的,可以是 0 到 1 或 0 到 100,因为GameMaker会以相同的优先级排列它们)。请注意,当处理优先级时,越高的数字优先级越高,这样优先级 100 的声音将优于优先级为 1 的声音。

此函数还将返回正在播放的声音的唯一索引,该索引可以存储在变量中,以便以后暂停停止。 这意味着,如果在同一时间播放同一声音的多个实例,则可以使用音频函数只瞄准该声音的一个实例。

可选属性

有四个可选参数可让您更改在实例/语音级别播放的声音的音频属性

... [gain], [offset], [pitch], [listener_mask]

它们立即应用于声音。这解决了调用单独的函数来更改任何这些值时可能会遇到的问题,这可能会导致更改出现意外的延迟。

这些属性乘以健全资产的相应价值。如需完整概述,请参阅音频属性概述

注意要在开始播放声音后更改这些属性中任意属性的值,请参见audio_sound_gain获取增益,audio_sound_set_track_position了解偏移,audio_sound_pitch表示音调,audio_sound_set_listener_mask表示收听者掩码。

 

语法:

audio_play_sound_at(index, x, y, z, falloff_ref, falloff_max, falloff_factor, loop, priority, [gain], [offset], [pitch], [listener_mask]);

参数类型描述
indexSound Asset or Audio Queue ID播放声音的索引。
xRealX 位置
yRealY 位置
zRealZ 位置
falloff_refReal相对于监听器(钳位)的衰减参考。
falloff_maxReal相对于侦听器的最大衰减距离。
falloff_factorReal衰减系数(默认值1)。
loopBoolean标记声音是否循环。
priorityReal设置声音的通道优先级。
gainReal可选声音实例的增益(默认为 1)。
offsetReal可选开始播放的时间(以秒为单位)。超出声音末尾的值将被限制在其长度内。默认值是资产级别偏移量,该值在提供时会覆盖它。
pitchReal可选音调乘数(默认为 1)。
listener_maskReal可选为声音设置的位掩码数据。在 HTML5 目标上,这不会产生任何影响,因为该目标不支持多个侦听器。

 

返回:

Sound Instance ID

 

示例1:

if (global.SFX)
{
    audio_play_sound_at(snd_Waterfall, x, y, 0, 100, 300, 1, true, 1);
}

上面的代码检查全局变量"SFX",如果它返回true,变量"snd_Waterfall"中索引的声音将在其房间位置循环,衰减参考为100,衰减距离为300,衰减因子为1,优先级较低。

示例2:

if (global.SFX)
{
    audio_play_sound_at(snd_Waterfall, x, y, 0, 100, 300, 1, true, 1, 1, 2);
}

上述代码检查全局变量"SFX",如果它返回true,则变量"snd_Waterfall"中索引的声音将使用给定衰减设置在其房间位置循环,且增益没有变化。声音从第二秒立即开始播放。