GameMaker拥有一个基于*.ogg、*.mp3和*.wav声音格式的完整音频引擎。
添加到 IDE的这些类型的声音可以通过下面所示的音频函数在您的游戏中使用。
对于比基本音效或播放一首音乐更复杂的事情,您可以参考高级音频功能,它可以让您修改声音的播放方式。还有一系列更专业的功能专用于流音频、定位音频(提供 3D 声音)、分组音频、同步音频和音频效果。
重要信息在 HTML5 目标上使用音频时,您应该注意并非所有浏览器都支持网络音频,因此在运行时可能不会为您的项目播放任何声音。您可以通过以下链接大致了解网络音频支持:我可以使用网络音频吗?。
播放声音最直接的方法是使用audio_play_sound:
audio_play_sound(snd_Explode, 10, false);
您至少必须提供声音资源、新声音实例的优先级以及声音是否应循环播放。
另一种播放声音的方法是使用audio_play_sound_ext。此函数与audio_play_sound相同,但允许您在结构中传递各种音频参数。使用此函数,您只需通过结构体的"sound"键提供声音资源:
audio_play_sound_ext({ sound: snd_Explode });
此处优先级将默认为 0,并且声音不会循环播放。您可以在结构中提供附加键来更改声音的属性。
注意当声音停止播放时,会触发一个音频播放结束事件。
函数audio_play_sound和audio_play_sound_ext创建声音的新实例(也称为"语音")并返回其 ID:
ins_sound = audio_play_sound(snd_Explode, 10, false);
您可以在函数中使用此声音实例ID 来更改实例级别的音频属性(或直接将它们作为可选参数传递)。这只会更改该特定声音实例的属性。
如果您将声音资产ID 传递给函数,资产级别的音频属性将设置为给定值。
注意audio_play_sound_at和audio_play_sound_on的工作方式相同,也返回它们创建的声音实例的 ID。
提示默认情况下,声音实例/声音的最大数量为128。可以使用函数audio_channel_num更改此值。
每种声音都具有应用于不同"级别"的基本属性。根据属性,它可以充当乘数,也可以覆盖在前一级别设置的值。
这些音频属性是:
有关所有音频属性、级别及其值计算方式的概述,请参阅音频属性概述。
注意您可以传递给audio_play_sound_*函数的可选参数设置属性的实例级值。
可以通过将声音设置为循环来使其循环播放。这可以在使用任意audio_play_sound_*函数播放声音时完成:
ins_sound = audio_play_sound(snd_Engine, 100, true);
或者之后,当声音已经播放时,使用函数audio_sound_loop:
audio_sound_loop(ins_sound, true);
默认情况下,声音从开始到结束循环。可以分别使用audio_sound_loop_start和audio_sound_loop_end更改开始位置和结束位置,也可以在声音播放时进行更改(即ins_sound指的是以下声音实例)audio_is_playing返回true)。
如果声音设置为循环,则当曲目位置到达循环结束位置时,它将从开始位置继续播放。
重要循环结束位置必须超过循环开始位置。例外情况是循环结束的值 0.0,它标记声音的结束(即audio_sound_length)。
请参阅:音频循环点
最后,您可以向播放的音频添加效果,例如混响、回声、延迟等。
音频效果是使用audio_effect_create创建的,然后分配给音频总线的效果槽之一。您始终可以为其分配效果的音频总线是主音频总线audio_bus_main。
See: 音频效果
如果您需要位置音频或应在三维环境中播放的音频,您可以使用音频发射器和音频监听器。
注意音频发射器引入了另一个级别的增益、音高和听者遮罩参数。
所有声音资源(流式音频除外)都属于单个音频组。音频组中的声音可以同时加载和卸载。
音频组有自己的增益系数(请参阅audio_group_set_gain/audio_group_get_gain)
注意默认情况下,所有声音都会添加到音频组audiogroup_default。
GameMaker支持直接从 .ogg 文件加载流式音频。为此,您可以使用audio_create_stream和audio_destroy_stream。
对于应在每个样本级别完美同步播放的音频,GameMaker具有同步组。有关详细信息,请参阅音频同步。
为 HTML5 目标平台创建游戏时,音频引擎需要网络音频支持,这意味着有时您的音频无法按您期望的时间或方式播放。这是因为当您玩游戏时,Web Audio 上下文可能未运行或停止运行。造成这种情况的原因在浏览器之间甚至同一浏览器的不同版本之间差异很大,因此检测网络音频上下文状态何时发生变化非常重要,例如:检测上下文何时发生变化以及暂停/开始循环音频(如背景音乐)。
为了帮助解决此问题,GameMaker有两种不同的方法来检测网络音频上下文状态的变化,即使用以下函数:
或使用异步系统事件,每当网络音频状态发生变化时就会触发该事件。在这种情况下,您将获得内置的async_loadDS 映射,其中填充了键"event_type",如果该映射是一个字符串,则该映射将保存字符串"audio_system_status"音频事件。当此键存在时,还会有另一个"status"键,其状态为"available"或"unavailable"。
欲了解更多信息,请参阅以下部分:
注意此事件将在所有平台上触发,但在除 HTML5 之外的所有平台上,只会在游戏开始时音频引擎首次初始化时触发一次。
要检查是否可以使用网络音频播放音频,您可以使用audio_sound_is_playable。