音效
在基岩版中,我们可以添加自定义音效而不覆盖任何原版音效。这是通过将文件添加到资源包中实现的。
TIP
了解音效的最佳方式是下载并研究默认资源包。
文件夹结构
添加音效时需要编辑两个主要文件。注意sound_definition是如何嵌套在sounds文件夹中的。
音效文件本身被添加到sounds文件夹中,可以是以下任意格式:
- 📝sounds.json
- 📝sound_definitions.json
- 📝example.wav
- 📝example.ogg
- 📝example.fsb
sound_definitions.json
sound_definitions.json用于定义新的音效简称。可以将其视为将简称或ID映射到实际音效路径。以下是一个添加名为example.toot的新小号音效的示例:
{
"format_version": "1.14.0",
"sound_definitions": {
"example.toot": {
"category": "neutral",
"sounds": ["sounds/trumpet"]
}
}
}以这种方式添加的音效可以使用/playsound命令触发。请注意,playsound不会自动纠正输入,因此需要小心输入。
WARNING
通过文件路径引用的新文件(如音效)需要完全重启客户端才能加载。这意味着如果音效不起作用,应该重启整个Minecraft客户端,而不仅仅是重新加载世界。
/playsound 音量说明
游戏会在将音量乘以音效定义的音量之前,将音量限制在最多1.0。
对于/playsound,音效的最大可听范围由min(max_distance, max(volume * 16, 16))决定。 如果音效定义中没有给出"max_distance",则等同于playsound_volume * 16。
以下是距离对音效衰减的近似影响。实际图表可能不是线性的。

上图显示了当播放音量参数大于或等于1时,距离对音效衰减因子的近似影响。注意<volume>参数如何限制音效的可听范围。 distance轴表示音效监听者(玩家)与音源的距离。对应的volume轴值是播放音量的因子,上限为1,乘以音效定义的音量得到最终听到的音效音量。可以用表达式表示为:final_volume = min(playsound_volume, 1) * graph_volume * sound_definition_volume。
注意: 音效音量随距离的衰减不受命令中音量参数的影响。
例如,mob.ghast.affectionate_scream设置了"min_distance": 100.0,但在使用/playsound命令播放时,音量设为1时最多只能在16格内听到。指定更大的音量值可以增加可听范围。当使用足够大的音量使音效在更远处可听时,音效音量只会在距离超过100.0后逐渐减小。
要制作一个可以在远处听到但音量随距离持续减小的音效,可以添加例如"volume": 0.01并在/playsound命令中使用较大的<volume>值。/playsound的高音量值会产生较大的可听范围(例如音量为4时是64格,如上计算),而低音量可以防止播放的音效过早达到1.0上限。
顶级键
在上面的示例中,我展示了两个顶级字段:category和sounds。sounds将在下面详细讨论,其他顶级键将在此讨论:
类别
类别由引擎内部用于决定每个音效的播放方式。我们可以利用不同的通道获得其他效果。
| 类别 | 说明 |
|---|---|
| weather | |
| block | |
| bucket | |
| bottle | |
| ui | 此类别中的音效将忽略范围限制 |
| player | |
| hostile | |
| music | |
| record | |
| neutral |
min_distance
音源距离超过此值后,音效音量开始衰减。默认值:0.0。必须为浮点数(如1.0),否则该属性将被忽略。
max_distance
音源距离超过此值后,音效音量达到最安静(如果在范围内)。必须为浮点数(如1.0),否则该属性将被忽略。
音效定义
在上面的示例中,我将sounds显示为一个包含单个路径的列表。这对于简单音效很好,但功能有限。首先,我可以在列表中添加多个音效。这些音效将在播放时随机选择:
{
"format_version": "1.14.0",
"sound_definitions": {
"example.toot": {
"category": "neutral",
"sounds": [
"sounds/trumpet",
"sounds/trumpet2",
"sounds/trumpet3"
]
}
}
}此外,我们可以将每个音效定义为对象而不是字符串。这允许更精细的控制并解锁一些新设置。字符串/对象风格可以混合使用。
name
文件路径,例如:"sounds/music/game/creative/creative1"
stream
限制音效同时播放的实例数量。会使游戏在播放时不将整个音效数据加载到内存中,而是在播放时加载较小的部分,从而使用更少的内存。适用于音效繁重的世界以提高性能。
volume
音效应播放的音量,从0.0到1.0。音效不能比初始编码时更响亮。默认设置为1.0。 自定义资源包中的音效可以设置大于1.0的有效值。
load_on_low_memory
强制在内存不足时加载音效。"load_on_low_memory"自1.16.0起已弃用。
pitch
音效的音调(听起来的高低)。应为正值。例如,2.3将使音效以2.3倍速度播放,从而音调更高。默认设置为1.0。
is3D
true使音效具有方向性。默认对所有音效设置为true。music和ui音效忽略此设置。只有设置为false的音效会播放立体声。
interruptible
默认设置为true。
weight
如果列表中有多个音效,将随机选择要播放的音效。"weight"(整数值如5)将给出此音效从列表中被选择的相对概率。例如,如果列表中有两个音效,一个"weight": 10,另一个"weight": 2,第一个音效被播放的概率大约是第二个的5倍(准确地说:10 / (10 + 2) = 83.3%概率 vs. 2 / (10 + 2) = 16.7%概率)。默认设置为1。
示例
以下是一个包含这些选项的更现实示例:
"block.beehive.drip": {
"category": "block",
"max_distance": 8,
"sounds": [
{
"name": "sounds/block/beehive/drip1",
"load_on_low_memory": true
},
"sounds/block/beehive/drip2",
"sounds/block/beehive/drip3",
"sounds/block/beehive/drip4"
]
}sounds.json
如果我们希望音效自动运行,可以将它们添加到sounds.json文件中。这将直接将音效定义绑定到游戏事件,无需使用/playsound触发。
音效可以添加到各种类别中:
| 类别 | 说明 |
|---|---|
| individual_event_sounds | 包含如信标激活、箱子关闭或爆炸等音效 |
| block_sounds | 包含方块的击打、脚步和破坏音效 |
| entity_sounds | 包含实体的死亡、环境、受伤等音效(包括自定义实体!) |
| interactive_sounds | 开发中 |
添加实体音效
我假设音效可以添加到其他类别中,但我个人只有将音效添加到entities类别的经验。实体音效会在实体生命周期的各个阶段自动播放。
常见事件:
| 事件 | 说明 |
|---|---|
| ambient | 随机播放,如咕哝声、咯咯声或恶魂噪音 |
| hurt | 受伤时播放 |
| death | 死亡时播放 |
| step | 实体在地面上移动时播放 |
| fall.big | 从高处落地时播放 |
| fall.small | 从低处落地时播放 |
| splash | 在水中溅起水花时播放 |
| attack | 近战攻击时播放 |
| shoot | 发射投射物时播放 |
| cast.spell | 开始召唤时播放 |
| prepare.attack | 完成召唤时播放 |
| roar | 咆哮时播放 |
还有许多音效事件,很可能自动触发,但我没有详细信息,例如:
| 未知类别 |
|---|
| breathe |
| splash |
| swim |
| ambient.in.water |
| death.in.water |
| jump |
| eat |
| hurt.in.water |
| mad |
| stare |
| sniff |
| sleep |
| spit |
| warn |
| scream |
示例
{
"entity_sounds": {
"entities": {
"wiki:elephant": {
"volume": 1,
"pitch": [0.9, 1.0],
"events": {
"step": {
"sound": "elephant.step",
"volume": 0.18,
"pitch": 1.1
},
"ambient": {
"sound": "elephant.trumpet",
"volume": 0.11,
"pitch": 0.9
}
}
}
}
}
}将音效添加到动画中
动画中播放的音效基于RP实体文件中的简称定义。
此示例展示了播放翅膀拍打音效,与动画同步。
"sound_effects": {
"wing_flap": "wiki.dragon.wing_flap" //其中wiki.dragon.roar是在sound_definitions中定义的音效
}"sound_effects": {
"3.16": {
"effect": "wing_flap"
}
}将音效添加到动画控制器中
可以在动画控制器中以类似动画的方式播放音效。
此示例展示了播放爆炸音效,使用动画控制器同步。
"sound_effects": {
"explosion": "wiki.custom_tnt.explosion" //其中wiki.custom_tnt.explosion是在sound_definitions中定义的音效,与动画音效类似。
}"states":{
"default":{
"transitions":[
{
"explode_state":"q.mark_variant == 1"
}
]
},
"explode_state":{
"sound_effects":[
{
"effect":"explosion"
}
],
"transitions":[
{
"default":"q.mark_variant == 0"
}
]
}
}







