教程:制作资源包/音效和音乐
请帮助我们检查该内容是否仍在最新版本有效。
本页面介绍了通过资源包修改和添加音乐、音效的办法。
音效和音乐概要[编辑 | 编辑源代码]
音效和音乐是在游戏中播放的声音。音效是由游戏内特定操作产生的声音;音乐是由游戏自动播放,或根据环境选择播放的声音。
游戏中的所有声音都是通过声音事件定义文件控制的。该文件记录了游戏内用于播放声音的所有声音事件,以及每个声音事件所关联的所有声音文件和相关属性。该文件放置在assets/minecraft/sounds.json
处。
声音文件是储存游戏所播放的具体声音的文件。这些文件的格式为.ogg
。然而,游戏自带的声音文件并不储存在minecraft.jar中,而是在游戏自动下载的资源文件中。查询这些文件的办法将会在后文介绍。
在资源包中,所有声音文件都放置在assets/<命名空间>/sounds
。
修改已有的音效或音乐[编辑 | 编辑源代码]
如前所述,声音文件有着特殊的放置位置,因此其查询也需要特殊的技巧。也正因此,声音文件在资源包中的放置位置与内带资源的位置不同。下面将简单介绍内置声音文件的位置与获取方法,再讲解修改声音的方法。
查询内置声音[编辑 | 编辑源代码]
游戏内置的声音文件和sounds.json
是每次游戏启动时从Mojang服务器下载的。这类文件放置在.minecraft/assets/objects
下,按照这些文件的散列值命名。此外,在.minecraft/assets/indexes
下放置着资源索引文件,用于根据文件的资源路径查询散列值。
- 资源索引文件
资源索引文件是放置在.minecraft/assets/indexes
下的若干个.json
文件,存储了游戏不同版本的资源文件的散列值和大小。在1.19以前,这些文件按照版本的主版本号命名;1.20以后,这些文件改为用单增的数字命名,这些数字与游戏版本间没有明显的关系。
为确定1.20以后资源索引文件与游戏版本间的对应关系,可以查阅散列资源文件 § 索引名称,或在client.json中的assetIndex.id处确定该版本资源索引文件的名称(不含后缀名)。[注 1]
资源索引文件的格式如下:
- 根标签
- objects:该索引中,需从Mojang服务器下载的所有资源文件。
- <资源路径>:单个资源文件。
- hash:该文件的散列值。
- size:该文件的大小。
- <资源路径>:单个资源文件。
- objects:该索引中,需从Mojang服务器下载的所有资源文件。
其中,最重要的是<资源路径>和hash;前者用于确定文件在资源包中的位置,后者是该文件的散列值,用于确定文件在.minecraft/assets/objects
中的位置。
查阅时,事先并不明确资源路径的具体值。可以在wiki上查找,或者先查阅放置在minecraft/sounds
内的文件,再进一步筛选;也可先获取minecraft/sounds.json
,再在其中查阅声音文件的路径。
- 内置声音文件
游戏从Mojang服务器下载的文件全部放置在.minecraft/assets/objects
中。该文件夹下放置了若干文件夹,每个文件夹中都有若干无后缀名的文件。
每份下载的文件依据其散列值,放置在.minecraft/assets/objects/<散列值的前两位>/<散列值>
处。[注 2]
注意:这些文件是没有拓展名的!可以复制一份文件,并补充正确的拓展名,以便后续使用。
修改声音[编辑 | 编辑源代码]
上一步已经获取了游戏内置的声音文件;现在,可以对这一文件做任意的修改,或直接从头制作声音。这一步需要使用音轨编辑器。得到的文件必须是.ogg
格式。
编辑完成后,需要将该文件放置在资源包中。在资源包中,声音文件放置在上一步确定的资源路径所指示的位置。不必也不应修改.minecraft/assets/objects
中的文件,因为这些文件在游戏启动时可能会因重新下载而被覆盖。
在这一步,声音文件必须严格按照已有文件的路径命名,才能覆盖原文件,被游戏正常读取。如果名称不同,需要修改其他文件,才能使此声音文件被正常读取;这是§ 添加新的音效或音乐的内容。
添加新的音效或音乐[编辑 | 编辑源代码]
游戏中所有声音的播放是由sounds.json控制的。要想增删播放的声音,必须更改这一文件。
该文件记录的是声音事件与声音文件的关系。每个声音事件可以关联一个或多个声音文件;若有多个声音文件,每次声音事件将会随机选择一则声音播放。此外,声音事件还可以和字幕关联;这方面的内容参见§ 修改或添加声音的字幕。
声音事件是游戏引用声音的符号。资源包无法修改游戏中各行为调用的声音事件的名称,即使添加了新的声音事件,也需要通过命令或进行其他修改才能调用这些事件。相反,只要与已有的声音事件相关联,可以任意增删声音文件。
下面以添加玩家受伤音效为例,介绍添加音效的流程。
声音文件[编辑 | 编辑源代码]
使用音轨编辑器或其他编辑器,创建一个.ogg
文件,其中包含所需添加的玩家受伤音效。
编辑完成后,该文件需要放置在资源包中。由于所修改的声音事件在minecraft命名空间下,此声音文件必须放置在assets/minecraft/sounds
下。在该文件夹中,建议将文件放置在与其他文件统一的位置。本教程中,该文件放置在assets/minecraft/sounds/damage/hit4.ogg
;hit1
至hit3
是游戏内置的音效。
sounds.json[编辑 | 编辑源代码]
由于所修改的声音事件在minecraft命名空间下,这里的sounds.json
必须放置在assets/minecraft
下。
在填写该文件前,先要找到对应的声音事件的名称。这一内容可在各个实体、方块及物品的音效章节找到。例如,玩家受伤时的声音事件为entity.player.hurt
。
创建assets/minecraft/sounds.json
,填写以下内容:
{
"entity.player.hurt": {
"sounds": [
"damage/hit4"
]
}
}
该文件中,sounds表示与该事件关联的声音文件,是从assets/minecraft/sounds
算起的相对位置。除非设置replace为true
,该列表会补充到游戏自带的列表中,而非覆盖相应列表;因此,这里只需要填写新增的文件即可。
这里使用了字符串定义声音文件。如需要更精细的参数,可以使用一个复合标签定义声音文件。
注意:本文件使用JSON格式。若文件中缺少特定的格式标记符,资源包可能无法被识别。
作为参考,游戏内对entity.player.hurt
事件的定义如下:
{
"entity.player.hurt": {
"sounds": [
"damage/hit1",
"damage/hit2",
"damage/hit3"
],
"subtitle": "subtitles.entity.player.hurt"
}
}
修改或添加声音的字幕[编辑 | 编辑源代码]
如前所述,sounds.json中的声音事件可以与字幕相关联。这是通过subtitle字段定义的。该字段包含一个由本地化键名定义的可翻译字符串。
如果需要为声音事件添加字幕,需要编辑sounds.json
,以添加事件与字幕的关联;然而,如需修改已有的字幕,则不应在此修改,而是修改本地化键对应的本地化文本。
测试声音[编辑 | 编辑源代码]
与其他内容不同,要在游戏中控制某声音的产生未必方便。可以使用/playsound
触发特定声音事件,但无法控制播放该声音事件下的哪一个声音。因此,可能需要多次执行该命令,直到游戏播放所改动的声音文件。
导航[编辑 | 编辑源代码]
[隐藏] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|