audio_play_sound

此函数播放游戏中的任何声音资源

注意当声音停止播放时,会触发一个音频播放结束事件。

您可以提供声音资源并为其分配一个优先级,然后该优先级用于确定当播放的声音数超过函数audio_channel_num()设置的限制时如何处理声音。 优先级较低的声音将停止,以支持优先级较高的声音,并且优先级值可以是任何实数(实际值是任意的,可以是 0 到 1 或 0 到 100,因为GameMaker会以相同的优先级排列它们)。数字越高优先级越高,那么优先级为100的声音将优于优先级为1的声音。

第三个参数是创建声音循环并将其设置为true将使声音重复,直到手动停止,而将其设置为false将只播放一次声音。

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

可选属性

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

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

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

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

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

 

语法:

audio_play_sound(index, priority, loop, [gain], [offset], [pitch], [listener_mask]);

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

 

返回:

Sound Instance ID

 

示例1:基本使用

if (health <= 0)
{
    lives -= 1;
    audio_play_sound(snd_PlayerDead, 10, false);
}

上述代码检查"健康"全局变量,如果它小于或等于0,它将从"生活"全局变量中移除1并播放声音。

示例 2:可选属性

if (bbox_left > room_width)
{
    audio_play_sound(snd_Goodbye, 10, false, 1.1, 0, 2);
}

上面的代码检查实例是否超过了房间的右边界,并播放增益为1.1和音调为2(正常音调的两倍)的声音。

示例 3:资产和资产实例属性

audio_sound_gain(snd_Explosion, 0.7);
audio_sound_set_track_position(snd_Explosion, 2);
audio_play_sound(snd_Explosion, 10, false, 0.5);
audio_play_sound(snd_Explosion, 20, false, 1, 0);

上面的代码多次播放相同的声音。

首先,声音资源snd_Explosion的增益设置为 0.7。接下来,将其曲目位置(开始播放的位置)设置为2秒。

之后,会播放两个声音实例。第一个获得 0.5 的实例级增益并且没有偏移。该声音实例在 2 秒后开始播放,增益为 0.5 * 0.7 = 0.35。第二个实例将实例级增益保持在 1,并且将以 0.7 * 1 = 0.7 的增益听到。提供了其偏移量,该偏移量会覆盖为资源设置的 2 秒偏移量。该实例从头开始播放。