- 致编者:请牢记我们的域名wiki.mcbe-dev.net!
- 致编者:欢迎加入本Wiki的官方交流QQ群或Discord服务器!
- 基岩版1.19.31现已发布!(了解更多)
- Inner Core现已支持Xbox模组联机!(了解更多)
- 如果您是第一次来到本Wiki,欢迎注册一个账户
- 点击顶部的“编辑”或“编辑源代码”按钮即可编辑当前页面
- 请知悉:在不登录时也可以编辑和新建页面,但是您当前的IP地址会记录在编辑历史中
教程:制作附加包/声音
引言[编辑]
声音(Sound) 包含了游戏中所能听到的由各种音频文件所播放出的内容,例如游戏背景音乐、生物音效、方块音效、环境音效等。
接下来我们将帮助您:
- 了解声音的文件结构
- 修改已有声音
- 添加自定义声音
在此之前请先下载官方的 示例资源包 ,它能方便您接下来的操作
文件结构[编辑]
- 资源包文件夹
- manifest.json:清单文件
- sounds.json:声音的 游戏事件对应 管理文件
- sounds:声音主文件夹
- music_definitions.json:音乐注册文件
- sound_definitions.json:声音注册文件
- wiki.ogg:自定义声音文件
- music
- game
- calm1.ogg:需要修改的声音
- game
声音目前支持三种文件格式 .wav
.ogg
.fsb
,您需要明确 音乐 和 音效 是不同的,而 声音 是它们的总称。
此处我们修改的声音是最典型的 音乐
注意:如果您修改了上述的任何一个文件,都需要重启游戏客户端才能起效。/reload 和 重启世界 是无效的。
开始[编辑]
声音定义[编辑]
接下来您需要打开 sound_definitions.json
如果没有,请先创建一个
接下来我们来观察这个文件的基本格式:
{
"format_version": "1.14.0", //格式版本
"sound_definitions": { //声音定义区
"example.wiki": { //名称
"category": "neutral", //类型
"sounds": ["sounds/wiki"] //声音路径
}
}
}
可以看到它有两个顶级属性(这里将关键字译作属性),分别是 format_version
和 sound_definitions
,显而易见,format_version 就是版本格式,不需要我们多说了,我们来看另一个顶级属性 sound_definitions ,在上的例子中,它下面有一个 example.wiki,我们称它为短名,它并非一个 命名空间 ,但是它可以在 music_definitions.json 和 sounds.json 引用,也可以使用 /playsound 播放,但现在它还会跟游戏中的事件绑定,也没有一个有效的命名空间。
接下来我们看看下面这些属性(都在同一位置):
- category:类型,类型由播放引擎内部使用,以决定如何播放每个声音
类型 | 含义 | 注意 |
---|---|---|
weather | 天气 | |
block | 方块 | |
bucket | 桶 | |
bottle | 瓶子 | |
ui | 用户界面 | 播放时不受空间限制(即没有最大/最小距离选项) |
player | 玩家 | |
hostile | 敌对生物 | |
music | 音乐 | |
record | 唱片 | |
neutral | 其他 | |
<any_string> | 任何字符串 | 自定义你自己的声音类型 |
- max_distance:最大距离(浮点值),在此距离后达到最低音量,类型错误时忽略此选项
- min_distance:最小距离(浮点值),在此距离后,音量开始衰弱,类型错误是忽略此选项
- sounds:管理此声音的一些特殊属性
接下来我们重点介绍 sounds
这个属性下的内容:
从上面那个json例子可以看出 sounds 有一种简单的写法,仅包含声音路径,我们接下来介绍复杂的写法:
{
"format_version": "1.14.0",
"sound_definitions": {
"example.wiki": {
"category": "neutral",
"sounds": [
{
"name": "sounds/wiki",
"is3D": false,
"stream": true,
"volume": 1.0,
"load_on_low_memory": true,
"pitch": 1.0,
"interruptible": true,
"weight": 1
},
"sounds/wiki2" //如没有,请创建一个
]
}
}
}
观察上面的 json 范例,我们便能发现两个要点:
- sounds 下的属性既可以为字符串,也可以为对象。当为字符串时,直接代表路径;当为对象时,则可以添加其他内容 路径 成为 name 属性 的 值
- sounds 下面有多个属性时,随机抽取一个属性对应的路径下的音乐播放
那么 sounds 下面对象中的属性有哪些作用呢,接下来让我向您介绍:
- name:必要的,用于表示音乐路径
- stream:流线播放(布尔值),将这个声音修改为 缓存播放 的形式,即一次提取少部分音乐播放,而不是整段音乐直接提取到内存中,从而使用较少的内存。可以提高性能
- volume:强度(浮点数),用来定义在游戏尝试播放声音之前,声音可以在多远的距离内。默认情况下,在引擎尝试播放声音之前,收听者必须距离声源<= 16个方块(也就是为1.0的情况)
- load_on_low_memory:强加载到内存(又称 低内存加载 ,布尔值),即使在内存低的情况下也强制播放音乐
- pitch:音调(浮点数) (默认为1.0)
- is3D:立体声(又称 3D音乐 ,布尔值),是否采用立体声播放( music 和 ui 不使用)
- weight:权重(整数值),当前权重占总权重的百分之比,就表示着有多少的概率被选中播放,上面 例子 中,wiki 的播放概率是50%,wiki2 的播放概率是50%
这样我们就成功的学会定义声音了
修改已有声音[编辑]
修改已有声音很简单
在Minecraft中,音频文件储存于sounds
文件夹内。通过修改sounds
文件夹内对应的.ogg
音频文件,便可以更改原版音乐。
具体方法也很简单,首先,在与manifest.json
同层的地方,创建一个名字为sounds
的文件夹,将准备好的音频文件改名为 你想要修改的原版音频文件名,后缀改为.ogg
即可。
要注意的是不同的音频文件放在不同的文件夹内,如add_candle1.fsb
就放在/sounds/block/cake/
路径下。
定义音乐[编辑]
定义音乐需要修改 music_definitions.json 文件,我们来看一下它的基本格式:
{
"game": {
"event_name" : "music.game",
"min_delay": 600, //最小延迟
"max_delay": 1200 //最大延迟
}
可惜的是,游戏现在还不允许自定义音乐
绑定游戏事件[编辑]
如果我们想让声音自动运行,我们可以将它们添加到 sounds.json 文件中。这将把声音定义直接绑定游戏事件。
我们可以看一下基本格式:
{
"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
}
}
}
}
}
}